{
  "openapi": "3.0.0",
  "paths": {
    "/v1/stable/agent": {
      "get": {
        "operationId": "StableAgentController_get",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_agent",
            "toolDescription": "The Main Agent — the project-level configuration every conversation runs through. One Agent per Project, read and written as a single object spanning five layers:\nGlobal Prompt — markdown prepended to every LLM call the agent makes: Agent routing, every Playbook, every Operator step inside Workflows. It's the top of the prompt stack: identity, tone, formatting rules, guardrails. Structure it with markdown headings, never XML tags — the editor renders markdown and stores tags as literal text. Persona sections: ## Identity, ## Goal, ## Tone, ## Formatting. Guardrail sections, in the same field after the persona: ## Terminology, ## Escalation, ## Silent execution, ## Data handling. The ## Tone section MUST carry WRONG/RIGHT examples; abstract tone descriptions don't constrain output. Total length 100-1000 words. An opt-in flag appends Voiceflow's default prompting guidelines.\nInstructions — markdown-structured routing logic telling the LLM how to choose among the registered playbooks and workflows. Required sections: ## Routing (overall strategy), ## Routing table (per-target decision rules), ## Clarification (how to ask follow-ups when intent is ambiguous), ## Rules (hard constraints like \"never re-greet\", in > callouts). Strictly routing logic — persona lives in the global prompt, domain content lives in Playbook Instructions.\nRouting registry — the structured list of targets the Main Agent can route to, each with its own routing description. The registry controls WHICH targets are reachable; the instructions control WHEN each is picked — a target registered without a matching ## Routing table entry is reachable but never chosen.\nBehavior — project-wide defaults affecting every LLM call: default model + temperature + max tokens, priority processing, outage protection (per-provider fallback models). For phone-call projects, this layer also covers TTS (provider/voice/synthesis/tuning/pronunciation dictionary) and STT (provider/model/language/keypad input).\nSystem tools — Knowledge Base, web search, buttons, cards, carousels, skip turn, call forward, and end — first-party platform behaviors, distinct from Functions/APIs (user-defined code/HTTP) and Integrations (third-party services). Enabled here, they're inherited by every playbook, which may customize the description but cannot disable; per-playbook overrides live on the playbook itself. Each carries a configurable LLM-routing description — write it in WHAT/WHEN format (WHAT the tool does AND WHEN to pick it). Defaults are reasonable but often too generic (e.g. \"Use this when you have something to say\" vs. \"Use to render a list of available time slots as tappable buttons\"). A separate ordering controls the sequence of the agent's exit paths.\nModifications take effect only after the environment is recompiled.\nPredecessor: select the project and environment first, and check the Project type — some voice fields are phone-call only; create a playbook before wiring it into the routing registry.\nSuccessor: create playbooks for task-specific instructions (those don't belong in prompt), recompile the environment, then run a test conversation to verify identity/tone come through and routing picks the right target on representative utterances. For voice projects, listen to the actual audio output, not just the text trace.",
            "operation": "get",
            "operationDescription": "WHAT — Read the full agent configuration in one call. The global prompt and the instructions are NOT included by default; promptLineCount and instructionsLineCount always are.\nUSE WHEN — Before editing any part of the agent (merge target for update), auditing the agent's full capability surface, or diagnosing an identity, tone, routing, or tool problem that could originate in any of these layers. Pass includePrompt: true / includeInstructions: true when the line counts say the text is short enough to pull whole; page long ones with voiceflow_agent.read_prompt and voiceflow_agent.read_instructions instead.\nDO NOT — Treat an ABSENT prompt or instructions field as \"unset\" and overwrite it; absent means \"not requested\". A field that is present and empty is the unset case, and on a freshly imported .vf agent it may simply not have materialized yet."
          },
          "cli": {
            "command": "agent get"
          }
        },
        "x-speakeasy-group": "agent",
        "x-speakeasy-name-override": "get",
        "summary": "Get agent",
        "description": "Returns the environment’s agent: the global prompt, the instructions that route a turn, and the settings wrapping both.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          },
          {
            "name": "includeInstructions",
            "required": false,
            "in": "query",
            "schema": {
              "default": false,
              "description": "Instructions can be tens of thousands of lines. Leave this off and use read_instructions to page through them only when you need the text.",
              "type": "boolean"
            }
          },
          {
            "name": "includePrompt",
            "required": false,
            "in": "query",
            "schema": {
              "default": false,
              "description": "The global prompt can be tens of thousands of lines. Leave this off and use read_prompt to page through it only when you need the text.",
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the agent's whole configuration: its model settings, prompt, instructions, the playbooks and workflows attached to it, and its system tool setup. The voice section is optional and may be absent.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAgentResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the agent's whole configuration: its model settings, prompt, instructions, the playbooks and workflows attached to it, and its system tool setup. The voice section is optional and may be absent."
            }
          }
        },
        "tags": [
          "Agent"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns the environment’s agent: the global prompt, the instructions that route a turn, and the settings wrapping both."
        }
      },
      "patch": {
        "operationId": "StableAgentController_update",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_agent",
            "toolDescription": "The Main Agent — the project-level configuration every conversation runs through. One Agent per Project, read and written as a single object spanning five layers:\nGlobal Prompt — markdown prepended to every LLM call the agent makes: Agent routing, every Playbook, every Operator step inside Workflows. It's the top of the prompt stack: identity, tone, formatting rules, guardrails. Structure it with markdown headings, never XML tags — the editor renders markdown and stores tags as literal text. Persona sections: ## Identity, ## Goal, ## Tone, ## Formatting. Guardrail sections, in the same field after the persona: ## Terminology, ## Escalation, ## Silent execution, ## Data handling. The ## Tone section MUST carry WRONG/RIGHT examples; abstract tone descriptions don't constrain output. Total length 100-1000 words. An opt-in flag appends Voiceflow's default prompting guidelines.\nInstructions — markdown-structured routing logic telling the LLM how to choose among the registered playbooks and workflows. Required sections: ## Routing (overall strategy), ## Routing table (per-target decision rules), ## Clarification (how to ask follow-ups when intent is ambiguous), ## Rules (hard constraints like \"never re-greet\", in > callouts). Strictly routing logic — persona lives in the global prompt, domain content lives in Playbook Instructions.\nRouting registry — the structured list of targets the Main Agent can route to, each with its own routing description. The registry controls WHICH targets are reachable; the instructions control WHEN each is picked — a target registered without a matching ## Routing table entry is reachable but never chosen.\nBehavior — project-wide defaults affecting every LLM call: default model + temperature + max tokens, priority processing, outage protection (per-provider fallback models). For phone-call projects, this layer also covers TTS (provider/voice/synthesis/tuning/pronunciation dictionary) and STT (provider/model/language/keypad input).\nSystem tools — Knowledge Base, web search, buttons, cards, carousels, skip turn, call forward, and end — first-party platform behaviors, distinct from Functions/APIs (user-defined code/HTTP) and Integrations (third-party services). Enabled here, they're inherited by every playbook, which may customize the description but cannot disable; per-playbook overrides live on the playbook itself. Each carries a configurable LLM-routing description — write it in WHAT/WHEN format (WHAT the tool does AND WHEN to pick it). Defaults are reasonable but often too generic (e.g. \"Use this when you have something to say\" vs. \"Use to render a list of available time slots as tappable buttons\"). A separate ordering controls the sequence of the agent's exit paths.\nModifications take effect only after the environment is recompiled.\nPredecessor: select the project and environment first, and check the Project type — some voice fields are phone-call only; create a playbook before wiring it into the routing registry.\nSuccessor: create playbooks for task-specific instructions (those don't belong in prompt), recompile the environment, then run a test conversation to verify identity/tone come through and routing picks the right target on representative utterances. For voice projects, listen to the actual audio output, not just the text trace.",
            "operation": "update",
            "operationDescription": "WHAT — Partial PATCH across every Agent config area in one call.\nUSE WHEN — Changing the agent's identity, brand voice, tone, or cross-cutting guardrails; adding or removing routing targets; tuning model, voice, or timeout behavior; or enabling/configuring system tools.\nBEFORE — voiceflow_agent.get to see current state and merge changes against it — each playbookID/workflowID in playbooks/workflows must already exist.\nAFTER — voiceflow_environment.compile, then voiceflow_conversation.send to verify the change — include at least one adversarial probe for tone or guardrail edits.\nDO NOT — Use this for a targeted edit to prompt or instructions; it re-sends the whole document, so reach for voiceflow_agent.patch_prompt or voiceflow_agent.patch_instructions for anything short of a rewrite. Put task-specific instructions (\"when the user asks about billing, do X\") in prompt — that belongs in a playbook; prompt is for cross-cutting identity and rules only, and its tone section must carry WRONG/RIGHT examples. Add a target to playbooks/workflows without also adding a routing_table entry in instructions — registering a target makes it reachable, but the LLM still needs an explicit rule to choose it. Set voice stability or similarity boost to 0 or 1 (extremes sound monotone or over-imitative) or talking speed outside 0.7-1.3 (the API rejects it). Change the default model without warning the user that prompts tuned for the old model may need re-evaluation. Leave default system tool descriptions in place when the project has specific use cases — vague defaults cause under- or over-use. Enable knowledgeBaseTool before documents exist, or callForwardTool on a non-phone-call project. Put a secret reference in generative message examples or in knowledgeBaseTool.query — those texts are sent to a model, so the request is rejected. Secrets belong in a tool input's defaultValue, which the runtime resolves without the model ever seeing the value."
          },
          "cli": {
            "command": "agent update"
          }
        },
        "x-speakeasy-group": "agent",
        "x-speakeasy-name-override": "update",
        "summary": "Update agent",
        "description": "Changes the agent that shapes every turn - its global prompt, its routing instructions, or its settings - in the environment named by the request.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/StableAgentUpdateRequest"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confirms the agent's configuration was updated. The body is a message rather than the new configuration, so read the agent back to see its current prompt, instructions, and tool settings.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableUpdateResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the agent's configuration was updated. The body is a message rather than the new configuration, so read the agent back to see its current prompt, instructions, and tool settings."
            }
          }
        },
        "tags": [
          "Agent"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Changes the agent that shapes every turn - its global prompt, its routing instructions, or its settings - in the environment named by the request."
        }
      }
    },
    "/v1/stable/agent/instructions": {
      "get": {
        "operationId": "StableAgentController_readInstructions",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_agent",
            "toolDescription": "The Main Agent — the project-level configuration every conversation runs through. One Agent per Project, read and written as a single object spanning five layers:\nGlobal Prompt — markdown prepended to every LLM call the agent makes: Agent routing, every Playbook, every Operator step inside Workflows. It's the top of the prompt stack: identity, tone, formatting rules, guardrails. Structure it with markdown headings, never XML tags — the editor renders markdown and stores tags as literal text. Persona sections: ## Identity, ## Goal, ## Tone, ## Formatting. Guardrail sections, in the same field after the persona: ## Terminology, ## Escalation, ## Silent execution, ## Data handling. The ## Tone section MUST carry WRONG/RIGHT examples; abstract tone descriptions don't constrain output. Total length 100-1000 words. An opt-in flag appends Voiceflow's default prompting guidelines.\nInstructions — markdown-structured routing logic telling the LLM how to choose among the registered playbooks and workflows. Required sections: ## Routing (overall strategy), ## Routing table (per-target decision rules), ## Clarification (how to ask follow-ups when intent is ambiguous), ## Rules (hard constraints like \"never re-greet\", in > callouts). Strictly routing logic — persona lives in the global prompt, domain content lives in Playbook Instructions.\nRouting registry — the structured list of targets the Main Agent can route to, each with its own routing description. The registry controls WHICH targets are reachable; the instructions control WHEN each is picked — a target registered without a matching ## Routing table entry is reachable but never chosen.\nBehavior — project-wide defaults affecting every LLM call: default model + temperature + max tokens, priority processing, outage protection (per-provider fallback models). For phone-call projects, this layer also covers TTS (provider/voice/synthesis/tuning/pronunciation dictionary) and STT (provider/model/language/keypad input).\nSystem tools — Knowledge Base, web search, buttons, cards, carousels, skip turn, call forward, and end — first-party platform behaviors, distinct from Functions/APIs (user-defined code/HTTP) and Integrations (third-party services). Enabled here, they're inherited by every playbook, which may customize the description but cannot disable; per-playbook overrides live on the playbook itself. Each carries a configurable LLM-routing description — write it in WHAT/WHEN format (WHAT the tool does AND WHEN to pick it). Defaults are reasonable but often too generic (e.g. \"Use this when you have something to say\" vs. \"Use to render a list of available time slots as tappable buttons\"). A separate ordering controls the sequence of the agent's exit paths.\nModifications take effect only after the environment is recompiled.\nPredecessor: select the project and environment first, and check the Project type — some voice fields are phone-call only; create a playbook before wiring it into the routing registry.\nSuccessor: create playbooks for task-specific instructions (those don't belong in prompt), recompile the environment, then run a test conversation to verify identity/tone come through and routing picks the right target on representative utterances. For voice projects, listen to the actual audio output, not just the text trace.",
            "operation": "read_instructions",
            "operationDescription": "WHAT — Read a page of the Main Agent's Instructions (its routing logic) as numbered lines: the 1-based line number, a tab, then the text.\nUSE WHEN — You need the current routing rules before editing them, or they are too large to pull whole.\nAFTER — voiceflow_agent.patch_instructions, with oldString copied verbatim from a line you just read.\nThe line numbers this read adds are for navigation only — never include them in the oldString or newString of a patch.\nDO NOT — Confuse this with the Global Prompt, which is identity and tone and is read with voiceflow_agent.read_prompt."
          },
          "cli": {
            "command": "agent read-instructions"
          }
        },
        "x-speakeasy-group": "agent",
        "x-speakeasy-name-override": "read-instructions",
        "summary": "Read agent instructions",
        "description": "Returns one page of the main agent's routing instructions, each line prefixed with its 1-based number, so a later patch can quote text exactly as it appears. `offset` and `limit` pick the page; the totals in the response cover the whole document.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          },
          {
            "name": "offset",
            "required": false,
            "in": "query",
            "schema": {
              "default": 1,
              "description": "The 1-based line number to start from. Clamped to the last line of the document.",
              "type": "integer",
              "minimum": 1,
              "maximum": 9007199254740991
            }
          },
          {
            "name": "limit",
            "required": false,
            "in": "query",
            "schema": {
              "default": 400,
              "description": "The maximum number of lines to return. A page is also capped at 24,000 characters, so a page of very long lines can come back shorter than this — follow nextOffset while hasMore is true.",
              "type": "integer",
              "minimum": 1,
              "maximum": 2000
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the requested lines of the main agent's instructions as one numbered block, with the page's actual offset, its line count, the document's total lines and characters, and whether more lines follow.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableInstructionsReadResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the requested lines of the main agent's instructions as one numbered block, with the page's actual offset, its line count, the document's total lines and characters, and whether more lines follow."
            }
          }
        },
        "tags": [
          "Agent"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns one page of the main agent's routing instructions, each line prefixed with its 1-based number, so a later patch can quote text exactly as it appears. `offset` and `limit` pick the page; the totals in the response cover the whole document."
        }
      },
      "patch": {
        "operationId": "StableAgentController_patchInstructions",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_agent",
            "toolDescription": "The Main Agent — the project-level configuration every conversation runs through. One Agent per Project, read and written as a single object spanning five layers:\nGlobal Prompt — markdown prepended to every LLM call the agent makes: Agent routing, every Playbook, every Operator step inside Workflows. It's the top of the prompt stack: identity, tone, formatting rules, guardrails. Structure it with markdown headings, never XML tags — the editor renders markdown and stores tags as literal text. Persona sections: ## Identity, ## Goal, ## Tone, ## Formatting. Guardrail sections, in the same field after the persona: ## Terminology, ## Escalation, ## Silent execution, ## Data handling. The ## Tone section MUST carry WRONG/RIGHT examples; abstract tone descriptions don't constrain output. Total length 100-1000 words. An opt-in flag appends Voiceflow's default prompting guidelines.\nInstructions — markdown-structured routing logic telling the LLM how to choose among the registered playbooks and workflows. Required sections: ## Routing (overall strategy), ## Routing table (per-target decision rules), ## Clarification (how to ask follow-ups when intent is ambiguous), ## Rules (hard constraints like \"never re-greet\", in > callouts). Strictly routing logic — persona lives in the global prompt, domain content lives in Playbook Instructions.\nRouting registry — the structured list of targets the Main Agent can route to, each with its own routing description. The registry controls WHICH targets are reachable; the instructions control WHEN each is picked — a target registered without a matching ## Routing table entry is reachable but never chosen.\nBehavior — project-wide defaults affecting every LLM call: default model + temperature + max tokens, priority processing, outage protection (per-provider fallback models). For phone-call projects, this layer also covers TTS (provider/voice/synthesis/tuning/pronunciation dictionary) and STT (provider/model/language/keypad input).\nSystem tools — Knowledge Base, web search, buttons, cards, carousels, skip turn, call forward, and end — first-party platform behaviors, distinct from Functions/APIs (user-defined code/HTTP) and Integrations (third-party services). Enabled here, they're inherited by every playbook, which may customize the description but cannot disable; per-playbook overrides live on the playbook itself. Each carries a configurable LLM-routing description — write it in WHAT/WHEN format (WHAT the tool does AND WHEN to pick it). Defaults are reasonable but often too generic (e.g. \"Use this when you have something to say\" vs. \"Use to render a list of available time slots as tappable buttons\"). A separate ordering controls the sequence of the agent's exit paths.\nModifications take effect only after the environment is recompiled.\nPredecessor: select the project and environment first, and check the Project type — some voice fields are phone-call only; create a playbook before wiring it into the routing registry.\nSuccessor: create playbooks for task-specific instructions (those don't belong in prompt), recompile the environment, then run a test conversation to verify identity/tone come through and routing picks the right target on representative utterances. For voice projects, listen to the actual audio output, not just the text trace.",
            "operation": "patch_instructions",
            "operationDescription": "WHAT — Replace one exact string in the Main Agent's Instructions and write the result back. Matching is literal: whitespace, punctuation and case must match exactly.\nUSE WHEN — Adjusting one routing rule. Prefer this over voiceflow_agent.update for anything short of a rewrite — update re-sends the whole document.\nBEFORE — voiceflow_agent.read_instructions or voiceflow_agent.search_instructions, and copy oldString verbatim from what came back.\nAFTER — voiceflow_environment.compile, then voiceflow_conversation.send.\nDO NOT — Retry the same call after a 409; the text has changed under you, so read it again first. Do not add a routing rule for a target that is not registered in playbooks or workflows — register it with voiceflow_agent.update first, or the backticked name stays plain text."
          },
          "cli": {
            "command": "agent patch-instructions"
          }
        },
        "x-speakeasy-group": "agent",
        "x-speakeasy-name-override": "patch-instructions",
        "summary": "Patch agent instructions",
        "description": "Replaces one exact string in the main agent's routing instructions with another, matching literally on whitespace, punctuation and case. Quote `oldString` from a read or search result; with `replaceAll` off, more than one match is an error rather than a guess.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableInstructionsPatchRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns how many occurrences were replaced in the main agent's instructions, a unified diff of the changed lines, the document's line count after the write, and any references or mentions the new text left unresolved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableInstructionsPatchResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns how many occurrences were replaced in the main agent's instructions, a unified diff of the changed lines, the document's line count after the write, and any references or mentions the new text left unresolved."
            }
          }
        },
        "tags": [
          "Agent"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Replaces one exact string in the main agent's routing instructions with another, matching literally on whitespace, punctuation and case. Quote `oldString` from a read or search result; with `replaceAll` off, more than one match is an error rather than a guess."
        }
      }
    },
    "/v1/stable/agent/instructions/search": {
      "post": {
        "operationId": "StableAgentController_searchInstructions",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_agent",
            "toolDescription": "The Main Agent — the project-level configuration every conversation runs through. One Agent per Project, read and written as a single object spanning five layers:\nGlobal Prompt — markdown prepended to every LLM call the agent makes: Agent routing, every Playbook, every Operator step inside Workflows. It's the top of the prompt stack: identity, tone, formatting rules, guardrails. Structure it with markdown headings, never XML tags — the editor renders markdown and stores tags as literal text. Persona sections: ## Identity, ## Goal, ## Tone, ## Formatting. Guardrail sections, in the same field after the persona: ## Terminology, ## Escalation, ## Silent execution, ## Data handling. The ## Tone section MUST carry WRONG/RIGHT examples; abstract tone descriptions don't constrain output. Total length 100-1000 words. An opt-in flag appends Voiceflow's default prompting guidelines.\nInstructions — markdown-structured routing logic telling the LLM how to choose among the registered playbooks and workflows. Required sections: ## Routing (overall strategy), ## Routing table (per-target decision rules), ## Clarification (how to ask follow-ups when intent is ambiguous), ## Rules (hard constraints like \"never re-greet\", in > callouts). Strictly routing logic — persona lives in the global prompt, domain content lives in Playbook Instructions.\nRouting registry — the structured list of targets the Main Agent can route to, each with its own routing description. The registry controls WHICH targets are reachable; the instructions control WHEN each is picked — a target registered without a matching ## Routing table entry is reachable but never chosen.\nBehavior — project-wide defaults affecting every LLM call: default model + temperature + max tokens, priority processing, outage protection (per-provider fallback models). For phone-call projects, this layer also covers TTS (provider/voice/synthesis/tuning/pronunciation dictionary) and STT (provider/model/language/keypad input).\nSystem tools — Knowledge Base, web search, buttons, cards, carousels, skip turn, call forward, and end — first-party platform behaviors, distinct from Functions/APIs (user-defined code/HTTP) and Integrations (third-party services). Enabled here, they're inherited by every playbook, which may customize the description but cannot disable; per-playbook overrides live on the playbook itself. Each carries a configurable LLM-routing description — write it in WHAT/WHEN format (WHAT the tool does AND WHEN to pick it). Defaults are reasonable but often too generic (e.g. \"Use this when you have something to say\" vs. \"Use to render a list of available time slots as tappable buttons\"). A separate ordering controls the sequence of the agent's exit paths.\nModifications take effect only after the environment is recompiled.\nPredecessor: select the project and environment first, and check the Project type — some voice fields are phone-call only; create a playbook before wiring it into the routing registry.\nSuccessor: create playbooks for task-specific instructions (those don't belong in prompt), recompile the environment, then run a test conversation to verify identity/tone come through and routing picks the right target on representative utterances. For voice projects, listen to the actual audio output, not just the text trace.",
            "operation": "search_instructions",
            "operationDescription": "WHAT — Grep the Main Agent's Instructions with a JavaScript regular expression, evaluated line by line.\nUSE WHEN — Finding the routing rule that fires for a target, or checking whether one already exists before adding another.\nAFTER — voiceflow_agent.read_instructions to see the region around a hit, then voiceflow_agent.patch_instructions.\nDO NOT — Write nested quantifiers such as (a+)+; the pattern is rejected. Do not assume every backticked hit is a reference: a tool, playbook or workflow reference serializes as its display name in backticks, but so does ordinary inline code."
          },
          "cli": {
            "command": "agent search-instructions"
          }
        },
        "x-speakeasy-group": "agent",
        "x-speakeasy-name-override": "search-instructions",
        "summary": "Search agent instructions",
        "description": "Searches the main agent's routing instructions line by line with a JavaScript regular expression and returns one page of matching lines with surrounding context, up to `limit`; the match totals count the whole document.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableInstructionsSearchRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns the matching lines of the main agent's instructions, each with its line number, hit count and context lines, plus the total matches and matching lines across the whole document and whether the limit cut the list short.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableInstructionsSearchResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the matching lines of the main agent's instructions, each with its line number, hit count and context lines, plus the total matches and matching lines across the whole document and whether the limit cut the list short."
            }
          }
        },
        "tags": [
          "Agent"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Searches the main agent's routing instructions line by line with a JavaScript regular expression and returns one page of matching lines with surrounding context, up to `limit`; the match totals count the whole document."
        }
      }
    },
    "/v1/stable/agent/prompt": {
      "get": {
        "operationId": "StableAgentController_readPrompt",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_agent",
            "toolDescription": "The Main Agent — the project-level configuration every conversation runs through. One Agent per Project, read and written as a single object spanning five layers:\nGlobal Prompt — markdown prepended to every LLM call the agent makes: Agent routing, every Playbook, every Operator step inside Workflows. It's the top of the prompt stack: identity, tone, formatting rules, guardrails. Structure it with markdown headings, never XML tags — the editor renders markdown and stores tags as literal text. Persona sections: ## Identity, ## Goal, ## Tone, ## Formatting. Guardrail sections, in the same field after the persona: ## Terminology, ## Escalation, ## Silent execution, ## Data handling. The ## Tone section MUST carry WRONG/RIGHT examples; abstract tone descriptions don't constrain output. Total length 100-1000 words. An opt-in flag appends Voiceflow's default prompting guidelines.\nInstructions — markdown-structured routing logic telling the LLM how to choose among the registered playbooks and workflows. Required sections: ## Routing (overall strategy), ## Routing table (per-target decision rules), ## Clarification (how to ask follow-ups when intent is ambiguous), ## Rules (hard constraints like \"never re-greet\", in > callouts). Strictly routing logic — persona lives in the global prompt, domain content lives in Playbook Instructions.\nRouting registry — the structured list of targets the Main Agent can route to, each with its own routing description. The registry controls WHICH targets are reachable; the instructions control WHEN each is picked — a target registered without a matching ## Routing table entry is reachable but never chosen.\nBehavior — project-wide defaults affecting every LLM call: default model + temperature + max tokens, priority processing, outage protection (per-provider fallback models). For phone-call projects, this layer also covers TTS (provider/voice/synthesis/tuning/pronunciation dictionary) and STT (provider/model/language/keypad input).\nSystem tools — Knowledge Base, web search, buttons, cards, carousels, skip turn, call forward, and end — first-party platform behaviors, distinct from Functions/APIs (user-defined code/HTTP) and Integrations (third-party services). Enabled here, they're inherited by every playbook, which may customize the description but cannot disable; per-playbook overrides live on the playbook itself. Each carries a configurable LLM-routing description — write it in WHAT/WHEN format (WHAT the tool does AND WHEN to pick it). Defaults are reasonable but often too generic (e.g. \"Use this when you have something to say\" vs. \"Use to render a list of available time slots as tappable buttons\"). A separate ordering controls the sequence of the agent's exit paths.\nModifications take effect only after the environment is recompiled.\nPredecessor: select the project and environment first, and check the Project type — some voice fields are phone-call only; create a playbook before wiring it into the routing registry.\nSuccessor: create playbooks for task-specific instructions (those don't belong in prompt), recompile the environment, then run a test conversation to verify identity/tone come through and routing picks the right target on representative utterances. For voice projects, listen to the actual audio output, not just the text trace.",
            "operation": "read_prompt",
            "operationDescription": "WHAT — Read a page of the Global Prompt (identity, tone, formatting, guardrails) as numbered lines: the 1-based line number, a tab, then the text.\nUSE WHEN — You need the current wording before editing it, or it is too large to pull whole.\nAFTER — voiceflow_agent.patch_prompt, with oldString copied verbatim from a line you just read.\nDO NOT — Confuse this with the Main Agent's Instructions, which carry routing logic and are read with voiceflow_agent.read_instructions."
          },
          "cli": {
            "command": "agent read-prompt"
          }
        },
        "x-speakeasy-group": "agent",
        "x-speakeasy-name-override": "read-prompt",
        "summary": "Read the global prompt",
        "description": "Returns one page of the global prompt, each line prefixed with its 1-based number, so a later patch can quote text exactly as it appears. `offset` and `limit` pick the page; the totals in the response cover the whole prompt.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          },
          {
            "name": "offset",
            "required": false,
            "in": "query",
            "schema": {
              "default": 1,
              "description": "The 1-based line number to start from. Clamped to the last line of the document.",
              "type": "integer",
              "minimum": 1,
              "maximum": 9007199254740991
            }
          },
          {
            "name": "limit",
            "required": false,
            "in": "query",
            "schema": {
              "default": 400,
              "description": "The maximum number of lines to return. A page is also capped at 24,000 characters, so a page of very long lines can come back shorter than this — follow nextOffset while hasMore is true.",
              "type": "integer",
              "minimum": 1,
              "maximum": 2000
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the requested lines of the global prompt as one numbered block, with the page's actual offset, its line count, the prompt's total lines and characters, and whether more lines follow.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableInstructionsReadResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the requested lines of the global prompt as one numbered block, with the page's actual offset, its line count, the prompt's total lines and characters, and whether more lines follow."
            }
          }
        },
        "tags": [
          "Agent"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns one page of the global prompt, each line prefixed with its 1-based number, so a later patch can quote text exactly as it appears. `offset` and `limit` pick the page; the totals in the response cover the whole prompt."
        }
      },
      "patch": {
        "operationId": "StableAgentController_patchPrompt",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_agent",
            "toolDescription": "The Main Agent — the project-level configuration every conversation runs through. One Agent per Project, read and written as a single object spanning five layers:\nGlobal Prompt — markdown prepended to every LLM call the agent makes: Agent routing, every Playbook, every Operator step inside Workflows. It's the top of the prompt stack: identity, tone, formatting rules, guardrails. Structure it with markdown headings, never XML tags — the editor renders markdown and stores tags as literal text. Persona sections: ## Identity, ## Goal, ## Tone, ## Formatting. Guardrail sections, in the same field after the persona: ## Terminology, ## Escalation, ## Silent execution, ## Data handling. The ## Tone section MUST carry WRONG/RIGHT examples; abstract tone descriptions don't constrain output. Total length 100-1000 words. An opt-in flag appends Voiceflow's default prompting guidelines.\nInstructions — markdown-structured routing logic telling the LLM how to choose among the registered playbooks and workflows. Required sections: ## Routing (overall strategy), ## Routing table (per-target decision rules), ## Clarification (how to ask follow-ups when intent is ambiguous), ## Rules (hard constraints like \"never re-greet\", in > callouts). Strictly routing logic — persona lives in the global prompt, domain content lives in Playbook Instructions.\nRouting registry — the structured list of targets the Main Agent can route to, each with its own routing description. The registry controls WHICH targets are reachable; the instructions control WHEN each is picked — a target registered without a matching ## Routing table entry is reachable but never chosen.\nBehavior — project-wide defaults affecting every LLM call: default model + temperature + max tokens, priority processing, outage protection (per-provider fallback models). For phone-call projects, this layer also covers TTS (provider/voice/synthesis/tuning/pronunciation dictionary) and STT (provider/model/language/keypad input).\nSystem tools — Knowledge Base, web search, buttons, cards, carousels, skip turn, call forward, and end — first-party platform behaviors, distinct from Functions/APIs (user-defined code/HTTP) and Integrations (third-party services). Enabled here, they're inherited by every playbook, which may customize the description but cannot disable; per-playbook overrides live on the playbook itself. Each carries a configurable LLM-routing description — write it in WHAT/WHEN format (WHAT the tool does AND WHEN to pick it). Defaults are reasonable but often too generic (e.g. \"Use this when you have something to say\" vs. \"Use to render a list of available time slots as tappable buttons\"). A separate ordering controls the sequence of the agent's exit paths.\nModifications take effect only after the environment is recompiled.\nPredecessor: select the project and environment first, and check the Project type — some voice fields are phone-call only; create a playbook before wiring it into the routing registry.\nSuccessor: create playbooks for task-specific instructions (those don't belong in prompt), recompile the environment, then run a test conversation to verify identity/tone come through and routing picks the right target on representative utterances. For voice projects, listen to the actual audio output, not just the text trace.",
            "operation": "patch_prompt",
            "operationDescription": "WHAT — Replace one exact string in the Global Prompt and write the result back. Matching is literal: whitespace, punctuation and case must match exactly.\nUSE WHEN — Adjusting one identity, tone or guardrail rule. Prefer this over voiceflow_agent.update for anything short of a rewrite — update re-sends the whole document.\nBEFORE — voiceflow_agent.read_prompt or voiceflow_agent.search_prompt, and copy oldString verbatim from what came back.\nAFTER — voiceflow_environment.compile, then voiceflow_conversation.send with at least one adversarial probe.\nDO NOT — Retry the same call after a 409; the text has changed under you, so read it again first. Do not put task-specific instructions here; those belong in a playbook."
          },
          "cli": {
            "command": "agent patch-prompt"
          }
        },
        "x-speakeasy-group": "agent",
        "x-speakeasy-name-override": "patch-prompt",
        "summary": "Patch the global prompt",
        "description": "Replaces one exact string in the global prompt with another, matching literally on whitespace, punctuation and case. Quote `oldString` from a read or search result; with `replaceAll` off, more than one match is an error rather than a guess.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableInstructionsPatchRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns how many occurrences were replaced in the global prompt, a unified diff of the changed lines, the prompt's line count after the write, and any references or mentions the new text left unresolved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableInstructionsPatchResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns how many occurrences were replaced in the global prompt, a unified diff of the changed lines, the prompt's line count after the write, and any references or mentions the new text left unresolved."
            }
          }
        },
        "tags": [
          "Agent"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Replaces one exact string in the global prompt with another, matching literally on whitespace, punctuation and case. Quote `oldString` from a read or search result; with `replaceAll` off, more than one match is an error rather than a guess."
        }
      }
    },
    "/v1/stable/agent/prompt/search": {
      "post": {
        "operationId": "StableAgentController_searchPrompt",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_agent",
            "toolDescription": "The Main Agent — the project-level configuration every conversation runs through. One Agent per Project, read and written as a single object spanning five layers:\nGlobal Prompt — markdown prepended to every LLM call the agent makes: Agent routing, every Playbook, every Operator step inside Workflows. It's the top of the prompt stack: identity, tone, formatting rules, guardrails. Structure it with markdown headings, never XML tags — the editor renders markdown and stores tags as literal text. Persona sections: ## Identity, ## Goal, ## Tone, ## Formatting. Guardrail sections, in the same field after the persona: ## Terminology, ## Escalation, ## Silent execution, ## Data handling. The ## Tone section MUST carry WRONG/RIGHT examples; abstract tone descriptions don't constrain output. Total length 100-1000 words. An opt-in flag appends Voiceflow's default prompting guidelines.\nInstructions — markdown-structured routing logic telling the LLM how to choose among the registered playbooks and workflows. Required sections: ## Routing (overall strategy), ## Routing table (per-target decision rules), ## Clarification (how to ask follow-ups when intent is ambiguous), ## Rules (hard constraints like \"never re-greet\", in > callouts). Strictly routing logic — persona lives in the global prompt, domain content lives in Playbook Instructions.\nRouting registry — the structured list of targets the Main Agent can route to, each with its own routing description. The registry controls WHICH targets are reachable; the instructions control WHEN each is picked — a target registered without a matching ## Routing table entry is reachable but never chosen.\nBehavior — project-wide defaults affecting every LLM call: default model + temperature + max tokens, priority processing, outage protection (per-provider fallback models). For phone-call projects, this layer also covers TTS (provider/voice/synthesis/tuning/pronunciation dictionary) and STT (provider/model/language/keypad input).\nSystem tools — Knowledge Base, web search, buttons, cards, carousels, skip turn, call forward, and end — first-party platform behaviors, distinct from Functions/APIs (user-defined code/HTTP) and Integrations (third-party services). Enabled here, they're inherited by every playbook, which may customize the description but cannot disable; per-playbook overrides live on the playbook itself. Each carries a configurable LLM-routing description — write it in WHAT/WHEN format (WHAT the tool does AND WHEN to pick it). Defaults are reasonable but often too generic (e.g. \"Use this when you have something to say\" vs. \"Use to render a list of available time slots as tappable buttons\"). A separate ordering controls the sequence of the agent's exit paths.\nModifications take effect only after the environment is recompiled.\nPredecessor: select the project and environment first, and check the Project type — some voice fields are phone-call only; create a playbook before wiring it into the routing registry.\nSuccessor: create playbooks for task-specific instructions (those don't belong in prompt), recompile the environment, then run a test conversation to verify identity/tone come through and routing picks the right target on representative utterances. For voice projects, listen to the actual audio output, not just the text trace.",
            "operation": "search_prompt",
            "operationDescription": "WHAT — Grep the Global Prompt with a JavaScript regular expression, evaluated line by line.\nUSE WHEN — Finding where a tone or guardrail rule is stated before changing it, or checking whether it is stated at all.\nAFTER — voiceflow_agent.read_prompt to see the region around a hit, then voiceflow_agent.patch_prompt.\nDO NOT — Write nested quantifiers such as (a+)+; the pattern is rejected. Do not assume every backticked hit is a reference: a tool, playbook or workflow reference serializes as its display name in backticks, but so does ordinary inline code."
          },
          "cli": {
            "command": "agent search-prompt"
          }
        },
        "x-speakeasy-group": "agent",
        "x-speakeasy-name-override": "search-prompt",
        "summary": "Search the global prompt",
        "description": "Searches the global prompt line by line with a JavaScript regular expression and returns one page of matching lines with surrounding context, up to `limit`; the match totals count the whole prompt.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableInstructionsSearchRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns the matching lines of the global prompt, each with its line number, hit count and context lines, plus the total matches and matching lines across the whole prompt and whether the limit cut the list short.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableInstructionsSearchResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the matching lines of the global prompt, each with its line number, hit count and context lines, plus the total matches and matching lines across the whole prompt and whether the limit cut the list short."
            }
          }
        },
        "tags": [
          "Agent"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Searches the global prompt line by line with a JavaScript regular expression and returns one page of matching lines with surrounding context, up to `limit`; the match totals count the whole prompt."
        }
      }
    },
    "/v1/stable/playbook": {
      "get": {
        "operationId": "StablePlaybookController_list",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_playbook",
            "toolDescription": "A specialized LLM-driven sub-agent that handles multi-step flows. Each playbook has an LLM description (drives routing), Instructions (drives behavior), an optional model override, attached tools, and optional exit conditions. Playbooks inherit the Global Prompt for identity/tone — their Instructions carry domain-specific behavior only.\nThe LLM-facing description is what the Agent reads when deciding whether to route to this playbook. Write it in WHAT/WHEN format — WHAT the playbook does AND WHEN the Agent (or a specific playbook) should route into it. Example: \"Schedules a new appointment. Route here when the caller says 'book', 'schedule', 'come out', or describes an appliance problem they want service for.\"\nInstructions use markdown sections: ## Context (what the playbook is for and what state it assumes), ## Flow (the step-by-step the LLM should follow), ## Rules (hard constraints specific to this playbook, in > callouts), ## Edge cases (handling for known off-happy-path situations), ## Exit (when to hand control back to the Main Agent or trigger an exit condition).\nExit conditions only fire when the playbook is reached via a Workflow's Playbook canvas step — the workflow checks the condition and routes accordingly. When the playbook is reached via Agent routing (agentic), the Agent handles routing back via its own instructions and exit conditions are NOT consulted. Only design exit conditions for playbooks that will be embedded in Workflows.\nInvoked by the Main Agent (through its routing registry and instructions) or by a Playbook canvas step inside a Workflow.\nPredecessor: select the project and environment first; set the agent's global prompt so identity inherits cleanly.\nSuccessor: update the agent's routing so the playbook is reachable, attach any tools it needs, then run a test conversation.",
            "operation": "list",
            "operationDescription": "WHAT — List all playbooks in the project. Instructions are NOT included by default; instructionsLineCount tells you how big each one is.\nUSE WHEN — Discovering what playbooks exist, or finding a playbookID to edit. Pass includeInstructions: true only when you need the text of every playbook at once.\nDO NOT — Pull every playbook's instructions to read one of them; read that one with voiceflow_playbook.read_instructions instead."
          },
          "cli": {
            "command": "playbook list"
          }
        },
        "x-speakeasy-group": "playbook",
        "x-speakeasy-name-override": "list",
        "summary": "List playbooks",
        "description": "Returns every playbook in the environment. A playbook is a set of instructions that drives an agent toward a goal, calling tools as it needs them. The call takes no paging parameters, so one request yields the whole set.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          },
          {
            "name": "includeInstructions",
            "required": false,
            "in": "query",
            "schema": {
              "default": false,
              "description": "Instructions can be tens of thousands of lines. Leave this off and use read_instructions to page through them only when you need the text.",
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns every playbook in the project environment, each with its name, description, instructions, model settings, and its own system tool configuration.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StablePlaybookReadListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns every playbook in the project environment, each with its name, description, instructions, model settings, and its own system tool configuration."
            }
          }
        },
        "tags": [
          "Playbook"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns every playbook in the environment. A playbook is a set of instructions that drives an agent toward a goal, calling tools as it needs them. The call takes no paging parameters, so one request yields the whole set."
        }
      },
      "post": {
        "operationId": "StablePlaybookController_create",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_playbook",
            "toolDescription": "A specialized LLM-driven sub-agent that handles multi-step flows. Each playbook has an LLM description (drives routing), Instructions (drives behavior), an optional model override, attached tools, and optional exit conditions. Playbooks inherit the Global Prompt for identity/tone — their Instructions carry domain-specific behavior only.\nThe LLM-facing description is what the Agent reads when deciding whether to route to this playbook. Write it in WHAT/WHEN format — WHAT the playbook does AND WHEN the Agent (or a specific playbook) should route into it. Example: \"Schedules a new appointment. Route here when the caller says 'book', 'schedule', 'come out', or describes an appliance problem they want service for.\"\nInstructions use markdown sections: ## Context (what the playbook is for and what state it assumes), ## Flow (the step-by-step the LLM should follow), ## Rules (hard constraints specific to this playbook, in > callouts), ## Edge cases (handling for known off-happy-path situations), ## Exit (when to hand control back to the Main Agent or trigger an exit condition).\nExit conditions only fire when the playbook is reached via a Workflow's Playbook canvas step — the workflow checks the condition and routes accordingly. When the playbook is reached via Agent routing (agentic), the Agent handles routing back via its own instructions and exit conditions are NOT consulted. Only design exit conditions for playbooks that will be embedded in Workflows.\nInvoked by the Main Agent (through its routing registry and instructions) or by a Playbook canvas step inside a Workflow.\nPredecessor: select the project and environment first; set the agent's global prompt so identity inherits cleanly.\nSuccessor: update the agent's routing so the playbook is reachable, attach any tools it needs, then run a test conversation.",
            "operation": "create",
            "operationDescription": "WHAT — Create a new playbook with name, LLM description (drives routing — must be in WHAT/WHEN format), instructions (markdown-structured behavior text), and optionally settings + attached system tools.\nInstructions body shape (markdown headings). The structure is fixed; content is playbook-specific:\n  ## Context    — what this playbook handles, project vars it expects to be set on entry, assumed state at routing-in\n  ## Flow       — the step-by-step the LLM follows (numbered list, one action per step)\n  ## Rules      — hard constraints specific to this playbook (one question per turn, never invent values, etc.), in > callouts\n  ## Edge cases — handling for known off-happy-path situations (empty results, mid-flow cancellation, missing required state)\n  ## Exit       — when to hand control back to the Main Agent or trigger an exit condition\n  ## Inputs     — list of project variables the playbook references (e.g. `- {customer_name}: caller's name if collected`). Any variable listed here can be referenced inline elsewhere in the prompt via {variable_name} syntax — the runtime substitutes the actual value. Built-in variables like {user_id}, {last_utterance}, {vf_now} can be referenced without declaring them. Unset variables resolve to the literal 0 (number), not empty string — guard branches in ## Flow or ## Edge cases against that.\nUSE WHEN — User wants to add a new multi-step task the agent can handle (booking, escalation, FAQ + tool use).\nAFTER — voiceflow_agent.update (make it reachable), voiceflow_tool.create (give it capabilities), then voiceflow_conversation.\nDO NOT — Write the description as a one-liner that only says what the playbook does. The Main Agent uses this text to route — it must also describe WHEN to route here (the user signals, intents, or topics that should trigger this playbook). Also: don't put identity, tone, or guardrails in the playbook's instructions — those inherit from the Global Prompt. And: if a playbook's only tool is the Knowledge Base, it shouldn't be a playbook — the Main Agent handles Knowledge Base Q&A directly. Put a secret reference in generative message examples or in knowledgeBaseTool.query — those texts are sent to a model, so the request is rejected. Secrets belong in a tool input's defaultValue, which the runtime resolves without the model ever seeing the value."
          },
          "cli": {
            "command": "playbook create"
          }
        },
        "x-speakeasy-group": "playbook",
        "x-speakeasy-name-override": "create",
        "summary": "Create playbook",
        "description": "Adds a playbook to the environment, a set of instructions that drives an agent toward a goal, calling tools as it needs them. The response carries the ID that later calls address it by.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StablePlaybookCreateRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Returns the newly created playbook in full, including the ID assigned to it and the instructions it was created with.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StablePlaybookResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the newly created playbook in full, including the ID assigned to it and the instructions it was created with."
            }
          }
        },
        "tags": [
          "Playbook"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds a playbook to the environment, a set of instructions that drives an agent toward a goal, calling tools as it needs them. The response carries the ID that later calls address it by."
        }
      }
    },
    "/v1/stable/playbook/batch": {
      "post": {
        "operationId": "StablePlaybookController_createMany",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_playbook",
            "toolDescription": "A specialized LLM-driven sub-agent that handles multi-step flows. Each playbook has an LLM description (drives routing), Instructions (drives behavior), an optional model override, attached tools, and optional exit conditions. Playbooks inherit the Global Prompt for identity/tone — their Instructions carry domain-specific behavior only.\nThe LLM-facing description is what the Agent reads when deciding whether to route to this playbook. Write it in WHAT/WHEN format — WHAT the playbook does AND WHEN the Agent (or a specific playbook) should route into it. Example: \"Schedules a new appointment. Route here when the caller says 'book', 'schedule', 'come out', or describes an appliance problem they want service for.\"\nInstructions use markdown sections: ## Context (what the playbook is for and what state it assumes), ## Flow (the step-by-step the LLM should follow), ## Rules (hard constraints specific to this playbook, in > callouts), ## Edge cases (handling for known off-happy-path situations), ## Exit (when to hand control back to the Main Agent or trigger an exit condition).\nExit conditions only fire when the playbook is reached via a Workflow's Playbook canvas step — the workflow checks the condition and routes accordingly. When the playbook is reached via Agent routing (agentic), the Agent handles routing back via its own instructions and exit conditions are NOT consulted. Only design exit conditions for playbooks that will be embedded in Workflows.\nInvoked by the Main Agent (through its routing registry and instructions) or by a Playbook canvas step inside a Workflow.\nPredecessor: select the project and environment first; set the agent's global prompt so identity inherits cleanly.\nSuccessor: update the agent's routing so the playbook is reachable, attach any tools it needs, then run a test conversation.",
            "operation": "create_many",
            "operationDescription": "WHAT — Create multiple playbooks in one call.\nUSE WHEN — Scaffolding a new agent with several task playbooks at once (e.g. Schedule + Cancel + FAQ on first build)."
          },
          "cli": {
            "command": "playbook create-many"
          }
        },
        "x-speakeasy-group": "playbook",
        "x-speakeasy-name-override": "create-many",
        "x-speakeasy-ignore": true,
        "summary": "Create many playbooks",
        "description": "Adds several playbooks to the environment in one request, each taking the fields the single-create call takes. The response carries the created playbooks in the same shape the list call returns.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StablePlaybookCreateManyRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Returns the playbooks the request created, as an array, each complete with the ID assigned to it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StablePlaybookListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the playbooks the request created, as an array, each complete with the ID assigned to it."
            }
          }
        },
        "tags": [
          "Playbook"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds several playbooks to the environment in one request, each taking the fields the single-create call takes. The response carries the created playbooks in the same shape the list call returns."
        }
      }
    },
    "/v1/stable/playbook/{playbookID}": {
      "get": {
        "operationId": "StablePlaybookController_get",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_playbook",
            "toolDescription": "A specialized LLM-driven sub-agent that handles multi-step flows. Each playbook has an LLM description (drives routing), Instructions (drives behavior), an optional model override, attached tools, and optional exit conditions. Playbooks inherit the Global Prompt for identity/tone — their Instructions carry domain-specific behavior only.\nThe LLM-facing description is what the Agent reads when deciding whether to route to this playbook. Write it in WHAT/WHEN format — WHAT the playbook does AND WHEN the Agent (or a specific playbook) should route into it. Example: \"Schedules a new appointment. Route here when the caller says 'book', 'schedule', 'come out', or describes an appliance problem they want service for.\"\nInstructions use markdown sections: ## Context (what the playbook is for and what state it assumes), ## Flow (the step-by-step the LLM should follow), ## Rules (hard constraints specific to this playbook, in > callouts), ## Edge cases (handling for known off-happy-path situations), ## Exit (when to hand control back to the Main Agent or trigger an exit condition).\nExit conditions only fire when the playbook is reached via a Workflow's Playbook canvas step — the workflow checks the condition and routes accordingly. When the playbook is reached via Agent routing (agentic), the Agent handles routing back via its own instructions and exit conditions are NOT consulted. Only design exit conditions for playbooks that will be embedded in Workflows.\nInvoked by the Main Agent (through its routing registry and instructions) or by a Playbook canvas step inside a Workflow.\nPredecessor: select the project and environment first; set the agent's global prompt so identity inherits cleanly.\nSuccessor: update the agent's routing so the playbook is reachable, attach any tools it needs, then run a test conversation.",
            "operation": "get",
            "operationDescription": "WHAT — Fetch full details for one playbook. Instructions are NOT included by default; instructionsLineCount always is.\nUSE WHEN — Before editing (to merge), or when debugging a playbook's behavior — the instructions field is often the first place to look when a playbook misbehaves. Pass includeInstructions: true when the line count says the text is short enough to pull whole; page a long one with voiceflow_playbook.read_instructions instead.\nDO NOT — Read an ABSENT instructions field as \"empty\" and overwrite it; absent means \"not requested\"."
          },
          "cli": {
            "command": "playbook get"
          }
        },
        "x-speakeasy-group": "playbook",
        "x-speakeasy-name-override": "get",
        "summary": "Get playbook",
        "description": "Returns a single playbook by ID, with the fields that define it. A playbook is a set of instructions that drives an agent toward a goal, calling tools as it needs them.",
        "parameters": [
          {
            "name": "playbookID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the playbook to operate on."
            },
            "description": "The ID of the playbook to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          },
          {
            "name": "includeInstructions",
            "required": false,
            "in": "query",
            "schema": {
              "default": false,
              "description": "Instructions can be tens of thousands of lines. Leave this off and use read_instructions to page through them only when you need the text.",
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns a single playbook, including its instructions, its tool ordering, and the system tool settings configured on it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StablePlaybookReadResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns a single playbook, including its instructions, its tool ordering, and the system tool settings configured on it."
            }
          }
        },
        "tags": [
          "Playbook"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns a single playbook by ID, with the fields that define it. A playbook is a set of instructions that drives an agent toward a goal, calling tools as it needs them."
        }
      },
      "patch": {
        "operationId": "StablePlaybookController_update",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_playbook",
            "toolDescription": "A specialized LLM-driven sub-agent that handles multi-step flows. Each playbook has an LLM description (drives routing), Instructions (drives behavior), an optional model override, attached tools, and optional exit conditions. Playbooks inherit the Global Prompt for identity/tone — their Instructions carry domain-specific behavior only.\nThe LLM-facing description is what the Agent reads when deciding whether to route to this playbook. Write it in WHAT/WHEN format — WHAT the playbook does AND WHEN the Agent (or a specific playbook) should route into it. Example: \"Schedules a new appointment. Route here when the caller says 'book', 'schedule', 'come out', or describes an appliance problem they want service for.\"\nInstructions use markdown sections: ## Context (what the playbook is for and what state it assumes), ## Flow (the step-by-step the LLM should follow), ## Rules (hard constraints specific to this playbook, in > callouts), ## Edge cases (handling for known off-happy-path situations), ## Exit (when to hand control back to the Main Agent or trigger an exit condition).\nExit conditions only fire when the playbook is reached via a Workflow's Playbook canvas step — the workflow checks the condition and routes accordingly. When the playbook is reached via Agent routing (agentic), the Agent handles routing back via its own instructions and exit conditions are NOT consulted. Only design exit conditions for playbooks that will be embedded in Workflows.\nInvoked by the Main Agent (through its routing registry and instructions) or by a Playbook canvas step inside a Workflow.\nPredecessor: select the project and environment first; set the agent's global prompt so identity inherits cleanly.\nSuccessor: update the agent's routing so the playbook is reachable, attach any tools it needs, then run a test conversation.",
            "operation": "update",
            "operationDescription": "WHAT — Patch a playbook's fields. Partial PATCH — only fields you pass are changed; other fields stay put. This is how you edit the playbook's LLM description (the routing field), Instructions (markdown behavior text), model override, and attached system tools.\nUSE WHEN — Iterating on instructions based on transcript failures, fixing the LLM description because the Main Agent is mis-routing, adding/removing attached tools, swapping the model override.\nBEFORE — voiceflow_playbook.get to see current state and merge changes against it.\nAFTER — voiceflow_environment.compile, then voiceflow_conversation.\nDO NOT — Use this for a targeted edit to instructions; it re-sends the whole document, so reach for voiceflow_playbook.patch_instructions for anything short of a rewrite. Rewrite a playbook's Instructions in response to a single failing transcript without checking whether the bug is actually a wiring failure (missing captureResponse, wrong shouldFulfill). Most \"the prompt isn't working\" issues are wiring problems disguised as prompt problems. Also: when fixing routing issues, edit the playbook's description (WHAT/WHEN format) rather than only piling more routing rules into voiceflow_agent — the description is where the Main Agent looks first. Put a secret reference in generative message examples or in knowledgeBaseTool.query — those texts are sent to a model, so the request is rejected. Secrets belong in a tool input's defaultValue, which the runtime resolves without the model ever seeing the value."
          },
          "cli": {
            "command": "playbook update"
          }
        },
        "x-speakeasy-group": "playbook",
        "x-speakeasy-name-override": "update",
        "summary": "Update playbook",
        "description": "Changes an existing playbook in place. The response carries only a confirmation message, so refetch the playbook to read its new values.",
        "parameters": [
          {
            "name": "playbookID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the playbook to operate on."
            },
            "description": "The ID of the playbook to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/StablePlaybookUpdateRequest"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confirms the playbook was updated. The response is a message, not the revised playbook, so fetch it again to read back the instructions or settings that changed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableUpdateResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the playbook was updated. The response is a message, not the revised playbook, so fetch it again to read back the instructions or settings that changed."
            }
          }
        },
        "tags": [
          "Playbook"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Changes an existing playbook in place. The response carries only a confirmation message, so refetch the playbook to read its new values."
        }
      },
      "delete": {
        "operationId": "StablePlaybookController_delete",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_playbook",
            "toolDescription": "A specialized LLM-driven sub-agent that handles multi-step flows. Each playbook has an LLM description (drives routing), Instructions (drives behavior), an optional model override, attached tools, and optional exit conditions. Playbooks inherit the Global Prompt for identity/tone — their Instructions carry domain-specific behavior only.\nThe LLM-facing description is what the Agent reads when deciding whether to route to this playbook. Write it in WHAT/WHEN format — WHAT the playbook does AND WHEN the Agent (or a specific playbook) should route into it. Example: \"Schedules a new appointment. Route here when the caller says 'book', 'schedule', 'come out', or describes an appliance problem they want service for.\"\nInstructions use markdown sections: ## Context (what the playbook is for and what state it assumes), ## Flow (the step-by-step the LLM should follow), ## Rules (hard constraints specific to this playbook, in > callouts), ## Edge cases (handling for known off-happy-path situations), ## Exit (when to hand control back to the Main Agent or trigger an exit condition).\nExit conditions only fire when the playbook is reached via a Workflow's Playbook canvas step — the workflow checks the condition and routes accordingly. When the playbook is reached via Agent routing (agentic), the Agent handles routing back via its own instructions and exit conditions are NOT consulted. Only design exit conditions for playbooks that will be embedded in Workflows.\nInvoked by the Main Agent (through its routing registry and instructions) or by a Playbook canvas step inside a Workflow.\nPredecessor: select the project and environment first; set the agent's global prompt so identity inherits cleanly.\nSuccessor: update the agent's routing so the playbook is reachable, attach any tools it needs, then run a test conversation.",
            "operation": "delete",
            "operationDescription": "WHAT — Remove a playbook.\nUSE WHEN — Retiring a playbook that's no longer needed.\nBEFORE — voiceflow_agent.get to confirm the playbook isn't currently a routing target; if it is, voiceflow_agent.update first."
          },
          "cli": {
            "command": "playbook delete"
          }
        },
        "x-speakeasy-group": "playbook",
        "x-speakeasy-name-override": "delete",
        "summary": "Delete playbook",
        "description": "Deletes a single playbook by ID. A playbook is a set of instructions that drives an agent toward a goal, calling tools as it needs them. The response carries only a confirmation message, so refetch the playbooks to see what is left.",
        "parameters": [
          {
            "name": "playbookID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the playbook to operate on."
            },
            "description": "The ID of the playbook to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Confirms the playbook was deleted from the project environment. The body is a message only, so list the playbooks again to see which remain.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableDeleteResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the playbook was deleted from the project environment. The body is a message only, so list the playbooks again to see which remain."
            }
          }
        },
        "tags": [
          "Playbook"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Deletes a single playbook by ID. A playbook is a set of instructions that drives an agent toward a goal, calling tools as it needs them. The response carries only a confirmation message, so refetch the playbooks to see what is left."
        }
      }
    },
    "/v1/stable/playbook/{playbookID}/instructions": {
      "get": {
        "operationId": "StablePlaybookController_readInstructions",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_playbook",
            "toolDescription": "A specialized LLM-driven sub-agent that handles multi-step flows. Each playbook has an LLM description (drives routing), Instructions (drives behavior), an optional model override, attached tools, and optional exit conditions. Playbooks inherit the Global Prompt for identity/tone — their Instructions carry domain-specific behavior only.\nThe LLM-facing description is what the Agent reads when deciding whether to route to this playbook. Write it in WHAT/WHEN format — WHAT the playbook does AND WHEN the Agent (or a specific playbook) should route into it. Example: \"Schedules a new appointment. Route here when the caller says 'book', 'schedule', 'come out', or describes an appliance problem they want service for.\"\nInstructions use markdown sections: ## Context (what the playbook is for and what state it assumes), ## Flow (the step-by-step the LLM should follow), ## Rules (hard constraints specific to this playbook, in > callouts), ## Edge cases (handling for known off-happy-path situations), ## Exit (when to hand control back to the Main Agent or trigger an exit condition).\nExit conditions only fire when the playbook is reached via a Workflow's Playbook canvas step — the workflow checks the condition and routes accordingly. When the playbook is reached via Agent routing (agentic), the Agent handles routing back via its own instructions and exit conditions are NOT consulted. Only design exit conditions for playbooks that will be embedded in Workflows.\nInvoked by the Main Agent (through its routing registry and instructions) or by a Playbook canvas step inside a Workflow.\nPredecessor: select the project and environment first; set the agent's global prompt so identity inherits cleanly.\nSuccessor: update the agent's routing so the playbook is reachable, attach any tools it needs, then run a test conversation.",
            "operation": "read_instructions",
            "operationDescription": "WHAT — Read a page of a playbook's Instructions as numbered lines: the 1-based line number, a tab, then the text.\nUSE WHEN — You need the current wording before editing it, or the instructions are too large to pull whole.\nAFTER — voiceflow_playbook.patch_instructions, with oldString copied verbatim from a line you just read.\nReading past the end is not an error: offset clamps to the last line and hasMore comes back false. Follow nextOffset only while hasMore is true.\nDO NOT — Send the line numbers back in a patch; they are a reading aid the response adds, not part of the stored document."
          },
          "cli": {
            "command": "playbook read-instructions"
          }
        },
        "x-speakeasy-group": "playbook",
        "x-speakeasy-name-override": "read-instructions",
        "summary": "Read playbook instructions",
        "description": "Returns one page of a playbook's instructions, each line prefixed with its 1-based number, so a later patch can quote text exactly as it appears. `offset` and `limit` pick the page; the totals in the response cover the whole document.",
        "parameters": [
          {
            "name": "playbookID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the playbook to operate on."
            },
            "description": "The ID of the playbook to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          },
          {
            "name": "offset",
            "required": false,
            "in": "query",
            "schema": {
              "default": 1,
              "description": "The 1-based line number to start from. Clamped to the last line of the document.",
              "type": "integer",
              "minimum": 1,
              "maximum": 9007199254740991
            }
          },
          {
            "name": "limit",
            "required": false,
            "in": "query",
            "schema": {
              "default": 400,
              "description": "The maximum number of lines to return. A page is also capped at 24,000 characters, so a page of very long lines can come back shorter than this — follow nextOffset while hasMore is true.",
              "type": "integer",
              "minimum": 1,
              "maximum": 2000
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the requested lines of the playbook's instructions as one numbered block, with the page's actual offset, its line count, the document's total lines and characters, and whether more lines follow.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableInstructionsReadResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the requested lines of the playbook's instructions as one numbered block, with the page's actual offset, its line count, the document's total lines and characters, and whether more lines follow."
            }
          }
        },
        "tags": [
          "Playbook"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns one page of a playbook's instructions, each line prefixed with its 1-based number, so a later patch can quote text exactly as it appears. `offset` and `limit` pick the page; the totals in the response cover the whole document."
        }
      },
      "patch": {
        "operationId": "StablePlaybookController_patchInstructions",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_playbook",
            "toolDescription": "A specialized LLM-driven sub-agent that handles multi-step flows. Each playbook has an LLM description (drives routing), Instructions (drives behavior), an optional model override, attached tools, and optional exit conditions. Playbooks inherit the Global Prompt for identity/tone — their Instructions carry domain-specific behavior only.\nThe LLM-facing description is what the Agent reads when deciding whether to route to this playbook. Write it in WHAT/WHEN format — WHAT the playbook does AND WHEN the Agent (or a specific playbook) should route into it. Example: \"Schedules a new appointment. Route here when the caller says 'book', 'schedule', 'come out', or describes an appliance problem they want service for.\"\nInstructions use markdown sections: ## Context (what the playbook is for and what state it assumes), ## Flow (the step-by-step the LLM should follow), ## Rules (hard constraints specific to this playbook, in > callouts), ## Edge cases (handling for known off-happy-path situations), ## Exit (when to hand control back to the Main Agent or trigger an exit condition).\nExit conditions only fire when the playbook is reached via a Workflow's Playbook canvas step — the workflow checks the condition and routes accordingly. When the playbook is reached via Agent routing (agentic), the Agent handles routing back via its own instructions and exit conditions are NOT consulted. Only design exit conditions for playbooks that will be embedded in Workflows.\nInvoked by the Main Agent (through its routing registry and instructions) or by a Playbook canvas step inside a Workflow.\nPredecessor: select the project and environment first; set the agent's global prompt so identity inherits cleanly.\nSuccessor: update the agent's routing so the playbook is reachable, attach any tools it needs, then run a test conversation.",
            "operation": "patch_instructions",
            "operationDescription": "WHAT — Replace one exact string in a playbook's Instructions and write the result back. Matching is literal: whitespace, punctuation and case must match exactly.\nUSE WHEN — Editing part of a large set of instructions. Prefer this over voiceflow_playbook.update for anything short of a rewrite — update re-sends the whole document.\nBEFORE — voiceflow_playbook.read_instructions or voiceflow_playbook.search_instructions, and copy oldString verbatim from what came back.\nAFTER — voiceflow_environment.compile, then voiceflow_conversation.send.\nDO NOT — Include line numbers in oldString; the read adds them, the document does not carry them. Do not retry the same call after a 409; the text has changed under you, so read it again first. Do not pass a whole rewritten document as newString; a full rewrite is what voiceflow_playbook.update is for."
          },
          "cli": {
            "command": "playbook patch-instructions"
          }
        },
        "x-speakeasy-group": "playbook",
        "x-speakeasy-name-override": "patch-instructions",
        "summary": "Patch playbook instructions",
        "description": "Replaces one exact string in a playbook's instructions with another, matching literally on whitespace, punctuation and case. Quote `oldString` from a read or search result; with `replaceAll` off, more than one match is an error rather than a guess.",
        "parameters": [
          {
            "name": "playbookID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the playbook to operate on."
            },
            "description": "The ID of the playbook to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableInstructionsPatchRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns how many occurrences were replaced in the playbook's instructions, a unified diff of the changed lines, the document's line count after the write, and any references or mentions the new text left unresolved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableInstructionsPatchResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns how many occurrences were replaced in the playbook's instructions, a unified diff of the changed lines, the document's line count after the write, and any references or mentions the new text left unresolved."
            }
          }
        },
        "tags": [
          "Playbook"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Replaces one exact string in a playbook's instructions with another, matching literally on whitespace, punctuation and case. Quote `oldString` from a read or search result; with `replaceAll` off, more than one match is an error rather than a guess."
        }
      }
    },
    "/v1/stable/playbook/{playbookID}/instructions/search": {
      "post": {
        "operationId": "StablePlaybookController_searchInstructions",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_playbook",
            "toolDescription": "A specialized LLM-driven sub-agent that handles multi-step flows. Each playbook has an LLM description (drives routing), Instructions (drives behavior), an optional model override, attached tools, and optional exit conditions. Playbooks inherit the Global Prompt for identity/tone — their Instructions carry domain-specific behavior only.\nThe LLM-facing description is what the Agent reads when deciding whether to route to this playbook. Write it in WHAT/WHEN format — WHAT the playbook does AND WHEN the Agent (or a specific playbook) should route into it. Example: \"Schedules a new appointment. Route here when the caller says 'book', 'schedule', 'come out', or describes an appliance problem they want service for.\"\nInstructions use markdown sections: ## Context (what the playbook is for and what state it assumes), ## Flow (the step-by-step the LLM should follow), ## Rules (hard constraints specific to this playbook, in > callouts), ## Edge cases (handling for known off-happy-path situations), ## Exit (when to hand control back to the Main Agent or trigger an exit condition).\nExit conditions only fire when the playbook is reached via a Workflow's Playbook canvas step — the workflow checks the condition and routes accordingly. When the playbook is reached via Agent routing (agentic), the Agent handles routing back via its own instructions and exit conditions are NOT consulted. Only design exit conditions for playbooks that will be embedded in Workflows.\nInvoked by the Main Agent (through its routing registry and instructions) or by a Playbook canvas step inside a Workflow.\nPredecessor: select the project and environment first; set the agent's global prompt so identity inherits cleanly.\nSuccessor: update the agent's routing so the playbook is reachable, attach any tools it needs, then run a test conversation.",
            "operation": "search_instructions",
            "operationDescription": "WHAT — Grep a playbook's Instructions with a JavaScript regular expression, evaluated line by line. Returns matching lines with their numbers, optional context, and the totals for the whole document.\nUSE WHEN — Locating the exact wording to patch, or checking whether a rule is already stated before adding another one.\nAFTER — voiceflow_playbook.read_instructions to see the region around a hit, then voiceflow_playbook.patch_instructions.\nDO NOT — Write nested quantifiers such as (a+)+; the pattern is rejected. Do not assume every backticked hit is a reference: a tool, playbook or workflow reference serializes as its display name in backticks, but so does ordinary inline code."
          },
          "cli": {
            "command": "playbook search-instructions"
          }
        },
        "x-speakeasy-group": "playbook",
        "x-speakeasy-name-override": "search-instructions",
        "summary": "Search playbook instructions",
        "description": "Searches a playbook's instructions line by line with a JavaScript regular expression and returns one page of matching lines with surrounding context, up to `limit`; the match totals count the whole document.",
        "parameters": [
          {
            "name": "playbookID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the playbook to operate on."
            },
            "description": "The ID of the playbook to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableInstructionsSearchRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns the matching lines of the playbook's instructions, each with its line number, hit count and context lines, plus the total matches and matching lines across the whole document and whether the limit cut the list short.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableInstructionsSearchResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the matching lines of the playbook's instructions, each with its line number, hit count and context lines, plus the total matches and matching lines across the whole document and whether the limit cut the list short."
            }
          }
        },
        "tags": [
          "Playbook"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Searches a playbook's instructions line by line with a JavaScript regular expression and returns one page of matching lines with surrounding context, up to `limit`; the match totals count the whole document."
        }
      }
    },
    "/v1/stable/tool": {
      "get": {
        "operationId": "StableToolController_list",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_tool",
            "toolDescription": "The wiring layer that attaches Function, API, MCP, and Integration tools to a target — either the global agent or a specific playbook. Agent-level attachments are inherited by every playbook; playbook-level attachments are scoped to that playbook only.\nAttachments carry two critical maps: an input map (how each tool input is filled — from the LLM, from a project variable, or a literal) and an output-capture map (which tool outputs land in which project variables). Omitting the output-capture map is the #1 source of \"the tool ran but the data went nowhere\" bugs — the tool returns the right data, but nothing ever lands in a variable and every downstream reference silently reads the default (usually 0).\nPredecessor: create the Function, API tool, or MCP tool by adding a server — the underlying tool must exist before it can be attached. Integration tools are the exception: they come from connecting the integration in the Creator UI and cannot be created through this API.\nSuccessor: recompile the environment, then run a test conversation — inspect the trace's tool calls and variable state to confirm inputs resolved and outputs captured.",
            "operation": "list",
            "operationDescription": "WHAT — List all tool attachments on a target (the agent or a specific playbook).\nUSE WHEN — Auditing which tools are wired to a target before adding or removing; or reading current inputVariables / captureResponse config before a patch.\nBEFORE — voiceflow_project.get for projectID and voiceflow_environment.list for environmentAlias; voiceflow_playbook.list if you need a playbookID."
          },
          "cli": {
            "command": "tool list"
          }
        },
        "x-speakeasy-group": "tool",
        "x-speakeasy-name-override": "list",
        "summary": "List tools",
        "description": "Returns every tool in the environment. A tool is something a playbook can call during a conversation. The call takes no paging parameters, so one request yields the whole set.",
        "parameters": [
          {
            "name": "global",
            "required": false,
            "in": "query",
            "schema": {
              "description": "Target the agent. Cannot be used with playbookID.",
              "type": "boolean"
            }
          },
          {
            "name": "playbookID",
            "required": false,
            "in": "query",
            "schema": {
              "description": "Target a specific playbook. Cannot be used with global.",
              "type": "string"
            }
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          },
          {
            "name": "type",
            "required": false,
            "in": "query",
            "schema": {
              "description": "When provided, only tools of this type are returned.",
              "type": "string",
              "enum": [
                "api",
                "mcp",
                "function",
                "integration"
              ],
              "x-enumNames": [
                "API",
                "MCP",
                "FUNCTION",
                "INTEGRATION"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the tools attached to the agent or to a single playbook, depending on whether you pass global or playbookID. Each entry is the attachment rather than the underlying resource: it points at an API tool, function, or MCP tool by ID and carries the description, input mappings, and response capture used when the agent calls it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableToolListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the tools attached to the agent or to a single playbook, depending on whether you pass global or playbookID. Each entry is the attachment rather than the underlying resource: it points at an API tool, function, or MCP tool by ID and carries the description, input mappings, and response capture used when the agent calls it."
            }
          }
        },
        "tags": [
          "Tool"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns every tool in the environment. A tool is something a playbook can call during a conversation. The call takes no paging parameters, so one request yields the whole set."
        }
      },
      "post": {
        "operationId": "StableToolController_create",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_tool",
            "toolDescription": "The wiring layer that attaches Function, API, MCP, and Integration tools to a target — either the global agent or a specific playbook. Agent-level attachments are inherited by every playbook; playbook-level attachments are scoped to that playbook only.\nAttachments carry two critical maps: an input map (how each tool input is filled — from the LLM, from a project variable, or a literal) and an output-capture map (which tool outputs land in which project variables). Omitting the output-capture map is the #1 source of \"the tool ran but the data went nowhere\" bugs — the tool returns the right data, but nothing ever lands in a variable and every downstream reference silently reads the default (usually 0).\nPredecessor: create the Function, API tool, or MCP tool by adding a server — the underlying tool must exist before it can be attached. Integration tools are the exception: they come from connecting the integration in the Creator UI and cannot be created through this API.\nSuccessor: recompile the environment, then run a test conversation — inspect the trace's tool calls and variable state to confirm inputs resolved and outputs captured.",
            "operation": "create",
            "operationDescription": "WHAT — Attach one tool (function | api | mcp | integration) to a target and wire its inputs and outputs.\nUSE WHEN — Enabling a specific tool on the global agent or a single playbook for the first time.\nBEFORE — The underlying tool definition must already exist: voiceflow_function.create, voiceflow_api_tool.create, or voiceflow_mcp_server.create. Get functionID / apiToolID / mcpToolID from those tools first. Integration tools are not creatable through this API — the integration must already be connected in the Creator UI. An integrationToolID is only visible on an attachment that already exists (voiceflow_tool.list reports it); nothing in this API lists integration tools that have never been attached, so the first attachment has to be made in the Creator UI.\nAFTER — Set captureResponse so tool output lands in project variables; omitting it means the response is silently discarded. Then voiceflow_environment.compile + voiceflow_conversation.\nDO NOT — Attach the same tool twice to the same target without allowDuplicate: true (function type only) — the second attach will fail. Send required: true on an input whose defaultValue holds a secret reference — the request is rejected. Omit required there and the secret is injected without the model ever being asked for it. Put a secret reference in generative message examples or in knowledgeBaseTool.query — those texts are sent to a model, so the request is rejected. Secrets belong in a tool input's defaultValue, which the runtime resolves without the model ever seeing the value."
          },
          "cli": {
            "command": "tool create"
          }
        },
        "x-speakeasy-group": "tool",
        "x-speakeasy-name-override": "create",
        "summary": "Create tool",
        "description": "Adds a tool to the environment, something a playbook can call during a conversation. The response carries the ID that later calls address it by.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableToolCreateRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Attaches an existing API tool, function, or MCP tool to the agent or to a playbook, and returns the attachment with its generated ID and wiring. The underlying resource is referenced by ID and is not created here.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableToolResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Attaches an existing API tool, function, or MCP tool to the agent or to a playbook, and returns the attachment with its generated ID and wiring. The underlying resource is referenced by ID and is not created here."
            }
          }
        },
        "tags": [
          "Tool"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds a tool to the environment, something a playbook can call during a conversation. The response carries the ID that later calls address it by."
        }
      }
    },
    "/v1/stable/tool/batch": {
      "post": {
        "operationId": "StableToolController_createMany",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_tool",
            "toolDescription": "The wiring layer that attaches Function, API, MCP, and Integration tools to a target — either the global agent or a specific playbook. Agent-level attachments are inherited by every playbook; playbook-level attachments are scoped to that playbook only.\nAttachments carry two critical maps: an input map (how each tool input is filled — from the LLM, from a project variable, or a literal) and an output-capture map (which tool outputs land in which project variables). Omitting the output-capture map is the #1 source of \"the tool ran but the data went nowhere\" bugs — the tool returns the right data, but nothing ever lands in a variable and every downstream reference silently reads the default (usually 0).\nPredecessor: create the Function, API tool, or MCP tool by adding a server — the underlying tool must exist before it can be attached. Integration tools are the exception: they come from connecting the integration in the Creator UI and cannot be created through this API.\nSuccessor: recompile the environment, then run a test conversation — inspect the trace's tool calls and variable state to confirm inputs resolved and outputs captured.",
            "operation": "create_many",
            "operationDescription": "WHAT — Attach multiple tools of the same type to a target in one call.\nUSE WHEN — Bulk-wiring a set of functions, API tools, or MCP tools to a playbook or the global agent (e.g. migrating all tools from one playbook to another via sourcePlaybookID, or seeding a new agent from a template).\nBEFORE — All referenced functionIDs / apiToolIDs / mcpToolIDs must already exist.\nAFTER — Verify captureResponse is set on each record — bulk creates are the most common place it gets omitted.\nDO NOT — Send required: true on an input whose defaultValue holds a secret reference — the request is rejected. Omit required there and the secret is injected without the model ever being asked for it. Put a secret reference in generative message examples or in knowledgeBaseTool.query — those texts are sent to a model, so the request is rejected. Secrets belong in a tool input's defaultValue, which the runtime resolves without the model ever seeing the value."
          },
          "cli": {
            "command": "tool create-many"
          }
        },
        "x-speakeasy-group": "tool",
        "x-speakeasy-name-override": "create-many",
        "x-speakeasy-ignore": true,
        "summary": "Create many tools",
        "description": "Adds several tools to the environment in one request, each taking the fields the single-create call takes. The response carries the created tools in the same shape the list call returns.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableToolCreateManyRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Attaches several tools to the same target in one call and returns each attachment with its generated ID. The request carries a single type and a single target, so tools of different types need separate calls.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableToolListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Attaches several tools to the same target in one call and returns each attachment with its generated ID. The request carries a single type and a single target, so tools of different types need separate calls."
            }
          }
        },
        "tags": [
          "Tool"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds several tools to the environment in one request, each taking the fields the single-create call takes. The response carries the created tools in the same shape the list call returns."
        }
      }
    },
    "/v1/stable/tool/{toolID}": {
      "get": {
        "operationId": "StableToolController_get",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_tool",
            "toolDescription": "The wiring layer that attaches Function, API, MCP, and Integration tools to a target — either the global agent or a specific playbook. Agent-level attachments are inherited by every playbook; playbook-level attachments are scoped to that playbook only.\nAttachments carry two critical maps: an input map (how each tool input is filled — from the LLM, from a project variable, or a literal) and an output-capture map (which tool outputs land in which project variables). Omitting the output-capture map is the #1 source of \"the tool ran but the data went nowhere\" bugs — the tool returns the right data, but nothing ever lands in a variable and every downstream reference silently reads the default (usually 0).\nPredecessor: create the Function, API tool, or MCP tool by adding a server — the underlying tool must exist before it can be attached. Integration tools are the exception: they come from connecting the integration in the Creator UI and cannot be created through this API.\nSuccessor: recompile the environment, then run a test conversation — inspect the trace's tool calls and variable state to confirm inputs resolved and outputs captured.",
            "operation": "get",
            "operationDescription": "WHAT — Fetch the full attachment for one tool.\nUSE WHEN — Inspecting a single wiring before patching it, or debugging why inputs aren't resolving or outputs aren't captured.\nBEFORE — voiceflow_tool.list to obtain the toolID."
          },
          "cli": {
            "command": "tool get"
          }
        },
        "x-speakeasy-group": "tool",
        "x-speakeasy-name-override": "get",
        "summary": "Get tool",
        "description": "Returns a single tool by ID, with the fields that define it. A tool is something a playbook can call during a conversation.",
        "parameters": [
          {
            "name": "toolID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the tool to operate on."
            },
            "description": "The ID of the tool to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          },
          {
            "name": "type",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "api",
                "mcp",
                "function",
                "integration"
              ],
              "description": "The type of the tool to fetch.",
              "x-enumNames": [
                "API",
                "MCP",
                "FUNCTION",
                "INTEGRATION"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns one attached tool with the resource it points at, the description the agent reads, its input mappings, and where its response is captured. The required type parameter selects which of the three shapes, API, function, or MCP, comes back.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableToolResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns one attached tool with the resource it points at, the description the agent reads, its input mappings, and where its response is captured. The required type parameter selects which of the three shapes, API, function, or MCP, comes back."
            }
          }
        },
        "tags": [
          "Tool"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns a single tool by ID, with the fields that define it. A tool is something a playbook can call during a conversation."
        }
      },
      "patch": {
        "operationId": "StableToolController_update",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_tool",
            "toolDescription": "The wiring layer that attaches Function, API, MCP, and Integration tools to a target — either the global agent or a specific playbook. Agent-level attachments are inherited by every playbook; playbook-level attachments are scoped to that playbook only.\nAttachments carry two critical maps: an input map (how each tool input is filled — from the LLM, from a project variable, or a literal) and an output-capture map (which tool outputs land in which project variables). Omitting the output-capture map is the #1 source of \"the tool ran but the data went nowhere\" bugs — the tool returns the right data, but nothing ever lands in a variable and every downstream reference silently reads the default (usually 0).\nPredecessor: create the Function, API tool, or MCP tool by adding a server — the underlying tool must exist before it can be attached. Integration tools are the exception: they come from connecting the integration in the Creator UI and cannot be created through this API.\nSuccessor: recompile the environment, then run a test conversation — inspect the trace's tool calls and variable state to confirm inputs resolved and outputs captured.",
            "operation": "update",
            "operationDescription": "WHAT — Patch an existing tool attachment — update inputVariables, captureResponse, description override, or asyncExecution. Partial PATCH; omitted fields are unchanged.\nUSE WHEN — Changing how a tool's inputs are resolved (switch from LLM-filled to variable-sourced), adding or correcting captureResponse mappings, or toggling asyncExecution on a function tool.\nBEFORE — voiceflow_tool.get to read current config; use its values as base to avoid accidentally clearing fields.\nAFTER — voiceflow_environment.compile + voiceflow_conversation to confirm the new wiring behaves correctly.\nDO NOT — Send required: true on an input whose defaultValue holds a secret reference — the request is rejected. Omit required there and the secret is injected without the model ever being asked for it. Put a secret reference in generative message examples or in knowledgeBaseTool.query — those texts are sent to a model, so the request is rejected. Secrets belong in a tool input's defaultValue, which the runtime resolves without the model ever seeing the value."
          },
          "cli": {
            "command": "tool update"
          }
        },
        "x-speakeasy-group": "tool",
        "x-speakeasy-name-override": "update",
        "summary": "Update tool",
        "description": "Changes an existing tool in place. The response carries only a confirmation message, so refetch the tool to read its new values.",
        "parameters": [
          {
            "name": "toolID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the tool to operate on."
            },
            "description": "The ID of the tool to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableToolUpdateRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confirms the attachment's wiring was updated, meaning its description, input mappings, or capture settings rather than the API tool, function, or MCP tool it points at. The body is a message only, so refetch the tool to read its current state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableUpdateResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the attachment's wiring was updated, meaning its description, input mappings, or capture settings rather than the API tool, function, or MCP tool it points at. The body is a message only, so refetch the tool to read its current state."
            }
          }
        },
        "tags": [
          "Tool"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Changes an existing tool in place. The response carries only a confirmation message, so refetch the tool to read its new values."
        }
      },
      "delete": {
        "operationId": "StableToolController_delete",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_tool",
            "toolDescription": "The wiring layer that attaches Function, API, MCP, and Integration tools to a target — either the global agent or a specific playbook. Agent-level attachments are inherited by every playbook; playbook-level attachments are scoped to that playbook only.\nAttachments carry two critical maps: an input map (how each tool input is filled — from the LLM, from a project variable, or a literal) and an output-capture map (which tool outputs land in which project variables). Omitting the output-capture map is the #1 source of \"the tool ran but the data went nowhere\" bugs — the tool returns the right data, but nothing ever lands in a variable and every downstream reference silently reads the default (usually 0).\nPredecessor: create the Function, API tool, or MCP tool by adding a server — the underlying tool must exist before it can be attached. Integration tools are the exception: they come from connecting the integration in the Creator UI and cannot be created through this API.\nSuccessor: recompile the environment, then run a test conversation — inspect the trace's tool calls and variable state to confirm inputs resolved and outputs captured.",
            "operation": "delete",
            "operationDescription": "WHAT — Detach a tool from its target (agent level or playbook). The underlying tool definition stays — only the attachment is removed.\nUSE WHEN — The tool is no longer relevant at this scope, or you're moving it to per-playbook scope.\nBEFORE — Confirm which playbooks rely on this tool. Removing an agent-level attachment also removes it from every playbook (unless individually re-attached)."
          },
          "cli": {
            "command": "tool delete"
          }
        },
        "x-speakeasy-group": "tool",
        "x-speakeasy-name-override": "delete",
        "summary": "Delete tool",
        "description": "Deletes a single tool by ID. A tool is something a playbook can call during a conversation. The response carries only a confirmation message, so refetch the tools to see what is left.",
        "parameters": [
          {
            "name": "toolID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the tool to operate on."
            },
            "description": "The ID of the tool to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          },
          {
            "name": "type",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "api",
                "mcp",
                "function",
                "integration"
              ],
              "description": "The type of the tool to delete.",
              "x-enumNames": [
                "API",
                "MCP",
                "FUNCTION",
                "INTEGRATION"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Confirms the tool attachment was removed, and the required type parameter must match the type of the tool being deleted. The body is a message only, so refetch the agent's or playbook's tools to see what it can still call.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableDeleteResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the tool attachment was removed, and the required type parameter must match the type of the tool being deleted. The body is a message only, so refetch the agent's or playbook's tools to see what it can still call."
            }
          }
        },
        "tags": [
          "Tool"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Deletes a single tool by ID. A tool is something a playbook can call during a conversation. The response carries only a confirmation message, so refetch the tools to see what is left."
        }
      }
    },
    "/v1/stable/workspace": {
      "get": {
        "operationId": "StableWorkspaceController_list",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_workspace",
            "toolDescription": "Manage Voiceflow Workspaces — the top-level container for Projects and team members. Every Project belongs to exactly one Workspace. Subscription plan determines how many Workspaces an account can have.\nPredecessor: none — Workspace is the root; start here when orienting in a fresh session.\nSuccessor: list the Projects in the Workspace, or create a new one.",
            "operation": "list",
            "operationDescription": "WHAT — List all Workspaces the authenticated user belongs to.\nUSE WHEN — Starting a new session and you don't yet know which Workspace the user wants to work in, or enumerating Workspaces for selection.\nAFTER — voiceflow_project.list once you have the target workspaceID."
          },
          "cli": {
            "command": "workspace list"
          }
        },
        "x-speakeasy-group": "workspace",
        "x-speakeasy-name-override": "list",
        "summary": "List workspaces",
        "description": "Returns every workspace in the account. A workspace is the container that groups projects and the people who work on them. The call takes no paging parameters, so one request yields the whole set.",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Returns every workspace the authenticated account belongs to, each with its ID, name, image URL, and the organization it sits under.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableWorkspaceListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns every workspace the authenticated account belongs to, each with its ID, name, image URL, and the organization it sits under."
            }
          }
        },
        "tags": [
          "Workspace"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns every workspace in the account. A workspace is the container that groups projects and the people who work on them. The call takes no paging parameters, so one request yields the whole set."
        }
      },
      "post": {
        "operationId": "StableWorkspaceController_create",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_workspace",
            "toolDescription": "Manage Voiceflow Workspaces — the top-level container for Projects and team members. Every Project belongs to exactly one Workspace. Subscription plan determines how many Workspaces an account can have.\nPredecessor: none — Workspace is the root; start here when orienting in a fresh session.\nSuccessor: list the Projects in the Workspace, or create a new one.",
            "operation": "create",
            "operationDescription": "WHAT — Create a new Workspace.\nUSE WHEN — User explicitly asks to create a new Workspace. Subscription plan limits how many Workspaces an account can have.\nBEFORE — voiceflow_workspace.list to confirm the user isn't accidentally duplicating an existing Workspace.\nAFTER — voiceflow_project.create to add the first Project to the new Workspace.\nDO NOT — Create a Workspace without explicit user intent — most users work within a single existing Workspace."
          },
          "cli": {
            "command": "workspace create"
          }
        },
        "x-speakeasy-group": "workspace",
        "x-speakeasy-name-override": "create",
        "summary": "Create workspace",
        "description": "Adds a workspace to the account, the container that groups projects and the people who work on them. The response carries the ID that later calls address it by.",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableWorkspaceCreateRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Creates the workspace and returns it, including the generated ID that later calls pass as workspaceID.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableWorkspaceResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Creates the workspace and returns it, including the generated ID that later calls pass as workspaceID."
            }
          }
        },
        "tags": [
          "Workspace"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds a workspace to the account, the container that groups projects and the people who work on them. The response carries the ID that later calls address it by."
        }
      }
    },
    "/v1/stable/workspace/{workspaceID}": {
      "get": {
        "operationId": "StableWorkspaceController_get",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_workspace",
            "toolDescription": "Manage Voiceflow Workspaces — the top-level container for Projects and team members. Every Project belongs to exactly one Workspace. Subscription plan determines how many Workspaces an account can have.\nPredecessor: none — Workspace is the root; start here when orienting in a fresh session.\nSuccessor: list the Projects in the Workspace, or create a new one.",
            "operation": "get",
            "operationDescription": "WHAT — Fetch a single Workspace by ID.\nUSE WHEN — Confirming a Workspace exists before creating a Project in it, or retrieving current metadata before an update.\nAFTER — voiceflow_project.list or voiceflow_project.create."
          },
          "cli": {
            "command": "workspace get"
          }
        },
        "x-speakeasy-group": "workspace",
        "x-speakeasy-name-override": "get",
        "summary": "Get workspace",
        "description": "Returns a single workspace by ID, with the fields that define it. A workspace is the container that groups projects and the people who work on them.",
        "parameters": [
          {
            "name": "workspaceID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the workspace to operate on."
            },
            "description": "The ID of the workspace to operate on."
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the one workspace, with its name, image URL, the organization it belongs to, and its creation and update timestamps.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableWorkspaceResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the one workspace, with its name, image URL, the organization it belongs to, and its creation and update timestamps."
            }
          }
        },
        "tags": [
          "Workspace"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns a single workspace by ID, with the fields that define it. A workspace is the container that groups projects and the people who work on them."
        }
      },
      "patch": {
        "operationId": "StableWorkspaceController_update",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_workspace",
            "toolDescription": "Manage Voiceflow Workspaces — the top-level container for Projects and team members. Every Project belongs to exactly one Workspace. Subscription plan determines how many Workspaces an account can have.\nPredecessor: none — Workspace is the root; start here when orienting in a fresh session.\nSuccessor: list the Projects in the Workspace, or create a new one.",
            "operation": "update",
            "operationDescription": "WHAT — Rename a Workspace.\nUSE WHEN — User wants to rename their Workspace.\nBEFORE — voiceflow_workspace.get to see current name.\nDO NOT — Use this to manage Projects, members, or roles — those are managed outside the MCP tools."
          },
          "cli": {
            "command": "workspace update"
          }
        },
        "x-speakeasy-group": "workspace",
        "x-speakeasy-name-override": "update",
        "summary": "Update workspace",
        "description": "Changes an existing workspace in place. The response carries only a confirmation message, so refetch the workspace to read its new values.",
        "parameters": [
          {
            "name": "workspaceID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the workspace to operate on."
            },
            "description": "The ID of the workspace to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/StableWorkspaceUpdateRequest"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confirms the workspace was updated. The body is a message, not the updated workspace, so refetch it to read the new values.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableUpdateResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the workspace was updated. The body is a message, not the updated workspace, so refetch it to read the new values."
            }
          }
        },
        "tags": [
          "Workspace"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Changes an existing workspace in place. The response carries only a confirmation message, so refetch the workspace to read its new values."
        }
      },
      "delete": {
        "operationId": "StableWorkspaceController_delete",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_workspace",
            "toolDescription": "Manage Voiceflow Workspaces — the top-level container for Projects and team members. Every Project belongs to exactly one Workspace. Subscription plan determines how many Workspaces an account can have.\nPredecessor: none — Workspace is the root; start here when orienting in a fresh session.\nSuccessor: list the Projects in the Workspace, or create a new one.",
            "operation": "delete",
            "operationDescription": "WHAT — Remove a workspace.\nDO NOT — Delete without explicit user confirmation — all projects and their content inside the workspace are permanently lost with no undo."
          },
          "cli": {
            "command": "workspace delete"
          }
        },
        "x-speakeasy-group": "workspace",
        "x-speakeasy-name-override": "delete",
        "summary": "Delete workspace",
        "description": "Deletes a single workspace by ID. A workspace is the container that groups projects and the people who work on them. The response carries only a confirmation message, so refetch the workspaces to see what is left.",
        "parameters": [
          {
            "name": "workspaceID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the workspace to operate on."
            },
            "description": "The ID of the workspace to operate on."
          }
        ],
        "responses": {
          "200": {
            "description": "Confirms the workspace was deleted. Only a message comes back, so list workspaces again to see what remains.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableDeleteResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the workspace was deleted. Only a message comes back, so list workspaces again to see what remains."
            }
          }
        },
        "tags": [
          "Workspace"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Deletes a single workspace by ID. A workspace is the container that groups projects and the people who work on them. The response carries only a confirmation message, so refetch the workspaces to see what is left."
        }
      }
    },
    "/v1/stable/project": {
      "get": {
        "operationId": "StableProjectController_list",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_project",
            "toolDescription": "Create, list, and manage Voiceflow Projects — the dashboard-level container. Every Project owns its Playbooks, Workflows, Tools, Variables, and Knowledge Base, and lives inside a Workspace.\nPredecessor: select the workspace first.\nSuccessor: set the agent's global prompt (identity, tone, and cross-cutting guardrails), then add task-scoped Playbooks.",
            "operation": "list",
            "operationDescription": "WHAT — Lists all Projects in a Workspace.\nUSE WHEN — User says \"work on my X project,\" you need to pick a Project from a Workspace, or orienting yourself in a fresh session.\nBEFORE — voiceflow_workspace.list if you don't yet have a workspaceID.\nAFTER — voiceflow_project.get to load full detail on the one the user picked."
          },
          "cli": {
            "command": "project list"
          }
        },
        "x-speakeasy-group": "project",
        "x-speakeasy-name-override": "list",
        "summary": "List projects",
        "description": "Returns every project in the workspace. A project is the container that owns exactly one agent. The call takes no paging parameters, so one request yields the whole set.",
        "parameters": [
          {
            "name": "workspaceID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the workspace to list projects from."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns every project in the workspace named by workspaceID, each with its name, description, image URL, and creation and update timestamps.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableProjectListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns every project in the workspace named by workspaceID, each with its name, description, image URL, and creation and update timestamps."
            }
          }
        },
        "tags": [
          "Project"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns every project in the workspace. A project is the container that owns exactly one agent. The call takes no paging parameters, so one request yields the whole set."
        }
      },
      "post": {
        "operationId": "StableProjectController_create",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_project",
            "toolDescription": "Create, list, and manage Voiceflow Projects — the dashboard-level container. Every Project owns its Playbooks, Workflows, Tools, Variables, and Knowledge Base, and lives inside a Workspace.\nPredecessor: select the workspace first.\nSuccessor: set the agent's global prompt (identity, tone, and cross-cutting guardrails), then add task-scoped Playbooks.",
            "operation": "create",
            "operationDescription": "WHAT — Creates a new Project.\nUSE WHEN — User asks to build a new agent from scratch.\nBEFORE — voiceflow_workspace.list if you don't yet have a workspaceID; voiceflow_project.list to make sure the user isn't accidentally duplicating an existing Project.\nAFTER — voiceflow_playbook.create (add task Playbooks), then voiceflow_agent.update (set identity and make playbooks reachable)."
          },
          "cli": {
            "command": "project create"
          }
        },
        "x-speakeasy-group": "project",
        "x-speakeasy-name-override": "create",
        "summary": "Create project",
        "description": "Adds a project to the workspace, the container that owns exactly one agent. The response carries the ID that later calls address it by.",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableProjectCreateRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Creates the project and returns it, including the ID that most other endpoints take as their projectID query parameter.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableProjectResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Creates the project and returns it, including the ID that most other endpoints take as their projectID query parameter."
            }
          }
        },
        "tags": [
          "Project"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds a project to the workspace, the container that owns exactly one agent. The response carries the ID that later calls address it by."
        }
      }
    },
    "/v1/stable/project/{projectID}": {
      "get": {
        "operationId": "StableProjectController_get",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_project",
            "toolDescription": "Create, list, and manage Voiceflow Projects — the dashboard-level container. Every Project owns its Playbooks, Workflows, Tools, Variables, and Knowledge Base, and lives inside a Workspace.\nPredecessor: select the workspace first.\nSuccessor: set the agent's global prompt (identity, tone, and cross-cutting guardrails), then add task-scoped Playbooks.",
            "operation": "get",
            "operationDescription": "WHAT — Fetches one Project by ID.\nUSE WHEN — Confirming a Project exists before editing.\nBEFORE — voiceflow_workspace.list → voiceflow_project.list if you don't yet have the projectID.\nAFTER — Most other tools need projectID + environmentAlias; some downstream calls may also require playbookID."
          },
          "cli": {
            "command": "project get"
          }
        },
        "x-speakeasy-group": "project",
        "x-speakeasy-name-override": "get",
        "summary": "Get project",
        "description": "Returns a single project by ID, with the fields that define it. A project is the container that owns exactly one agent.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the project to operate on."
            },
            "description": "The ID of the project to operate on."
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the one project, with its name, description, image URL, and the workspace that holds it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableProjectResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the one project, with its name, description, image URL, and the workspace that holds it."
            }
          }
        },
        "tags": [
          "Project"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns a single project by ID, with the fields that define it. A project is the container that owns exactly one agent."
        }
      },
      "patch": {
        "operationId": "StableProjectController_update",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_project",
            "toolDescription": "Create, list, and manage Voiceflow Projects — the dashboard-level container. Every Project owns its Playbooks, Workflows, Tools, Variables, and Knowledge Base, and lives inside a Workspace.\nPredecessor: select the workspace first.\nSuccessor: set the agent's global prompt (identity, tone, and cross-cutting guardrails), then add task-scoped Playbooks.",
            "operation": "update",
            "operationDescription": "WHAT — Updates top-level Project metadata.\nUSE WHEN — Renaming a Project or updating org-level metadata.\nBEFORE — voiceflow_project.get to see current metadata.\nDO NOT — Use this to edit Playbook content, behavior, or the Global Prompt. Those have their own tools — voiceflow_playbook.update, voiceflow_agent.update."
          },
          "cli": {
            "command": "project update"
          }
        },
        "x-speakeasy-group": "project",
        "x-speakeasy-name-override": "update",
        "summary": "Update project",
        "description": "Changes an existing project in place. The response carries only a confirmation message, so refetch the project to read its new values.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the project to operate on."
            },
            "description": "The ID of the project to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/StableProjectUpdateRequest"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confirms the change to the project was saved. The response carries a message rather than the project, so read the project back to see its current name and description.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableUpdateResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the change to the project was saved. The response carries a message rather than the project, so read the project back to see its current name and description."
            }
          }
        },
        "tags": [
          "Project"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Changes an existing project in place. The response carries only a confirmation message, so refetch the project to read its new values."
        }
      },
      "delete": {
        "operationId": "StableProjectController_delete",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_project",
            "toolDescription": "Create, list, and manage Voiceflow Projects — the dashboard-level container. Every Project owns its Playbooks, Workflows, Tools, Variables, and Knowledge Base, and lives inside a Workspace.\nPredecessor: select the workspace first.\nSuccessor: set the agent's global prompt (identity, tone, and cross-cutting guardrails), then add task-scoped Playbooks.",
            "operation": "delete",
            "operationDescription": "WHAT — Remove a project.\nDO NOT — Delete without explicit user confirmation — cascades to all environments, versions, and knowledge base content with no undo."
          },
          "cli": {
            "command": "project delete"
          }
        },
        "x-speakeasy-group": "project",
        "x-speakeasy-name-override": "delete",
        "summary": "Delete project",
        "description": "Deletes a single project by ID. A project is the container that owns exactly one agent. The response carries only a confirmation message, so refetch the projects to see what is left.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the project to operate on."
            },
            "description": "The ID of the project to operate on."
          }
        ],
        "responses": {
          "200": {
            "description": "Confirms the project was deleted. The response is a message only, so list the workspace's projects again if you keep your own copy of them.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableDeleteResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the project was deleted. The response is a message only, so list the workspace's projects again if you keep your own copy of them."
            }
          }
        },
        "tags": [
          "Project"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Deletes a single project by ID. A project is the container that owns exactly one agent. The response carries only a confirmation message, so refetch the projects to see what is left."
        }
      }
    },
    "/v1/stable/environment": {
      "get": {
        "operationId": "StableEnvironmentController_list",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_environment",
            "toolDescription": "Manage the versioned copies of a Project — every Project starts with one Main environment and can have up to nine more, each with its own draft + live version. Environments are how Voiceflow ships changes: publish promotes a draft to live within one environment, merge promotes one environment into Main, and traffic-split routes live traffic across them.\nPredecessor: select the project first.\nSuccessor: run a test conversation after a clone, or publish to ship the draft.",
            "operation": "list",
            "operationDescription": "WHAT — List every environment on a Project.\nUSE WHEN — Orienting yourself on a Project for the first time, before deciding which environment to edit or test against.\nAFTER — voiceflow_environment.get to load full detail on the one you want to work in."
          },
          "cli": {
            "command": "environment list"
          }
        },
        "x-speakeasy-group": "environment",
        "x-speakeasy-name-override": "list",
        "summary": "List environments",
        "description": "Returns every environment in the project. An environment is one draft-and-published copy of the agent. The call takes no paging parameters, so one request yields the whole set.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns every environment in the project, each with its name, alias, release history, whether it is the project's main environment, and the percentage of live traffic it currently takes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableEnvironmentListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns every environment in the project, each with its name, alias, release history, whether it is the project's main environment, and the percentage of live traffic it currently takes."
            }
          }
        },
        "tags": [
          "Environment"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns every environment in the project. An environment is one draft-and-published copy of the agent. The call takes no paging parameters, so one request yields the whole set."
        }
      }
    },
    "/v1/stable/environment/merge": {
      "put": {
        "operationId": "StableEnvironmentController_merge",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_environment",
            "toolDescription": "Manage the versioned copies of a Project — every Project starts with one Main environment and can have up to nine more, each with its own draft + live version. Environments are how Voiceflow ships changes: publish promotes a draft to live within one environment, merge promotes one environment into Main, and traffic-split routes live traffic across them.\nPredecessor: select the project first.\nSuccessor: run a test conversation after a clone, or publish to ship the draft.",
            "operation": "merge",
            "operationDescription": "WHAT — Replace Main's live version entirely with another environment's live version. Recorded in Main's version history; the previous Main is preserved and revertable.\nUSE WHEN — A non-Main environment has been validated and you want to roll its changes into Main for all traffic.\nBEFORE — voiceflow_environment.publish on the source environment so its live version reflects current draft state.\nDO NOT — Merge if Main has live changes since you cloned the source — you'll lose them. Clone a fresh env from Main, port changes to it, then merge."
          },
          "cli": {
            "command": "environment merge"
          }
        },
        "x-speakeasy-group": "environment",
        "x-speakeasy-name-override": "merge",
        "summary": "Merge environments",
        "description": "Folds the contents of one environment into another, so work done in a clone can be brought back to the environment it was cloned from.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableEnvironmentMergeRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns the source and target environments as they stand after the merge, plus the resulting release on the target, with its name, description, and the ID of the backup that snapshots it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableEnvironmentMergeResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the source and target environments as they stand after the merge, plus the resulting release on the target, with its name, description, and the ID of the backup that snapshots it."
            }
          }
        },
        "tags": [
          "Environment"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Folds the contents of one environment into another, so work done in a clone can be brought back to the environment it was cloned from."
        }
      }
    },
    "/v1/stable/environment/update-traffic-split": {
      "put": {
        "operationId": "StableEnvironmentController_updateTrafficSplit",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_environment",
            "toolDescription": "Manage the versioned copies of a Project — every Project starts with one Main environment and can have up to nine more, each with its own draft + live version. Environments are how Voiceflow ships changes: publish promotes a draft to live within one environment, merge promotes one environment into Main, and traffic-split routes live traffic across them.\nPredecessor: select the project first.\nSuccessor: run a test conversation after a clone, or publish to ship the draft.",
            "operation": "update_traffic_split",
            "operationDescription": "WHAT — Configure what percentage of live traffic goes to each environment. Values must sum to 100. No body returned.\nUSE WHEN — Rolling out a new environment gradually, A/B testing two agent versions, or shifting traffic during a deploy.\nDO NOT — Set 100% on a non-Main environment without explicit user intent. Traffic split is sticky per user across sessions, so flipping it mid-deploy changes who sees what."
          },
          "cli": {
            "command": "environment update-traffic-split"
          }
        },
        "x-speakeasy-group": "environment",
        "x-speakeasy-name-override": "update-traffic-split",
        "summary": "Update traffic split",
        "description": "Changes an existing environment in place. The response carries only a confirmation message, so refetch the environment to read its new values.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableEnvironmentUpdateTrafficSplitRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confirms the new split was saved. The body is a message only, so read the environments back to see the trafficPercentage now recorded against each one.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableUpdateResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the new split was saved. The body is a message only, so read the environments back to see the trafficPercentage now recorded against each one."
            }
          }
        },
        "tags": [
          "Environment"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Changes an existing environment in place. The response carries only a confirmation message, so refetch the environment to read its new values."
        }
      }
    },
    "/v1/stable/environment/{environmentAlias}": {
      "get": {
        "operationId": "StableEnvironmentController_get",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_environment",
            "toolDescription": "Manage the versioned copies of a Project — every Project starts with one Main environment and can have up to nine more, each with its own draft + live version. Environments are how Voiceflow ships changes: publish promotes a draft to live within one environment, merge promotes one environment into Main, and traffic-split routes live traffic across them.\nPredecessor: select the project first.\nSuccessor: run a test conversation after a clone, or publish to ship the draft.",
            "operation": "get",
            "operationDescription": "WHAT — Fetch a single environment by ID.\nUSE WHEN — You need to confirm an environment's current live version, check its alias, or inspect its draft before publishing."
          },
          "cli": {
            "command": "environment get"
          }
        },
        "x-speakeasy-group": "environment",
        "x-speakeasy-name-override": "get",
        "summary": "Get environment",
        "description": "Returns a single environment by ID, with the fields that define it. An environment is one draft-and-published copy of the agent.",
        "parameters": [
          {
            "name": "environmentAlias",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The alias of the environment to operate on (e.g. `main`)."
            },
            "description": "The alias of the environment to operate on (e.g. `main`)."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the one environment the alias resolves to, including its release history and the share of live traffic routed to it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableEnvironmentResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the one environment the alias resolves to, including its release history and the share of live traffic routed to it."
            }
          }
        },
        "tags": [
          "Environment"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns a single environment by ID, with the fields that define it. An environment is one draft-and-published copy of the agent."
        }
      },
      "patch": {
        "operationId": "StableEnvironmentController_update",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_environment",
            "toolDescription": "Manage the versioned copies of a Project — every Project starts with one Main environment and can have up to nine more, each with its own draft + live version. Environments are how Voiceflow ships changes: publish promotes a draft to live within one environment, merge promotes one environment into Main, and traffic-split routes live traffic across them.\nPredecessor: select the project first.\nSuccessor: run a test conversation after a clone, or publish to ship the draft.",
            "operation": "update",
            "operationDescription": "WHAT — Rename an environment.\nUSE WHEN — Cleaning up environment names after cloning, or rebranding an environment (e.g. \"experimental\" → \"staging\")."
          },
          "cli": {
            "command": "environment update"
          }
        },
        "x-speakeasy-group": "environment",
        "x-speakeasy-name-override": "update",
        "summary": "Update environment",
        "description": "Changes an existing environment in place. The response carries only a confirmation message, so refetch the environment to read its new values.",
        "parameters": [
          {
            "name": "environmentAlias",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The alias of the environment to operate on (e.g. `main`)."
            },
            "description": "The alias of the environment to operate on (e.g. `main`)."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/StableEnvironmentUpdateRequest"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confirms the environment was updated. The body carries a message, not the environment, so fetch it again to see the change alongside its releases and traffic percentage.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableUpdateResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the environment was updated. The body carries a message, not the environment, so fetch it again to see the change alongside its releases and traffic percentage."
            }
          }
        },
        "tags": [
          "Environment"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Changes an existing environment in place. The response carries only a confirmation message, so refetch the environment to read its new values."
        }
      },
      "delete": {
        "operationId": "StableEnvironmentController_delete",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_environment",
            "toolDescription": "Manage the versioned copies of a Project — every Project starts with one Main environment and can have up to nine more, each with its own draft + live version. Environments are how Voiceflow ships changes: publish promotes a draft to live within one environment, merge promotes one environment into Main, and traffic-split routes live traffic across them.\nPredecessor: select the project first.\nSuccessor: run a test conversation after a clone, or publish to ship the draft.",
            "operation": "delete",
            "operationDescription": "WHAT — Remove an environment. Rejected for the main environment or the last environment on a project.\nBEFORE — voiceflow_environment.update_traffic_split to route any live traffic away first.\nDO NOT — Delete an environment that's still receiving live traffic."
          },
          "cli": {
            "command": "environment delete"
          }
        },
        "x-speakeasy-group": "environment",
        "x-speakeasy-name-override": "delete",
        "summary": "Delete environment",
        "description": "Deletes a single environment by ID. An environment is one draft-and-published copy of the agent. The response carries only a confirmation message, so refetch the environments to see what is left.",
        "parameters": [
          {
            "name": "environmentAlias",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The alias of the environment to operate on (e.g. `main`)."
            },
            "description": "The alias of the environment to operate on (e.g. `main`)."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Confirms the environment was deleted. Only a message comes back, so list the project's environments again to see which aliases remain.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableDeleteResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the environment was deleted. Only a message comes back, so list the project's environments again to see which aliases remain."
            }
          }
        },
        "tags": [
          "Environment"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Deletes a single environment by ID. An environment is one draft-and-published copy of the agent. The response carries only a confirmation message, so refetch the environments to see what is left."
        }
      }
    },
    "/v1/stable/environment/{environmentAlias}/export": {
      "get": {
        "operationId": "StableEnvironmentController_export",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_environment",
            "toolDescription": "Manage the versioned copies of a Project — every Project starts with one Main environment and can have up to nine more, each with its own draft + live version. Environments are how Voiceflow ships changes: publish promotes a draft to live within one environment, merge promotes one environment into Main, and traffic-split routes live traffic across them.\nPredecessor: select the project first.\nSuccessor: run a test conversation after a clone, or publish to ship the draft.",
            "operation": "export",
            "operationDescription": "WHAT — Dumps the complete Project structure as JSON (often 100KB+).\nUSE WHEN — Last-resort diagnostic — you suspect something is attached but can't find it via targeted reads (most common cause: Integrations like Gmail / Salesforce, which don't surface cleanly via other tools).\nDO NOT — Use as a default read path. The full export is expensive to parse and mostly duplicates what targeted reads return."
          },
          "cli": {
            "command": "environment export"
          }
        },
        "x-speakeasy-group": "environment",
        "x-speakeasy-name-override": "export",
        "summary": "Export environment",
        "description": "Serialises the whole environment - its agent, playbooks, tools and knowledge base - into a single document you can archive or move to another project.",
        "parameters": [
          {
            "name": "environmentAlias",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The alias of the environment to operate on (e.g. `main`)."
            },
            "description": "The alias of the environment to operate on (e.g. `main`)."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the whole environment as one JSON document: its project and version records, every workflow, agent, tool, function, variable and knowledge base document version, and its secrets. Most sections appear only when the environment has something of that kind.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableEnvironmentExportResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the whole environment as one JSON document: its project and version records, every workflow, agent, tool, function, variable and knowledge base document version, and its secrets. Most sections appear only when the environment has something of that kind."
            }
          }
        },
        "tags": [
          "Environment"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Serialises the whole environment - its agent, playbooks, tools and knowledge base - into a single document you can archive or move to another project."
        }
      }
    },
    "/v1/stable/environment/{environmentAlias}/compile": {
      "put": {
        "operationId": "StableEnvironmentController_compile",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_environment",
            "toolDescription": "Manage the versioned copies of a Project — every Project starts with one Main environment and can have up to nine more, each with its own draft + live version. Environments are how Voiceflow ships changes: publish promotes a draft to live within one environment, merge promotes one environment into Main, and traffic-split routes live traffic across them.\nPredecessor: select the project first.\nSuccessor: run a test conversation after a clone, or publish to ship the draft.",
            "operation": "compile",
            "operationDescription": "WHAT — Compile the environment's draft so recent edits take effect when testing.\nUSE WHEN — After any non-trivial edit (Function creation, tool attachment, agent_routing change, prompt update) and before a test conversation against this environment.\nAFTER — voiceflow_conversation.send once compile completes.\nDO NOT — Skip compile after edits. Without it, the test conversation runs against the last-compiled version and changes won't be reflected — easy to spend 20 minutes \"debugging\" a fix that never took effect."
          },
          "cli": {
            "command": "environment compile"
          }
        },
        "x-speakeasy-group": "environment",
        "x-speakeasy-name-override": "compile",
        "summary": "Compile environment",
        "description": "Rebuilds the environment’s runtime form from its current definition, which is what a conversation actually executes against.",
        "parameters": [
          {
            "name": "environmentAlias",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The alias of the environment to operate on (e.g. `main`)."
            },
            "description": "The alias of the environment to operate on (e.g. `main`)."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns a confirmation message and durationMs, how long the compilation took in milliseconds. The environment itself is not part of the response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableEnvironmentCompileResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns a confirmation message and durationMs, how long the compilation took in milliseconds. The environment itself is not part of the response."
            }
          }
        },
        "tags": [
          "Environment"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Rebuilds the environment’s runtime form from its current definition, which is what a conversation actually executes against."
        }
      }
    },
    "/v1/stable/environment/{environmentAlias}/clone": {
      "post": {
        "operationId": "StableEnvironmentController_clone",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_environment",
            "toolDescription": "Manage the versioned copies of a Project — every Project starts with one Main environment and can have up to nine more, each with its own draft + live version. Environments are how Voiceflow ships changes: publish promotes a draft to live within one environment, merge promotes one environment into Main, and traffic-split routes live traffic across them.\nPredecessor: select the project first.\nSuccessor: run a test conversation after a clone, or publish to ship the draft.",
            "operation": "clone",
            "operationDescription": "WHAT — Create a new environment by cloning an existing one (typically Main).\nUSE WHEN — User wants a staging environment, A/B test branch, or a sandbox to try changes without touching live traffic.\nAFTER — voiceflow_environment.update_traffic_split if you want to send some live traffic to the new environment.\nDO NOT — Clone Main when Main has unpublished draft changes you don't want carried over. Publish Main first or work off the live version."
          },
          "cli": {
            "command": "environment clone"
          }
        },
        "x-speakeasy-group": "environment",
        "x-speakeasy-name-override": "clone",
        "summary": "Clone environment",
        "description": "Copies an environment into a new one under an alias you choose, giving somewhere to change the agent without touching the environment being cloned.",
        "parameters": [
          {
            "name": "environmentAlias",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The alias of the environment to operate on (e.g. `main`)."
            },
            "description": "The alias of the environment to operate on (e.g. `main`)."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableEnvironmentCloneRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Returns the new environment, including the alias that subsequent calls pass as environmentAlias to target it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableEnvironmentResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the new environment, including the alias that subsequent calls pass as environmentAlias to target it."
            }
          }
        },
        "tags": [
          "Environment"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Copies an environment into a new one under an alias you choose, giving somewhere to change the agent without touching the environment being cloned."
        }
      }
    },
    "/v1/stable/environment/{environmentAlias}/publish": {
      "post": {
        "operationId": "StableEnvironmentController_publish",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_environment",
            "toolDescription": "Manage the versioned copies of a Project — every Project starts with one Main environment and can have up to nine more, each with its own draft + live version. Environments are how Voiceflow ships changes: publish promotes a draft to live within one environment, merge promotes one environment into Main, and traffic-split routes live traffic across them.\nPredecessor: select the project first.\nSuccessor: run a test conversation after a clone, or publish to ship the draft.",
            "operation": "publish",
            "operationDescription": "WHAT — Promote the draft of an environment to its live version, creating a release entry. The new live version starts receiving traffic immediately within that environment.\nUSE WHEN — You've finished editing the draft (prompts, playbooks, functions) and want users on that environment to see the changes.\nBEFORE — voiceflow_conversation to run a smoke test against the draft, voiceflow_evaluation.run on recent transcripts if you have evals defined.\nAFTER — If this isn't Main, consider voiceflow_environment.merge once you're confident.\nDO NOT — Publish to Main on every change — publish to a non-Main environment first, traffic-split a slice of users to it, then merge to Main once confident."
          },
          "cli": {
            "command": "environment publish"
          }
        },
        "x-speakeasy-group": "environment",
        "x-speakeasy-name-override": "publish",
        "summary": "Publish environment",
        "description": "Promotes the environment’s draft to its published version, which is the copy real traffic reaches. The request names the release so it can be told apart in the history.",
        "parameters": [
          {
            "name": "environmentAlias",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The alias of the environment to operate on (e.g. `main`)."
            },
            "description": "The alias of the environment to operate on (e.g. `main`)."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableEnvironmentPublishRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Returns the environment together with the release the publish produced, giving the release name, its description, when it was created, and the ID of the backup that snapshots the environment at that release.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableEnvironmentPublishResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the environment together with the release the publish produced, giving the release name, its description, when it was created, and the ID of the backup that snapshots the environment at that release."
            }
          }
        },
        "tags": [
          "Environment"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Promotes the environment’s draft to its published version, which is the copy real traffic reaches. The request names the release so it can be told apart in the history."
        }
      }
    },
    "/v1/stable/variable": {
      "get": {
        "operationId": "StableVariableController_list",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_variable",
            "toolDescription": "Project-scoped named state slots. Set by Functions (via their declared outputs plus the output-capture wiring on a tool attachment), the Initialization Workflow, Set steps inside Workflows, runtime state updates, or variable updates in a test session. Read by prompts (literal name substitution), Functions (as declared inputs), Code steps, Condition steps, and Knowledge Base filter expressions.\nBuilt-in variables exist for common values — user_id, last_utterance, last_response, last_event, vf_memory, vf_now, vf_user_timezone, sessions, timestamp, locale, platform — don't recreate these manually.\nPredecessor: select the project and environment first.\nSuccessor: declare the matching function variables, or attach the tool — that attachment is where variables get wired to and from tool I/O via its input and output-capture maps.",
            "operation": "list",
            "operationDescription": "WHAT — List all project variables.\nUSE WHEN — Discovering what state slots exist, before creating new ones (avoid duplicates), or auditing wiring."
          },
          "cli": {
            "command": "variable list"
          }
        },
        "x-speakeasy-group": "variable",
        "x-speakeasy-name-override": "list",
        "summary": "List variables",
        "description": "Returns every variable in the project. A variable is a named slot of project state an agent can read and write. The call takes no paging parameters, so one request yields the whole set.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns every variable defined in the project environment, each with its name, description, default value, colour, and whether the platform owns it as a system variable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableVariableListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns every variable defined in the project environment, each with its name, description, default value, colour, and whether the platform owns it as a system variable."
            }
          }
        },
        "tags": [
          "Variable"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns every variable in the project. A variable is a named slot of project state an agent can read and write. The call takes no paging parameters, so one request yields the whole set."
        }
      },
      "post": {
        "operationId": "StableVariableController_create",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_variable",
            "toolDescription": "Project-scoped named state slots. Set by Functions (via their declared outputs plus the output-capture wiring on a tool attachment), the Initialization Workflow, Set steps inside Workflows, runtime state updates, or variable updates in a test session. Read by prompts (literal name substitution), Functions (as declared inputs), Code steps, Condition steps, and Knowledge Base filter expressions.\nBuilt-in variables exist for common values — user_id, last_utterance, last_response, last_event, vf_memory, vf_now, vf_user_timezone, sessions, timestamp, locale, platform — don't recreate these manually.\nPredecessor: select the project and environment first.\nSuccessor: declare the matching function variables, or attach the tool — that attachment is where variables get wired to and from tool I/O via its input and output-capture maps.",
            "operation": "create",
            "operationDescription": "WHAT — Create a new project variable with a name and default value.\nUSE WHEN — A function output needs to land somewhere via captureResponse, a prompt needs to reference state, or a tool's input needs a default.\nDO NOT — Forget to set an explicit default value. Unset variables resolve to 0 (the literal number zero, not empty string) at runtime — this breaks every naive \"if {var} is set\" prompt logic. If the prompt needs to check \"is this set,\" explicitly initialize the variable to \"\" (empty string) at creation, or pre-resolve in a function."
          },
          "cli": {
            "command": "variable create"
          }
        },
        "x-speakeasy-group": "variable",
        "x-speakeasy-name-override": "create",
        "summary": "Create variable",
        "description": "Adds a variable to the project, a named slot of project state an agent can read and write. The response carries the ID that later calls address it by.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableVariableCreateRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Returns the newly created variable in full, including the ID assigned to it and its creation timestamps.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableVariableResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the newly created variable in full, including the ID assigned to it and its creation timestamps."
            }
          }
        },
        "tags": [
          "Variable"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds a variable to the project, a named slot of project state an agent can read and write. The response carries the ID that later calls address it by."
        }
      }
    },
    "/v1/stable/variable/batch": {
      "post": {
        "operationId": "StableVariableController_createMany",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_variable",
            "toolDescription": "Project-scoped named state slots. Set by Functions (via their declared outputs plus the output-capture wiring on a tool attachment), the Initialization Workflow, Set steps inside Workflows, runtime state updates, or variable updates in a test session. Read by prompts (literal name substitution), Functions (as declared inputs), Code steps, Condition steps, and Knowledge Base filter expressions.\nBuilt-in variables exist for common values — user_id, last_utterance, last_response, last_event, vf_memory, vf_now, vf_user_timezone, sessions, timestamp, locale, platform — don't recreate these manually.\nPredecessor: select the project and environment first.\nSuccessor: declare the matching function variables, or attach the tool — that attachment is where variables get wired to and from tool I/O via its input and output-capture maps.",
            "operation": "create_many",
            "operationDescription": "WHAT — Create multiple variables in one call.\nUSE WHEN — Scaffolding a project where many variables are needed at once (customer_name, customer_phone, customer_postal_code, etc.)."
          },
          "cli": {
            "command": "variable create-many"
          }
        },
        "x-speakeasy-group": "variable",
        "x-speakeasy-name-override": "create-many",
        "x-speakeasy-ignore": true,
        "summary": "Create many variables",
        "description": "Adds several variables to the project in one request, each taking the fields the single-create call takes. The response carries the created variables in the same shape the list call returns.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableVariableCreateManyRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Returns the variables the request created, as an array, each carrying the ID assigned to it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableVariableListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the variables the request created, as an array, each carrying the ID assigned to it."
            }
          }
        },
        "tags": [
          "Variable"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds several variables to the project in one request, each taking the fields the single-create call takes. The response carries the created variables in the same shape the list call returns."
        }
      }
    },
    "/v1/stable/variable/{variableID}": {
      "get": {
        "operationId": "StableVariableController_get",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_variable",
            "toolDescription": "Project-scoped named state slots. Set by Functions (via their declared outputs plus the output-capture wiring on a tool attachment), the Initialization Workflow, Set steps inside Workflows, runtime state updates, or variable updates in a test session. Read by prompts (literal name substitution), Functions (as declared inputs), Code steps, Condition steps, and Knowledge Base filter expressions.\nBuilt-in variables exist for common values — user_id, last_utterance, last_response, last_event, vf_memory, vf_now, vf_user_timezone, sessions, timestamp, locale, platform — don't recreate these manually.\nPredecessor: select the project and environment first.\nSuccessor: declare the matching function variables, or attach the tool — that attachment is where variables get wired to and from tool I/O via its input and output-capture maps.",
            "operation": "get",
            "operationDescription": "WHAT — Fetch one variable's full detail including current default.\n  USE WHEN — Before update."
          },
          "cli": {
            "command": "variable get"
          }
        },
        "x-speakeasy-group": "variable",
        "x-speakeasy-name-override": "get",
        "summary": "Get variable",
        "description": "Returns a single variable by ID, with the fields that define it. A variable is a named slot of project state an agent can read and write.",
        "parameters": [
          {
            "name": "variableID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the variable to operate on."
            },
            "description": "The ID of the variable to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns a single variable by ID, carrying its current description, default value, colour, and timestamps.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableVariableResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns a single variable by ID, carrying its current description, default value, colour, and timestamps."
            }
          }
        },
        "tags": [
          "Variable"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns a single variable by ID, with the fields that define it. A variable is a named slot of project state an agent can read and write."
        }
      },
      "patch": {
        "operationId": "StableVariableController_update",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_variable",
            "toolDescription": "Project-scoped named state slots. Set by Functions (via their declared outputs plus the output-capture wiring on a tool attachment), the Initialization Workflow, Set steps inside Workflows, runtime state updates, or variable updates in a test session. Read by prompts (literal name substitution), Functions (as declared inputs), Code steps, Condition steps, and Knowledge Base filter expressions.\nBuilt-in variables exist for common values — user_id, last_utterance, last_response, last_event, vf_memory, vf_now, vf_user_timezone, sessions, timestamp, locale, platform — don't recreate these manually.\nPredecessor: select the project and environment first.\nSuccessor: declare the matching function variables, or attach the tool — that attachment is where variables get wired to and from tool I/O via its input and output-capture maps.",
            "operation": "update",
            "operationDescription": "WHAT — Patch variable metadata.\n  DO NOT — Rename a variable referenced by a voiceflow_tool attachment's captureResponse or inputVariables map, a function's args.inputVars destructuring, or a prompt's {var_name} substitution — the variableID stays stable but every human-readable reference breaks."
          },
          "cli": {
            "command": "variable update"
          }
        },
        "x-speakeasy-group": "variable",
        "x-speakeasy-name-override": "update",
        "summary": "Update variable",
        "description": "Changes an existing variable in place. The response carries only a confirmation message, so refetch the variable to read its new values.",
        "parameters": [
          {
            "name": "variableID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the variable to operate on."
            },
            "description": "The ID of the variable to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/StableVariableUpdateRequest"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confirms the variable was updated. The body is a message rather than the revised variable, so read the variable back to see its new default value or description.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableUpdateResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the variable was updated. The body is a message rather than the revised variable, so read the variable back to see its new default value or description."
            }
          }
        },
        "tags": [
          "Variable"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Changes an existing variable in place. The response carries only a confirmation message, so refetch the variable to read its new values."
        }
      },
      "delete": {
        "operationId": "StableVariableController_delete",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_variable",
            "toolDescription": "Project-scoped named state slots. Set by Functions (via their declared outputs plus the output-capture wiring on a tool attachment), the Initialization Workflow, Set steps inside Workflows, runtime state updates, or variable updates in a test session. Read by prompts (literal name substitution), Functions (as declared inputs), Code steps, Condition steps, and Knowledge Base filter expressions.\nBuilt-in variables exist for common values — user_id, last_utterance, last_response, last_event, vf_memory, vf_now, vf_user_timezone, sessions, timestamp, locale, platform — don't recreate these manually.\nPredecessor: select the project and environment first.\nSuccessor: declare the matching function variables, or attach the tool — that attachment is where variables get wired to and from tool I/O via its input and output-capture maps.",
            "operation": "delete",
            "operationDescription": "WHAT — Remove a variable.\n  DO NOT — Delete a variable referenced by any captureResponse map, defaultValue, or prompt substitution — runtime calls will start silently defaulting to 0 wherever the variable was used."
          },
          "cli": {
            "command": "variable delete"
          }
        },
        "x-speakeasy-group": "variable",
        "x-speakeasy-name-override": "delete",
        "summary": "Delete variable",
        "description": "Deletes a single variable by ID. A variable is a named slot of project state an agent can read and write. The response carries only a confirmation message, so refetch the variables to see what is left.",
        "parameters": [
          {
            "name": "variableID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the variable to operate on."
            },
            "description": "The ID of the variable to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Confirms the variable was deleted. Only a message comes back, so refresh any cached copy of the project's variables.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableDeleteResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the variable was deleted. Only a message comes back, so refresh any cached copy of the project's variables."
            }
          },
          "404": {
            "description": "No variable with that ID exists in the project and environment. A delete that has already succeeded returns this on a second attempt, so the operation is not idempotent - treat a 404 here as \"already gone\" rather than as a failure worth retrying.",
            "x-vf-doc": {
              "description": "No variable with that ID exists in the project and environment. A delete that has already succeeded returns this on a second attempt, so the operation is not idempotent - treat a 404 here as \"already gone\" rather than as a failure worth retrying."
            }
          }
        },
        "tags": [
          "Variable"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Deletes a single variable by ID. A variable is a named slot of project state an agent can read and write. The response carries only a confirmation message, so refetch the variables to see what is left."
        }
      }
    },
    "/v1/stable/api-tool": {
      "get": {
        "operationId": "StableAPIToolController_list",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_api_tool",
            "toolDescription": "Saved outbound HTTP requests — URL, method, headers, query params, body. Use for plain request-and-capture flows (\"call this REST endpoint\"). Reach for a Function instead when you need custom code on top: transforms, parsing, multi-call chains, conditional logic.\nThe API tool's description is LLM-facing — the LLM reads it when deciding whether to call the tool. Write it in WHAT/WHEN format: WHAT the API does AND WHEN the LLM should call it. Skipping the WHEN clause leads to under- or over-use.\nPredecessor: select the project and environment first.\nSuccessor: attach the API tool at agent level, then run a test conversation.",
            "operation": "list",
            "operationDescription": "WHAT — List all API tools in the project.\nUSE WHEN — Discovering existing API tools or finding a toolID to edit."
          },
          "cli": {
            "command": "api-tool list"
          }
        },
        "x-speakeasy-group": "api-tool",
        "x-speakeasy-name-override": "list",
        "summary": "List API tools",
        "description": "Returns every API tool in the environment. An API tool is a saved HTTP request an agent can make. The call takes no paging parameters, so one request yields the whole set.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns every API tool saved in the project's environment, each with its HTTP method, URL, headers, query parameters, body, and the description the agent uses to decide when to call it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAPIToolListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns every API tool saved in the project's environment, each with its HTTP method, URL, headers, query parameters, body, and the description the agent uses to decide when to call it."
            }
          }
        },
        "tags": [
          "API Tool"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns every API tool in the environment. An API tool is a saved HTTP request an agent can make. The call takes no paging parameters, so one request yields the whole set."
        }
      },
      "post": {
        "operationId": "StableAPIToolController_create",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_api_tool",
            "toolDescription": "Saved outbound HTTP requests — URL, method, headers, query params, body. Use for plain request-and-capture flows (\"call this REST endpoint\"). Reach for a Function instead when you need custom code on top: transforms, parsing, multi-call chains, conditional logic.\nThe API tool's description is LLM-facing — the LLM reads it when deciding whether to call the tool. Write it in WHAT/WHEN format: WHAT the API does AND WHEN the LLM should call it. Skipping the WHEN clause leads to under- or over-use.\nPredecessor: select the project and environment first.\nSuccessor: attach the API tool at agent level, then run a test conversation.",
            "operation": "create",
            "operationDescription": "WHAT — Create a new API tool with name, description (WHAT/WHEN format — LLM-routing field), method, URL, headers, body, and declared input variables.\nUSE WHEN — User gives a REST endpoint to call.\nDO NOT — Write the description as pure WHAT. The LLM uses this text to decide whether to call the API — it must include WHEN (the user signals or data conditions that should trigger the call). Also: literal text (hostnames, paths, static params) is fine in url/headers/body — but don't write a project variable or secret ID reference there, and don't hardcode credentials. Those fields resolve against THIS tool's own declared input variables only; any other reference resolves to empty at runtime and the request still fires. Declare an input variable (voiceflow_api_tool.create_variable), reference that, then bind the real value as the input's defaultValue on each attachment via voiceflow_tool."
          },
          "cli": {
            "command": "api-tool create"
          }
        },
        "x-speakeasy-group": "api-tool",
        "x-speakeasy-name-override": "create",
        "summary": "Create API tool",
        "description": "Adds a API tool to the environment, a saved HTTP request an agent can make. The response carries the ID that later calls address it by.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAPIToolCreateRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Creates the API tool and returns it in full, including its new ID and the request it will send: HTTP method, URL, headers, query parameters, and body.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAPIToolResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Creates the API tool and returns it in full, including its new ID and the request it will send: HTTP method, URL, headers, query parameters, and body."
            }
          }
        },
        "tags": [
          "API Tool"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds a API tool to the environment, a saved HTTP request an agent can make. The response carries the ID that later calls address it by."
        }
      }
    },
    "/v1/stable/api-tool/batch": {
      "post": {
        "operationId": "StableAPIToolController_createMany",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_api_tool",
            "toolDescription": "Saved outbound HTTP requests — URL, method, headers, query params, body. Use for plain request-and-capture flows (\"call this REST endpoint\"). Reach for a Function instead when you need custom code on top: transforms, parsing, multi-call chains, conditional logic.\nThe API tool's description is LLM-facing — the LLM reads it when deciding whether to call the tool. Write it in WHAT/WHEN format: WHAT the API does AND WHEN the LLM should call it. Skipping the WHEN clause leads to under- or over-use.\nPredecessor: select the project and environment first.\nSuccessor: attach the API tool at agent level, then run a test conversation.",
            "operation": "create_many",
            "operationDescription": "WHAT — Create multiple API tools in one call.\nUSE WHEN — Mass-importing endpoints from a service spec."
          },
          "cli": {
            "command": "api-tool create-many"
          }
        },
        "x-speakeasy-group": "api-tool",
        "x-speakeasy-name-override": "create-many",
        "x-speakeasy-ignore": true,
        "summary": "Create many API tools",
        "description": "Adds several API tools to the environment in one request, each taking the fields the single-create call takes. The response carries the created API tools in the same shape the list call returns.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAPIToolCreateManyRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Creates every API tool in the request and returns them all, each with its own ID and complete saved request definition.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAPIToolListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Creates every API tool in the request and returns them all, each with its own ID and complete saved request definition."
            }
          }
        },
        "tags": [
          "API Tool"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds several API tools to the environment in one request, each taking the fields the single-create call takes. The response carries the created API tools in the same shape the list call returns."
        }
      }
    },
    "/v1/stable/api-tool/{toolID}": {
      "get": {
        "operationId": "StableAPIToolController_get",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_api_tool",
            "toolDescription": "Saved outbound HTTP requests — URL, method, headers, query params, body. Use for plain request-and-capture flows (\"call this REST endpoint\"). Reach for a Function instead when you need custom code on top: transforms, parsing, multi-call chains, conditional logic.\nThe API tool's description is LLM-facing — the LLM reads it when deciding whether to call the tool. Write it in WHAT/WHEN format: WHAT the API does AND WHEN the LLM should call it. Skipping the WHEN clause leads to under- or over-use.\nPredecessor: select the project and environment first.\nSuccessor: attach the API tool at agent level, then run a test conversation.",
            "operation": "get",
            "operationDescription": "WHAT — Fetch one API tool's full config: method, URL, headers, body, declared input variables.\nUSE WHEN — Before editing or wiring."
          },
          "cli": {
            "command": "api-tool get"
          }
        },
        "x-speakeasy-group": "api-tool",
        "x-speakeasy-name-override": "get",
        "summary": "Get API tool",
        "description": "Returns a single API tool by ID, with the fields that define it. An API tool is a saved HTTP request an agent can make.",
        "parameters": [
          {
            "name": "toolID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the tool to operate on."
            },
            "description": "The ID of the tool to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns a single API tool, with the complete request it sends: HTTP method, URL, headers, query parameters, and body, plus any settings saved on it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAPIToolResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns a single API tool, with the complete request it sends: HTTP method, URL, headers, query parameters, and body, plus any settings saved on it."
            }
          }
        },
        "tags": [
          "API Tool"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns a single API tool by ID, with the fields that define it. An API tool is a saved HTTP request an agent can make."
        }
      },
      "patch": {
        "operationId": "StableAPIToolController_update",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_api_tool",
            "toolDescription": "Saved outbound HTTP requests — URL, method, headers, query params, body. Use for plain request-and-capture flows (\"call this REST endpoint\"). Reach for a Function instead when you need custom code on top: transforms, parsing, multi-call chains, conditional logic.\nThe API tool's description is LLM-facing — the LLM reads it when deciding whether to call the tool. Write it in WHAT/WHEN format: WHAT the API does AND WHEN the LLM should call it. Skipping the WHEN clause leads to under- or over-use.\nPredecessor: select the project and environment first.\nSuccessor: attach the API tool at agent level, then run a test conversation.",
            "operation": "update",
            "operationDescription": "WHAT — Patch an API tool's config. Partial PATCH.\nBEFORE — voiceflow_api_tool.get to see current config.\nAFTER — voiceflow_environment.compile, then voiceflow_conversation.\nDO NOT — Reference a project variable or a secret ID from url, headers or body. Those fields resolve against this tool's own declared input variables only; anything else resolves to empty at runtime. Bind secrets as an input's defaultValue on the tool attachment (voiceflow_tool) instead."
          },
          "cli": {
            "command": "api-tool update"
          }
        },
        "x-speakeasy-group": "api-tool",
        "x-speakeasy-name-override": "update",
        "summary": "Update API tool",
        "description": "Changes an existing API tool in place. The response carries only a confirmation message, so refetch the API tool to read its new values.",
        "parameters": [
          {
            "name": "toolID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the tool to operate on."
            },
            "description": "The ID of the tool to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/StableAPIToolUpdateRequest"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confirms the API tool was updated. The response carries a message only, not the revised tool, so fetch the API tool again to read back the request it now sends.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableUpdateResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the API tool was updated. The response carries a message only, not the revised tool, so fetch the API tool again to read back the request it now sends."
            }
          }
        },
        "tags": [
          "API Tool"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Changes an existing API tool in place. The response carries only a confirmation message, so refetch the API tool to read its new values."
        }
      },
      "delete": {
        "operationId": "StableAPIToolController_delete",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_api_tool",
            "toolDescription": "Saved outbound HTTP requests — URL, method, headers, query params, body. Use for plain request-and-capture flows (\"call this REST endpoint\"). Reach for a Function instead when you need custom code on top: transforms, parsing, multi-call chains, conditional logic.\nThe API tool's description is LLM-facing — the LLM reads it when deciding whether to call the tool. Write it in WHAT/WHEN format: WHAT the API does AND WHEN the LLM should call it. Skipping the WHEN clause leads to under- or over-use.\nPredecessor: select the project and environment first.\nSuccessor: attach the API tool at agent level, then run a test conversation.",
            "operation": "delete",
            "operationDescription": "WHAT — Remove an API tool.\nBEFORE — voiceflow_tool.list to confirm nothing currently attaches it."
          },
          "cli": {
            "command": "api-tool delete"
          }
        },
        "x-speakeasy-group": "api-tool",
        "x-speakeasy-name-override": "delete",
        "summary": "Delete API tool",
        "description": "Deletes a single API tool by ID. An API tool is a saved HTTP request an agent can make. The response carries only a confirmation message, so refetch the API tools to see what is left.",
        "parameters": [
          {
            "name": "toolID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the tool to operate on."
            },
            "description": "The ID of the tool to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Confirms the API tool was deleted. Only a confirmation message comes back, so refetch the project's API tools to see what remains.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableDeleteResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the API tool was deleted. Only a confirmation message comes back, so refetch the project's API tools to see what remains."
            }
          }
        },
        "tags": [
          "API Tool"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Deletes a single API tool by ID. An API tool is a saved HTTP request an agent can make. The response carries only a confirmation message, so refetch the API tools to see what is left."
        }
      }
    },
    "/v1/stable/api-tool-variable": {
      "get": {
        "operationId": "StableAPIToolVariableController_list",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_api_tool",
            "toolDescription": "Saved outbound HTTP requests — URL, method, headers, query params, body. Use for plain request-and-capture flows (\"call this REST endpoint\"). Reach for a Function instead when you need custom code on top: transforms, parsing, multi-call chains, conditional logic.\nThe API tool's description is LLM-facing — the LLM reads it when deciding whether to call the tool. Write it in WHAT/WHEN format: WHAT the API does AND WHEN the LLM should call it. Skipping the WHEN clause leads to under- or over-use.\nPredecessor: select the project and environment first.\nSuccessor: attach the API tool at agent level, then run a test conversation.",
            "operation": "list_variables",
            "operationDescription": "WHAT — List the input variables declared on an API tool (path params, query params, body fields, auth headers as placeholders)."
          },
          "cli": {
            "command": "api-tool variable list"
          }
        },
        "x-speakeasy-group": "api-tool.variable",
        "x-speakeasy-name-override": "list",
        "summary": "List variables",
        "description": "Returns every API tool variable in its API tool. An API tool variable is an input an API tool substitutes into its request. The call takes no paging parameters, so one request yields the whole set.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          },
          {
            "name": "apiToolID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the API tool whose variables to list."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns every variable defined on a single API tool, selected by the apiToolID query parameter rather than across the whole project. Each carries the name the tool's request references and a description telling the agent what value to provide.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAPIToolVariableListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns every variable defined on a single API tool, selected by the apiToolID query parameter rather than across the whole project. Each carries the name the tool's request references and a description telling the agent what value to provide."
            }
          }
        },
        "tags": [
          "API Tool Variable"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns every API tool variable in its API tool. An API tool variable is an input an API tool substitutes into its request. The call takes no paging parameters, so one request yields the whole set."
        }
      },
      "post": {
        "operationId": "StableAPIToolVariableController_create",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_api_tool",
            "toolDescription": "Saved outbound HTTP requests — URL, method, headers, query params, body. Use for plain request-and-capture flows (\"call this REST endpoint\"). Reach for a Function instead when you need custom code on top: transforms, parsing, multi-call chains, conditional logic.\nThe API tool's description is LLM-facing — the LLM reads it when deciding whether to call the tool. Write it in WHAT/WHEN format: WHAT the API does AND WHEN the LLM should call it. Skipping the WHEN clause leads to under- or over-use.\nPredecessor: select the project and environment first.\nSuccessor: attach the API tool at agent level, then run a test conversation.",
            "operation": "create_variable",
            "operationDescription": "WHAT — Declare a new input variable on an API tool.\nUSE WHEN — The API needs a new placeholder — path param, query param, body field, header value."
          },
          "cli": {
            "command": "api-tool variable create"
          }
        },
        "x-speakeasy-group": "api-tool.variable",
        "x-speakeasy-name-override": "create",
        "summary": "Create variable",
        "description": "Adds a API tool variable to its API tool, an input an API tool substitutes into its request. The response carries the ID that later calls address it by.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAPIToolVariableCreateRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Creates the API tool variable and returns it, including its new ID and the apiToolID of the API tool it now belongs to.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAPIToolVariableResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Creates the API tool variable and returns it, including its new ID and the apiToolID of the API tool it now belongs to."
            }
          }
        },
        "tags": [
          "API Tool Variable"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds a API tool variable to its API tool, an input an API tool substitutes into its request. The response carries the ID that later calls address it by."
        }
      }
    },
    "/v1/stable/api-tool-variable/batch": {
      "post": {
        "operationId": "StableAPIToolVariableController_createMany",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_api_tool",
            "toolDescription": "Saved outbound HTTP requests — URL, method, headers, query params, body. Use for plain request-and-capture flows (\"call this REST endpoint\"). Reach for a Function instead when you need custom code on top: transforms, parsing, multi-call chains, conditional logic.\nThe API tool's description is LLM-facing — the LLM reads it when deciding whether to call the tool. Write it in WHAT/WHEN format: WHAT the API does AND WHEN the LLM should call it. Skipping the WHEN clause leads to under- or over-use.\nPredecessor: select the project and environment first.\nSuccessor: attach the API tool at agent level, then run a test conversation.",
            "operation": "create_many_variables",
            "operationDescription": "WHAT — Declare multiple input variables in one call."
          },
          "cli": {
            "command": "api-tool variable create-many"
          }
        },
        "x-speakeasy-group": "api-tool.variable",
        "x-speakeasy-name-override": "create-many",
        "x-speakeasy-ignore": true,
        "summary": "Create many variables",
        "description": "Adds several API tool variables to its API tool in one request, each taking the fields the single-create call takes. The response carries the created API tool variables in the same shape the list call returns.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAPIToolVariableCreateManyRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Returns the newly created API tool variables, each with its own ID and the apiToolID of the API tool it was attached to.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAPIToolVariableListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the newly created API tool variables, each with its own ID and the apiToolID of the API tool it was attached to."
            }
          }
        },
        "tags": [
          "API Tool Variable"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds several API tool variables to its API tool in one request, each taking the fields the single-create call takes. The response carries the created API tool variables in the same shape the list call returns."
        }
      }
    },
    "/v1/stable/api-tool-variable/{variableID}": {
      "get": {
        "operationId": "StableAPIToolVariableController_get",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_api_tool",
            "toolDescription": "Saved outbound HTTP requests — URL, method, headers, query params, body. Use for plain request-and-capture flows (\"call this REST endpoint\"). Reach for a Function instead when you need custom code on top: transforms, parsing, multi-call chains, conditional logic.\nThe API tool's description is LLM-facing — the LLM reads it when deciding whether to call the tool. Write it in WHAT/WHEN format: WHAT the API does AND WHEN the LLM should call it. Skipping the WHEN clause leads to under- or over-use.\nPredecessor: select the project and environment first.\nSuccessor: attach the API tool at agent level, then run a test conversation.",
            "operation": "get_variable",
            "operationDescription": "WHAT — Fetch a single input variable's detail."
          },
          "cli": {
            "command": "api-tool variable get"
          }
        },
        "x-speakeasy-group": "api-tool.variable",
        "x-speakeasy-name-override": "get",
        "summary": "Get variable",
        "description": "Returns a single API tool variable by ID, with the fields that define it. An API tool variable is an input an API tool substitutes into its request.",
        "parameters": [
          {
            "name": "variableID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the variable to operate on."
            },
            "description": "The ID of the variable to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns a single API tool variable, with the name its tool's request references, the description that tells the agent what value to supply, and the ID of the API tool that owns it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAPIToolVariableResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns a single API tool variable, with the name its tool's request references, the description that tells the agent what value to supply, and the ID of the API tool that owns it."
            }
          }
        },
        "tags": [
          "API Tool Variable"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns a single API tool variable by ID, with the fields that define it. An API tool variable is an input an API tool substitutes into its request."
        }
      },
      "patch": {
        "operationId": "StableAPIToolVariableController_update",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_api_tool",
            "toolDescription": "Saved outbound HTTP requests — URL, method, headers, query params, body. Use for plain request-and-capture flows (\"call this REST endpoint\"). Reach for a Function instead when you need custom code on top: transforms, parsing, multi-call chains, conditional logic.\nThe API tool's description is LLM-facing — the LLM reads it when deciding whether to call the tool. Write it in WHAT/WHEN format: WHAT the API does AND WHEN the LLM should call it. Skipping the WHEN clause leads to under- or over-use.\nPredecessor: select the project and environment first.\nSuccessor: attach the API tool at agent level, then run a test conversation.",
            "operation": "update_variable",
            "operationDescription": "WHAT — Modify an input variable's name or description."
          },
          "cli": {
            "command": "api-tool variable update"
          }
        },
        "x-speakeasy-group": "api-tool.variable",
        "x-speakeasy-name-override": "update",
        "summary": "Update variable",
        "description": "Changes an existing API tool variable in place. The response carries only a confirmation message, so refetch the API tool variable to read its new values.",
        "parameters": [
          {
            "name": "variableID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the variable to operate on."
            },
            "description": "The ID of the variable to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/StableAPIToolVariableUpdateRequest"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confirms the API tool variable was updated. The body is a confirmation rather than the updated variable, so fetch the variable again to see its current name and description.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableUpdateResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the API tool variable was updated. The body is a confirmation rather than the updated variable, so fetch the variable again to see its current name and description."
            }
          }
        },
        "tags": [
          "API Tool Variable"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Changes an existing API tool variable in place. The response carries only a confirmation message, so refetch the API tool variable to read its new values."
        }
      },
      "delete": {
        "operationId": "StableAPIToolVariableController_delete",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_api_tool",
            "toolDescription": "Saved outbound HTTP requests — URL, method, headers, query params, body. Use for plain request-and-capture flows (\"call this REST endpoint\"). Reach for a Function instead when you need custom code on top: transforms, parsing, multi-call chains, conditional logic.\nThe API tool's description is LLM-facing — the LLM reads it when deciding whether to call the tool. Write it in WHAT/WHEN format: WHAT the API does AND WHEN the LLM should call it. Skipping the WHEN clause leads to under- or over-use.\nPredecessor: select the project and environment first.\nSuccessor: attach the API tool at agent level, then run a test conversation.",
            "operation": "delete_variable",
            "operationDescription": "WHAT — Remove an input variable.\nDO NOT — Delete a variable referenced by a voiceflow_tool attachment without cleaning the binding up first."
          },
          "cli": {
            "command": "api-tool variable delete"
          }
        },
        "x-speakeasy-group": "api-tool.variable",
        "x-speakeasy-name-override": "delete",
        "summary": "Delete variable",
        "description": "Deletes a single API tool variable by ID. An API tool variable is an input an API tool substitutes into its request. The response carries only a confirmation message, so refetch the API tool variables to see what is left.",
        "parameters": [
          {
            "name": "variableID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the variable to operate on."
            },
            "description": "The ID of the variable to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Confirms the API tool variable was deleted. Nothing but a message is returned, so refetch the tool's variables to see which names its request can still reference.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableDeleteResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the API tool variable was deleted. Nothing but a message is returned, so refetch the tool's variables to see which names its request can still reference."
            }
          }
        },
        "tags": [
          "API Tool Variable"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Deletes a single API tool variable by ID. An API tool variable is an input an API tool substitutes into its request. The response carries only a confirmation message, so refetch the API tool variables to see what is left."
        }
      }
    },
    "/v1/stable/transcript/search": {
      "post": {
        "operationId": "StableTranscriptController_search",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_transcript",
            "toolDescription": "Read and search post-hoc transcripts of live conversations. Searchable by date range, tags, custom transcript properties, and evaluation results. The transcript surface is the heart of the iterate loop — it's where you see what actually happened so you can fix the build.\nPredecessor: read the project first.\nSuccessor: run evaluations on the selected transcripts; or head back to the build surfaces (playbooks, functions, and so on) once root cause is identified.",
            "operation": "search",
            "operationDescription": "WHAT — Search transcripts by date range, tags, property values, or evaluation results.\nUSE WHEN — Finding transcripts to investigate or evaluate — \"all transcripts from yesterday where the Schedule playbook was active and CSAT was poor.\""
          },
          "cli": {
            "command": "transcript search"
          }
        },
        "x-speakeasy-group": "transcript",
        "x-speakeasy-name-override": "search",
        "summary": "Search transcripts",
        "description": "Finds recorded conversations matching a filter. Unlike the list calls elsewhere in this API, the body takes `take` and `skip`, so results arrive a page at a time.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableTranscriptSearchRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns the transcripts matching the search, each with its session and user IDs, timestamps, recording URL, and any properties and evaluation results attached to it. The conversation logs are not included.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableTranscriptListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the transcripts matching the search, each with its session and user IDs, timestamps, recording URL, and any properties and evaluation results attached to it. The conversation logs are not included."
            }
          }
        },
        "tags": [
          "Transcript"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Finds recorded conversations matching a filter. Unlike the list calls elsewhere in this API, the body takes `take` and `skip`, so results arrive a page at a time."
        }
      }
    },
    "/v1/stable/transcript/{transcriptID}": {
      "get": {
        "operationId": "StableTranscriptController_get",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_transcript",
            "toolDescription": "Read and search post-hoc transcripts of live conversations. Searchable by date range, tags, custom transcript properties, and evaluation results. The transcript surface is the heart of the iterate loop — it's where you see what actually happened so you can fix the build.\nPredecessor: read the project first.\nSuccessor: run evaluations on the selected transcripts; or head back to the build surfaces (playbooks, functions, and so on) once root cause is identified.",
            "operation": "get",
            "operationDescription": "WHAT — Fetch a single transcript.\nUSE WHEN — Diving into a specific failing conversation."
          },
          "cli": {
            "command": "transcript get"
          }
        },
        "x-speakeasy-group": "transcript",
        "x-speakeasy-name-override": "get",
        "summary": "Get transcript",
        "description": "Returns one recorded conversation, including the turns exchanged and the traces behind them. Set `filterConversation` to keep only `text`, `speak`, and `live-agent-handoff` traces, plus any types listed in `customTraceTypes`.",
        "parameters": [
          {
            "name": "transcriptID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the transcript to operate on."
            },
            "description": "The ID of the transcript to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "filterConversation",
            "required": false,
            "in": "query",
            "schema": {
              "description": "When enabled, only `text`, `speak` and `live-agent-handoff` traces will be returned.",
              "type": "boolean"
            },
            "x-vf-doc": {
              "description": "When `true`, only `text`, `speak`, and `live-agent-handoff` traces are returned. Omit it or set `false` to return the full log."
            },
            "description": "When `true`, only `text`, `speak`, and `live-agent-handoff` traces are returned. Omit it or set `false` to return the full log."
          },
          {
            "name": "customTraceTypes",
            "required": false,
            "in": "query",
            "schema": {
              "description": "Additional trace types to return when `filterConversation` is enabled.",
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ]
            },
            "x-vf-doc": {
              "description": "Extra trace types to keep when `filterConversation` is `true`. Ignored when the filter is off. Accepts one type or an array."
            },
            "description": "Extra trace types to keep when `filterConversation` is `true`. Ignored when the filter is off. Accepts one type or an array."
          }
        ],
        "responses": {
          "200": {
            "description": "Returns a single transcript along with its logs, which the search operation leaves out, plus its properties, evaluation results, and recording URL.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableTranscriptWithLogsResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns a single transcript along with its logs, which the search operation leaves out, plus its properties, evaluation results, and recording URL."
            }
          }
        },
        "tags": [
          "Transcript"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns one recorded conversation, including the turns exchanged and the traces behind them. Set `filterConversation` to keep only `text`, `speak`, and `live-agent-handoff` traces, plus any types listed in `customTraceTypes`."
        }
      }
    },
    "/v1/stable/transcript/{transcriptID}/files": {
      "get": {
        "operationId": "StableTranscriptController_files",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_transcript",
            "toolDescription": "Read and search post-hoc transcripts of live conversations. Searchable by date range, tags, custom transcript properties, and evaluation results. The transcript surface is the heart of the iterate loop — it's where you see what actually happened so you can fix the build.\nPredecessor: read the project first.\nSuccessor: run evaluations on the selected transcripts; or head back to the build surfaces (playbooks, functions, and so on) once root cause is identified.",
            "operation": "files",
            "operationDescription": "WHAT — List the files an end user attached during a transcript's conversation, each with a presigned download URL.\nUSE WHEN — You need the actual attachments (images, PDFs, and so on) from a conversation, not just its text logs."
          },
          "cli": {
            "command": "transcript files"
          }
        },
        "x-speakeasy-group": "transcript",
        "x-speakeasy-name-override": "files",
        "summary": "List transcript files",
        "description": "Returns the files attached to one transcript that Voiceflow stores, each with a presigned download URL; files referenced only by an external URL are left out. The call is unpaginated: it takes no paging parameters, so one request yields the whole set.",
        "parameters": [
          {
            "name": "transcriptID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the transcript to operate on."
            },
            "description": "The ID of the transcript to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the transcript's stored files, each with a stable ID, MIME type, original filename and size when recorded, a presigned GET URL, and the timestamp after which that URL stops working.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableTranscriptFilesResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the transcript's stored files, each with a stable ID, MIME type, original filename and size when recorded, a presigned GET URL, and the timestamp after which that URL stops working."
            }
          }
        },
        "tags": [
          "Transcript"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns the files attached to one transcript that Voiceflow stores, each with a presigned download URL; files referenced only by an external URL are left out. The call is unpaginated: it takes no paging parameters, so one request yields the whole set."
        }
      }
    },
    "/v1/stable/transcript-property": {
      "get": {
        "operationId": "StableTranscriptPropertyController_list",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_transcript_property",
            "toolDescription": "Typed metadata fields attached to transcripts for post-hoc tagging and analysis. NOT runtime variables — the agent cannot read these mid-conversation. Used in transcript search filters and analytics dashboards.\nPredecessor: read the project and environment first.\nSuccessor: search transcripts, filtering by property values to find the tagged ones.",
            "operation": "list",
            "operationDescription": "WHAT — List all transcript property definitions in the project.\nUSE WHEN — Before creating new properties (avoid duplicates), or finding a property to set values on."
          },
          "cli": {
            "command": "transcript property list"
          }
        },
        "x-speakeasy-group": "transcript.property",
        "x-speakeasy-name-override": "list",
        "summary": "List properties",
        "description": "Returns every transcript property in the project. A transcript property is a label you define once and then set on individual conversations. The call takes no paging parameters, so one request yields the whole set.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns every transcript property defined on the project, each with its name, the type of value it holds, and whether it is built in. Built-in properties cannot be updated, deleted, or have a value set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableTranscriptPropertyListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns every transcript property defined on the project, each with its name, the type of value it holds, and whether it is built in. Built-in properties cannot be updated, deleted, or have a value set."
            }
          }
        },
        "tags": [
          "Transcript Property"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns every transcript property in the project. A transcript property is a label you define once and then set on individual conversations. The call takes no paging parameters, so one request yields the whole set."
        }
      },
      "post": {
        "operationId": "StableTranscriptPropertyController_create",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_transcript_property",
            "toolDescription": "Typed metadata fields attached to transcripts for post-hoc tagging and analysis. NOT runtime variables — the agent cannot read these mid-conversation. Used in transcript search filters and analytics dashboards.\nPredecessor: read the project and environment first.\nSuccessor: search transcripts, filtering by property values to find the tagged ones.",
            "operation": "create",
            "operationDescription": "WHAT — Define a new transcript property with name and type (boolean | number | string).\nUSE WHEN — Adding a new dimension to tag transcripts by — root_cause, escalation_reason, csat_self_report, etc.\nDO NOT — Use a property as a runtime variable. Properties are post-hoc tags only; the agent cannot read them mid-conversation. Use voiceflow_variable for runtime state."
          },
          "cli": {
            "command": "transcript property create"
          }
        },
        "x-speakeasy-group": "transcript.property",
        "x-speakeasy-name-override": "create",
        "summary": "Create property",
        "description": "Adds a transcript property to the project, a label you define once and then set on individual conversations. The response carries the ID that later calls address it by.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableTranscriptPropertyCreateRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Creates the property and returns it with its generated ID, the value type it holds, and the project it belongs to. The property is now defined on the project but is not yet set on any transcript.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableTranscriptPropertyResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Creates the property and returns it with its generated ID, the value type it holds, and the project it belongs to. The property is now defined on the project but is not yet set on any transcript."
            }
          }
        },
        "tags": [
          "Transcript Property"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds a transcript property to the project, a label you define once and then set on individual conversations. The response carries the ID that later calls address it by."
        }
      }
    },
    "/v1/stable/transcript-property/{propertyID}": {
      "get": {
        "operationId": "StableTranscriptPropertyController_get",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_transcript_property",
            "toolDescription": "Typed metadata fields attached to transcripts for post-hoc tagging and analysis. NOT runtime variables — the agent cannot read these mid-conversation. Used in transcript search filters and analytics dashboards.\nPredecessor: read the project and environment first.\nSuccessor: search transcripts, filtering by property values to find the tagged ones.",
            "operation": "get",
            "operationDescription": "WHAT — Fetch one property by ID.\nUSE WHEN — Confirming a property's type before calling voiceflow_transcript_property.set_value, or checking whether it's a default property before attempting update/delete."
          },
          "cli": {
            "command": "transcript property get"
          }
        },
        "x-speakeasy-group": "transcript.property",
        "x-speakeasy-name-override": "get",
        "summary": "Get property",
        "description": "Returns a single transcript property by ID, with the fields that define it. A transcript property is a label you define once and then set on individual conversations.",
        "parameters": [
          {
            "name": "propertyID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the transcript property to operate on."
            },
            "description": "The ID of the transcript property to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns a single transcript property with its name, value type, owning project, and creation and update timestamps.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableTranscriptPropertyResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns a single transcript property with its name, value type, owning project, and creation and update timestamps."
            }
          }
        },
        "tags": [
          "Transcript Property"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns a single transcript property by ID, with the fields that define it. A transcript property is a label you define once and then set on individual conversations."
        }
      },
      "patch": {
        "operationId": "StableTranscriptPropertyController_update",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_transcript_property",
            "toolDescription": "Typed metadata fields attached to transcripts for post-hoc tagging and analysis. NOT runtime variables — the agent cannot read these mid-conversation. Used in transcript search filters and analytics dashboards.\nPredecessor: read the project and environment first.\nSuccessor: search transcripts, filtering by property values to find the tagged ones.",
            "operation": "update",
            "operationDescription": "WHAT — Rename a property.\nDO NOT — Attempt this on a default property — it will fail. Default properties (created by Voiceflow, not the user) are read-only; check the default flag via voiceflow_transcript_property.get first."
          },
          "cli": {
            "command": "transcript property update"
          }
        },
        "x-speakeasy-group": "transcript.property",
        "x-speakeasy-name-override": "update",
        "summary": "Update property",
        "description": "Changes an existing transcript property in place. The response carries only a confirmation message, so refetch the transcript property to read its new values.",
        "parameters": [
          {
            "name": "propertyID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the transcript property to operate on."
            },
            "description": "The ID of the transcript property to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/StableTranscriptPropertyUpdateRequest"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confirms the property was renamed. The body is a message rather than the updated property, so refetch the property to read its new name.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableUpdateResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the property was renamed. The body is a message rather than the updated property, so refetch the property to read its new name."
            }
          }
        },
        "tags": [
          "Transcript Property"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Changes an existing transcript property in place. The response carries only a confirmation message, so refetch the transcript property to read its new values."
        }
      },
      "delete": {
        "operationId": "StableTranscriptPropertyController_delete",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_transcript_property",
            "toolDescription": "Typed metadata fields attached to transcripts for post-hoc tagging and analysis. NOT runtime variables — the agent cannot read these mid-conversation. Used in transcript search filters and analytics dashboards.\nPredecessor: read the project and environment first.\nSuccessor: search transcripts, filtering by property values to find the tagged ones.",
            "operation": "delete",
            "operationDescription": "WHAT — Permanently remove a property definition and its recorded values across all transcripts.\nDO NOT — Attempt this on a default property — it will fail. Default properties (created by Voiceflow, not the user) are read-only; check the default flag via voiceflow_transcript_property.get first."
          },
          "cli": {
            "command": "transcript property delete"
          }
        },
        "x-speakeasy-group": "transcript.property",
        "x-speakeasy-name-override": "delete",
        "summary": "Delete property",
        "description": "Deletes a single transcript property by ID. A transcript property is a label you define once and then set on individual conversations. The response carries only a confirmation message, so refetch the transcript properties to see what is left.",
        "parameters": [
          {
            "name": "propertyID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the transcript property to operate on."
            },
            "description": "The ID of the transcript property to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Confirms the transcript property was deleted. The body is a message only, so refetch the project's properties to see which ones remain available to filter on.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableDeleteResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the transcript property was deleted. The body is a message only, so refetch the project's properties to see which ones remain available to filter on."
            }
          }
        },
        "tags": [
          "Transcript Property"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Deletes a single transcript property by ID. A transcript property is a label you define once and then set on individual conversations. The response carries only a confirmation message, so refetch the transcript properties to see what is left."
        }
      }
    },
    "/v1/stable/transcript-property/{propertyID}/value": {
      "put": {
        "operationId": "StableTranscriptPropertyController_setValue",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_transcript_property",
            "toolDescription": "Typed metadata fields attached to transcripts for post-hoc tagging and analysis. NOT runtime variables — the agent cannot read these mid-conversation. Used in transcript search filters and analytics dashboards.\nPredecessor: read the project and environment first.\nSuccessor: search transcripts, filtering by property values to find the tagged ones.",
            "operation": "set_value",
            "operationDescription": "WHAT — Set a property value on a specific transcript.\nUSE WHEN — Tagging a transcript with a diagnosis (e.g. root_cause = \"missing captureResponse\") so future filtered searches can find it; or recording user-reported metrics post-hoc.\nDO NOT — Expect the agent to read the value back mid-conversation — properties are read-only to the runtime."
          },
          "cli": {
            "command": "transcript property set-value"
          }
        },
        "x-speakeasy-group": "transcript.property",
        "x-speakeasy-name-override": "set-value",
        "summary": "Set property value",
        "description": "Sets a property’s value on one conversation. Defining the property and setting it are separate calls, so the definition is reused across every transcript that carries it.",
        "parameters": [
          {
            "name": "propertyID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the transcript property to operate on."
            },
            "description": "The ID of the transcript property to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableTranscriptPropertySetValueRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confirms the value was set on the transcript named in the request body. The body is a message only, so read the transcript back to see the stored value.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableUpdateResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the value was set on the transcript named in the request body. The body is a message only, so read the transcript back to see the stored value."
            }
          }
        },
        "tags": [
          "Transcript Property"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Sets a property’s value on one conversation. Defining the property and setting it are separate calls, so the definition is reused across every transcript that carries it."
        }
      }
    },
    "/v1/stable/function": {
      "get": {
        "operationId": "StableFunctionController_list",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_function",
            "toolDescription": "Custom JavaScript code that runs as an agent tool. Sandboxed ES6 V8 runtime: no require/import, no timers, modified fetch API. Functions can also emit traces (text for chat, speak/audio for voice, cardV2/carousel/choice for visual). When the user gives you a plain REST endpoint, prefer an API tool; reach for a Function when you need transforms, parsing, multi-call chains, or conditional logic on responses.\nThe function's description is LLM-facing — the LLM reads it when deciding whether to call the function. Write it in WHAT/WHEN format: WHAT the function does AND WHEN the LLM should call it. A pure WHAT (\"Looks up postal code\") routes badly; the WHEN (\"Use when the user provides a postal code or asks to verify service availability for their address\") is what gives the LLM the signal to pick correctly.\nPredecessor: select the project and environment first; create any project variables the function reads or writes.\nSuccessor: attach the function at agent level, recompile the environment, then run a test conversation to verify the function's declared outputs actually populate.",
            "operation": "list",
            "operationDescription": "WHAT — List all functions in the project.\nUSE WHEN — Discovering existing functions or finding a functionID to edit."
          },
          "cli": {
            "command": "function list"
          }
        },
        "x-speakeasy-group": "function",
        "x-speakeasy-name-override": "list",
        "summary": "List functions",
        "description": "Returns every function in the environment. A function is custom JavaScript that runs in Voiceflow’s sandbox and returns through a named path. The call takes no paging parameters, so one request yields the whole set.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns every function saved in the project's environment, each with its name, description, settings, and full JavaScript source code.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableFunctionListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns every function saved in the project's environment, each with its name, description, settings, and full JavaScript source code."
            }
          }
        },
        "tags": [
          "Function"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns every function in the environment. A function is custom JavaScript that runs in Voiceflow’s sandbox and returns through a named path. The call takes no paging parameters, so one request yields the whole set."
        }
      },
      "post": {
        "operationId": "StableFunctionController_create",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_function",
            "toolDescription": "Custom JavaScript code that runs as an agent tool. Sandboxed ES6 V8 runtime: no require/import, no timers, modified fetch API. Functions can also emit traces (text for chat, speak/audio for voice, cardV2/carousel/choice for visual). When the user gives you a plain REST endpoint, prefer an API tool; reach for a Function when you need transforms, parsing, multi-call chains, or conditional logic on responses.\nThe function's description is LLM-facing — the LLM reads it when deciding whether to call the function. Write it in WHAT/WHEN format: WHAT the function does AND WHEN the LLM should call it. A pure WHAT (\"Looks up postal code\") routes badly; the WHEN (\"Use when the user provides a postal code or asks to verify service availability for their address\") is what gives the LLM the signal to pick correctly.\nPredecessor: select the project and environment first; create any project variables the function reads or writes.\nSuccessor: attach the function at agent level, recompile the environment, then run a test conversation to verify the function's declared outputs actually populate.",
            "operation": "create",
            "operationDescription": "WHAT — Create a new function.\nCode body shape (example):\n  export default async function main(args) {\n    const { postalCode, apiKey } = args.inputVars;\n    try {\n      const response = await fetch(\"https://api.example.com/serviceable\", {\n        method: \"POST\",\n        headers: { \"Authorization\": `Bearer ${apiKey}` },\n        body: JSON.stringify({ postalCode })\n      });\n      const data = response.json;  // NOTE: property, not method\n      return {\n        outputVars: {\n          is_serviceable: data.serviceable,\n          service_zones: data.zones.join(\",\")  // arrays must be stringified\n        },\n        next: { path: data.serviceable ? \"success\" : \"out_of_area\" }\n      };\n    } catch (err) {\n      return { outputVars: { is_serviceable: false }, next: { path: \"error\" } };\n    }\n  }\nUSE WHEN — User needs custom logic the agent can call: transforms, parsing, computation, chained API calls, conditional branching on a response.\nAFTER — voiceflow_tool.create (target=global,type=function) to attach at agent level, then voiceflow_environment.compile.\nDO NOT — Write the description as pure WHAT (just what the function does). The LLM uses this text to decide whether to call the function — it must include WHEN (the user signals or data conditions that should trigger the call). Also: don't hardcode auth keys in function code — declare them as input variables (filled at call time by the LLM or auto-filled from a project variable). And: outputVars only accepts string/number/boolean — null, undefined, objects, arrays all fail silently. Stringify objects if you need structured outputs."
          },
          "cli": {
            "command": "function create"
          }
        },
        "x-speakeasy-group": "function",
        "x-speakeasy-name-override": "create",
        "summary": "Create function",
        "description": "Adds a function to the environment, custom JavaScript that runs in Voiceflow’s sandbox and returns through a named path. The response carries the ID that later calls address it by.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableFunctionCreateRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Creates the function and returns it in full, including its new ID and the JavaScript source stored for it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableFunctionResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Creates the function and returns it in full, including its new ID and the JavaScript source stored for it."
            }
          }
        },
        "tags": [
          "Function"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds a function to the environment, custom JavaScript that runs in Voiceflow’s sandbox and returns through a named path. The response carries the ID that later calls address it by."
        }
      }
    },
    "/v1/stable/function/batch": {
      "post": {
        "operationId": "StableFunctionController_createMany",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_function",
            "toolDescription": "Custom JavaScript code that runs as an agent tool. Sandboxed ES6 V8 runtime: no require/import, no timers, modified fetch API. Functions can also emit traces (text for chat, speak/audio for voice, cardV2/carousel/choice for visual). When the user gives you a plain REST endpoint, prefer an API tool; reach for a Function when you need transforms, parsing, multi-call chains, or conditional logic on responses.\nThe function's description is LLM-facing — the LLM reads it when deciding whether to call the function. Write it in WHAT/WHEN format: WHAT the function does AND WHEN the LLM should call it. A pure WHAT (\"Looks up postal code\") routes badly; the WHEN (\"Use when the user provides a postal code or asks to verify service availability for their address\") is what gives the LLM the signal to pick correctly.\nPredecessor: select the project and environment first; create any project variables the function reads or writes.\nSuccessor: attach the function at agent level, recompile the environment, then run a test conversation to verify the function's declared outputs actually populate.",
            "operation": "create_many",
            "operationDescription": "WHAT — Create multiple functions in one call.\nUSE WHEN — Mass-creating during a build (importing a service catalog, scaffolding multiple lookups in one shot)."
          },
          "cli": {
            "command": "function create-many"
          }
        },
        "x-speakeasy-group": "function",
        "x-speakeasy-name-override": "create-many",
        "x-speakeasy-ignore": true,
        "summary": "Create many functions",
        "description": "Adds several functions to the environment in one request, each taking the fields the single-create call takes. The response carries the created functions in the same shape the list call returns.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableFunctionCreateManyRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Creates every function in the request and returns them all, each with its own ID, stored JavaScript source, and exit path order.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableFunctionListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Creates every function in the request and returns them all, each with its own ID, stored JavaScript source, and exit path order."
            }
          }
        },
        "tags": [
          "Function"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds several functions to the environment in one request, each taking the fields the single-create call takes. The response carries the created functions in the same shape the list call returns."
        }
      }
    },
    "/v1/stable/function/{functionID}": {
      "get": {
        "operationId": "StableFunctionController_get",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_function",
            "toolDescription": "Custom JavaScript code that runs as an agent tool. Sandboxed ES6 V8 runtime: no require/import, no timers, modified fetch API. Functions can also emit traces (text for chat, speak/audio for voice, cardV2/carousel/choice for visual). When the user gives you a plain REST endpoint, prefer an API tool; reach for a Function when you need transforms, parsing, multi-call chains, or conditional logic on responses.\nThe function's description is LLM-facing — the LLM reads it when deciding whether to call the function. Write it in WHAT/WHEN format: WHAT the function does AND WHEN the LLM should call it. A pure WHAT (\"Looks up postal code\") routes badly; the WHEN (\"Use when the user provides a postal code or asks to verify service availability for their address\") is what gives the LLM the signal to pick correctly.\nPredecessor: select the project and environment first; create any project variables the function reads or writes.\nSuccessor: attach the function at agent level, recompile the environment, then run a test conversation to verify the function's declared outputs actually populate.",
            "operation": "get",
            "operationDescription": "WHAT — Fetch one function's full detail: code, declared input/output variables, exit paths.\nUSE WHEN — Before editing (to merge changes against current state), or inspecting how a function is wired."
          },
          "cli": {
            "command": "function get"
          }
        },
        "x-speakeasy-group": "function",
        "x-speakeasy-name-override": "get",
        "summary": "Get function",
        "description": "Returns a single function by ID, with the fields that define it. A function is custom JavaScript that runs in Voiceflow’s sandbox and returns through a named path.",
        "parameters": [
          {
            "name": "functionID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the function to operate on."
            },
            "description": "The ID of the function to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns a single function, including the JavaScript source that runs when it is called and the ordered list of path IDs that controls the display order of its exit paths.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableFunctionResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns a single function, including the JavaScript source that runs when it is called and the ordered list of path IDs that controls the display order of its exit paths."
            }
          }
        },
        "tags": [
          "Function"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns a single function by ID, with the fields that define it. A function is custom JavaScript that runs in Voiceflow’s sandbox and returns through a named path."
        }
      },
      "patch": {
        "operationId": "StableFunctionController_update",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_function",
            "toolDescription": "Custom JavaScript code that runs as an agent tool. Sandboxed ES6 V8 runtime: no require/import, no timers, modified fetch API. Functions can also emit traces (text for chat, speak/audio for voice, cardV2/carousel/choice for visual). When the user gives you a plain REST endpoint, prefer an API tool; reach for a Function when you need transforms, parsing, multi-call chains, or conditional logic on responses.\nThe function's description is LLM-facing — the LLM reads it when deciding whether to call the function. Write it in WHAT/WHEN format: WHAT the function does AND WHEN the LLM should call it. A pure WHAT (\"Looks up postal code\") routes badly; the WHEN (\"Use when the user provides a postal code or asks to verify service availability for their address\") is what gives the LLM the signal to pick correctly.\nPredecessor: select the project and environment first; create any project variables the function reads or writes.\nSuccessor: attach the function at agent level, recompile the environment, then run a test conversation to verify the function's declared outputs actually populate.",
            "operation": "update",
            "operationDescription": "WHAT — Patch a function's code or metadata. Partial PATCH — only fields you pass are changed.\nUSE WHEN — Fixing a bug in function logic, swapping endpoints, adjusting outputs.\nBEFORE — voiceflow_function.get to see current code.\nAFTER — voiceflow_environment.compile, then voiceflow_conversation.\nDO NOT — Write `response.json()` as a method call — Voiceflow's fetch exposes `.json` as a property, not a method. Every cold-start LLM writes `response.json()` and breaks; use `response.json` instead."
          },
          "cli": {
            "command": "function update"
          }
        },
        "x-speakeasy-group": "function",
        "x-speakeasy-name-override": "update",
        "summary": "Update function",
        "description": "Changes an existing function in place. The response carries only a confirmation message, so refetch the function to read its new values.",
        "parameters": [
          {
            "name": "functionID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the function to operate on."
            },
            "description": "The ID of the function to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/StableFunctionUpdateRequest"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confirms the function was updated. Only a message is returned, not the revised function, so fetch the function again to read back its saved code.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableUpdateResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the function was updated. Only a message is returned, not the revised function, so fetch the function again to read back its saved code."
            }
          }
        },
        "tags": [
          "Function"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Changes an existing function in place. The response carries only a confirmation message, so refetch the function to read its new values."
        }
      },
      "delete": {
        "operationId": "StableFunctionController_delete",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_function",
            "toolDescription": "Custom JavaScript code that runs as an agent tool. Sandboxed ES6 V8 runtime: no require/import, no timers, modified fetch API. Functions can also emit traces (text for chat, speak/audio for voice, cardV2/carousel/choice for visual). When the user gives you a plain REST endpoint, prefer an API tool; reach for a Function when you need transforms, parsing, multi-call chains, or conditional logic on responses.\nThe function's description is LLM-facing — the LLM reads it when deciding whether to call the function. Write it in WHAT/WHEN format: WHAT the function does AND WHEN the LLM should call it. A pure WHAT (\"Looks up postal code\") routes badly; the WHEN (\"Use when the user provides a postal code or asks to verify service availability for their address\") is what gives the LLM the signal to pick correctly.\nPredecessor: select the project and environment first; create any project variables the function reads or writes.\nSuccessor: attach the function at agent level, recompile the environment, then run a test conversation to verify the function's declared outputs actually populate.",
            "operation": "delete",
            "operationDescription": "WHAT — Remove a function.\nUSE WHEN — Retiring a function that's no longer needed.\nBEFORE — voiceflow_tool.list to confirm nothing currently attaches this function; runtime calls to a deleted function will fail."
          },
          "cli": {
            "command": "function delete"
          }
        },
        "x-speakeasy-group": "function",
        "x-speakeasy-name-override": "delete",
        "summary": "Delete function",
        "description": "Deletes a single function by ID. A function is custom JavaScript that runs in Voiceflow’s sandbox and returns through a named path. The response carries only a confirmation message, so refetch the functions to see what is left.",
        "parameters": [
          {
            "name": "functionID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the function to operate on."
            },
            "description": "The ID of the function to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Confirms the function was deleted. The response is a message, not the removed function, so its JavaScript source is not recoverable from this call.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableDeleteResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the function was deleted. The response is a message, not the removed function, so its JavaScript source is not recoverable from this call."
            }
          }
        },
        "tags": [
          "Function"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Deletes a single function by ID. A function is custom JavaScript that runs in Voiceflow’s sandbox and returns through a named path. The response carries only a confirmation message, so refetch the functions to see what is left."
        }
      }
    },
    "/v1/stable/function-variable": {
      "get": {
        "operationId": "StableFunctionVariableController_list",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_function",
            "toolDescription": "Custom JavaScript code that runs as an agent tool. Sandboxed ES6 V8 runtime: no require/import, no timers, modified fetch API. Functions can also emit traces (text for chat, speak/audio for voice, cardV2/carousel/choice for visual). When the user gives you a plain REST endpoint, prefer an API tool; reach for a Function when you need transforms, parsing, multi-call chains, or conditional logic on responses.\nThe function's description is LLM-facing — the LLM reads it when deciding whether to call the function. Write it in WHAT/WHEN format: WHAT the function does AND WHEN the LLM should call it. A pure WHAT (\"Looks up postal code\") routes badly; the WHEN (\"Use when the user provides a postal code or asks to verify service availability for their address\") is what gives the LLM the signal to pick correctly.\nPredecessor: select the project and environment first; create any project variables the function reads or writes.\nSuccessor: attach the function at agent level, recompile the environment, then run a test conversation to verify the function's declared outputs actually populate.",
            "operation": "list_variables",
            "operationDescription": "WHAT — List the function's declared input and output variables, each with name and type.\nUSE WHEN — Understanding what the function expects/returns before wiring it."
          },
          "cli": {
            "command": "function variable list"
          }
        },
        "x-speakeasy-group": "function.variable",
        "x-speakeasy-name-override": "list",
        "summary": "List variables",
        "description": "Returns every function variable in its function. A function variable is an input or output a function declares. The call takes no paging parameters, so one request yields the whole set.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          },
          {
            "name": "functionID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the function whose variables to list."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns every variable declared on a single function, selected by the functionID query parameter, each marked as an input or an output and named as the function code references it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableFunctionVariableListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns every variable declared on a single function, selected by the functionID query parameter, each marked as an input or an output and named as the function code references it."
            }
          }
        },
        "tags": [
          "Function Variable"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns every function variable in its function. A function variable is an input or output a function declares. The call takes no paging parameters, so one request yields the whole set."
        }
      },
      "post": {
        "operationId": "StableFunctionVariableController_create",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_function",
            "toolDescription": "Custom JavaScript code that runs as an agent tool. Sandboxed ES6 V8 runtime: no require/import, no timers, modified fetch API. Functions can also emit traces (text for chat, speak/audio for voice, cardV2/carousel/choice for visual). When the user gives you a plain REST endpoint, prefer an API tool; reach for a Function when you need transforms, parsing, multi-call chains, or conditional logic on responses.\nThe function's description is LLM-facing — the LLM reads it when deciding whether to call the function. Write it in WHAT/WHEN format: WHAT the function does AND WHEN the LLM should call it. A pure WHAT (\"Looks up postal code\") routes badly; the WHEN (\"Use when the user provides a postal code or asks to verify service availability for their address\") is what gives the LLM the signal to pick correctly.\nPredecessor: select the project and environment first; create any project variables the function reads or writes.\nSuccessor: attach the function at agent level, recompile the environment, then run a test conversation to verify the function's declared outputs actually populate.",
            "operation": "create_variable",
            "operationDescription": "WHAT — Declare a new input or output variable on a function. Type is direction (input | output), not data type — data types are inferred from value shape at runtime.\nUSE WHEN — The function needs a new input (auth token, postal code) or returns a new output downstream tools will use.\nDO NOT — Return object or array values in outputVars — only string / number / boolean are supported; everything else fails silently. Stringify arrays/objects (`JSON.stringify(...)`) if downstream tools need structured data. Booleans are commonly returned as the strings \"true\"/\"false\" because Voiceflow's downstream comparisons (in prompts and conditions) are stringly-typed — match the form the next tool will consume."
          },
          "cli": {
            "command": "function variable create"
          }
        },
        "x-speakeasy-group": "function.variable",
        "x-speakeasy-name-override": "create",
        "summary": "Create variable",
        "description": "Adds a function variable to its function, an input or output a function declares. The response carries the ID that later calls address it by.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableFunctionVariableCreateRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Creates the function variable and returns it, including its new ID, whether it is an input or an output, and the functionID of the function that declares it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableFunctionVariableResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Creates the function variable and returns it, including its new ID, whether it is an input or an output, and the functionID of the function that declares it."
            }
          }
        },
        "tags": [
          "Function Variable"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds a function variable to its function, an input or output a function declares. The response carries the ID that later calls address it by."
        }
      }
    },
    "/v1/stable/function-variable/batch": {
      "post": {
        "operationId": "StableFunctionVariableController_createMany",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_function",
            "toolDescription": "Custom JavaScript code that runs as an agent tool. Sandboxed ES6 V8 runtime: no require/import, no timers, modified fetch API. Functions can also emit traces (text for chat, speak/audio for voice, cardV2/carousel/choice for visual). When the user gives you a plain REST endpoint, prefer an API tool; reach for a Function when you need transforms, parsing, multi-call chains, or conditional logic on responses.\nThe function's description is LLM-facing — the LLM reads it when deciding whether to call the function. Write it in WHAT/WHEN format: WHAT the function does AND WHEN the LLM should call it. A pure WHAT (\"Looks up postal code\") routes badly; the WHEN (\"Use when the user provides a postal code or asks to verify service availability for their address\") is what gives the LLM the signal to pick correctly.\nPredecessor: select the project and environment first; create any project variables the function reads or writes.\nSuccessor: attach the function at agent level, recompile the environment, then run a test conversation to verify the function's declared outputs actually populate.",
            "operation": "create_many_variables",
            "operationDescription": "WHAT — Create multiple function variables in one call.\nUSE WHEN — Scaffolding a function with many inputs/outputs at once."
          },
          "cli": {
            "command": "function variable create-many"
          }
        },
        "x-speakeasy-group": "function.variable",
        "x-speakeasy-name-override": "create-many",
        "x-speakeasy-ignore": true,
        "summary": "Create many variables",
        "description": "Adds several function variables to its function in one request, each taking the fields the single-create call takes. The response carries the created function variables in the same shape the list call returns.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableFunctionVariableCreateManyRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Returns the newly created function variables, each with its own ID, its input or output kind, and the functionID of the function it was attached to.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableFunctionVariableListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the newly created function variables, each with its own ID, its input or output kind, and the functionID of the function it was attached to."
            }
          }
        },
        "tags": [
          "Function Variable"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds several function variables to its function in one request, each taking the fields the single-create call takes. The response carries the created function variables in the same shape the list call returns."
        }
      }
    },
    "/v1/stable/function-variable/{variableID}": {
      "get": {
        "operationId": "StableFunctionVariableController_get",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_function",
            "toolDescription": "Custom JavaScript code that runs as an agent tool. Sandboxed ES6 V8 runtime: no require/import, no timers, modified fetch API. Functions can also emit traces (text for chat, speak/audio for voice, cardV2/carousel/choice for visual). When the user gives you a plain REST endpoint, prefer an API tool; reach for a Function when you need transforms, parsing, multi-call chains, or conditional logic on responses.\nThe function's description is LLM-facing — the LLM reads it when deciding whether to call the function. Write it in WHAT/WHEN format: WHAT the function does AND WHEN the LLM should call it. A pure WHAT (\"Looks up postal code\") routes badly; the WHEN (\"Use when the user provides a postal code or asks to verify service availability for their address\") is what gives the LLM the signal to pick correctly.\nPredecessor: select the project and environment first; create any project variables the function reads or writes.\nSuccessor: attach the function at agent level, recompile the environment, then run a test conversation to verify the function's declared outputs actually populate.",
            "operation": "get_variable",
            "operationDescription": "WHAT — Fetch a single function variable's detail.\nUSE WHEN — Before editing it."
          },
          "cli": {
            "command": "function variable get"
          }
        },
        "x-speakeasy-group": "function.variable",
        "x-speakeasy-name-override": "get",
        "summary": "Get variable",
        "description": "Returns a single function variable by ID, with the fields that define it. A function variable is an input or output a function declares.",
        "parameters": [
          {
            "name": "variableID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the variable to operate on."
            },
            "description": "The ID of the variable to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns a single function variable, with the name the function code uses to reference it, whether it is an input or an output, and the ID of the function that declares it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableFunctionVariableResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns a single function variable, with the name the function code uses to reference it, whether it is an input or an output, and the ID of the function that declares it."
            }
          }
        },
        "tags": [
          "Function Variable"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns a single function variable by ID, with the fields that define it. A function variable is an input or output a function declares."
        }
      },
      "patch": {
        "operationId": "StableFunctionVariableController_update",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_function",
            "toolDescription": "Custom JavaScript code that runs as an agent tool. Sandboxed ES6 V8 runtime: no require/import, no timers, modified fetch API. Functions can also emit traces (text for chat, speak/audio for voice, cardV2/carousel/choice for visual). When the user gives you a plain REST endpoint, prefer an API tool; reach for a Function when you need transforms, parsing, multi-call chains, or conditional logic on responses.\nThe function's description is LLM-facing — the LLM reads it when deciding whether to call the function. Write it in WHAT/WHEN format: WHAT the function does AND WHEN the LLM should call it. A pure WHAT (\"Looks up postal code\") routes badly; the WHEN (\"Use when the user provides a postal code or asks to verify service availability for their address\") is what gives the LLM the signal to pick correctly.\nPredecessor: select the project and environment first; create any project variables the function reads or writes.\nSuccessor: attach the function at agent level, recompile the environment, then run a test conversation to verify the function's declared outputs actually populate.",
            "operation": "update_variable",
            "operationDescription": "WHAT — Modify a function variable's name or description.\nDO NOT — Rename a variable that's already referenced by a voiceflow_tool attachment's captureResponse or inputVariables map — the binding will silently fail. Update the attachment first."
          },
          "cli": {
            "command": "function variable update"
          }
        },
        "x-speakeasy-group": "function.variable",
        "x-speakeasy-name-override": "update",
        "summary": "Update variable",
        "description": "Changes an existing function variable in place. The response carries only a confirmation message, so refetch the function variable to read its new values.",
        "parameters": [
          {
            "name": "variableID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the variable to operate on."
            },
            "description": "The ID of the variable to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/StableFunctionVariableUpdateRequest"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confirms the function variable was updated. The body confirms the write rather than returning the variable, so fetch the variable again to check its name, description, and whether it is an input or an output.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableUpdateResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the function variable was updated. The body confirms the write rather than returning the variable, so fetch the variable again to check its name, description, and whether it is an input or an output."
            }
          }
        },
        "tags": [
          "Function Variable"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Changes an existing function variable in place. The response carries only a confirmation message, so refetch the function variable to read its new values."
        }
      },
      "delete": {
        "operationId": "StableFunctionVariableController_delete",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_function",
            "toolDescription": "Custom JavaScript code that runs as an agent tool. Sandboxed ES6 V8 runtime: no require/import, no timers, modified fetch API. Functions can also emit traces (text for chat, speak/audio for voice, cardV2/carousel/choice for visual). When the user gives you a plain REST endpoint, prefer an API tool; reach for a Function when you need transforms, parsing, multi-call chains, or conditional logic on responses.\nThe function's description is LLM-facing — the LLM reads it when deciding whether to call the function. Write it in WHAT/WHEN format: WHAT the function does AND WHEN the LLM should call it. A pure WHAT (\"Looks up postal code\") routes badly; the WHEN (\"Use when the user provides a postal code or asks to verify service availability for their address\") is what gives the LLM the signal to pick correctly.\nPredecessor: select the project and environment first; create any project variables the function reads or writes.\nSuccessor: attach the function at agent level, recompile the environment, then run a test conversation to verify the function's declared outputs actually populate.",
            "operation": "delete_variable",
            "operationDescription": "WHAT — Remove a function variable.\nDO NOT — Delete a variable referenced by any voiceflow_tool attachment without cleaning those bindings up first."
          },
          "cli": {
            "command": "function variable delete"
          }
        },
        "x-speakeasy-group": "function.variable",
        "x-speakeasy-name-override": "delete",
        "summary": "Delete variable",
        "description": "Deletes a single function variable by ID. A function variable is an input or output a function declares. The response carries only a confirmation message, so refetch the function variables to see what is left.",
        "parameters": [
          {
            "name": "variableID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the variable to operate on."
            },
            "description": "The ID of the variable to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Confirms the function variable was deleted. A message is all that comes back, so refetch the function's variables to see which inputs and outputs its code can still reference.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableDeleteResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the function variable was deleted. A message is all that comes back, so refetch the function's variables to see which inputs and outputs its code can still reference."
            }
          }
        },
        "tags": [
          "Function Variable"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Deletes a single function variable by ID. A function variable is an input or output a function declares. The response carries only a confirmation message, so refetch the function variables to see what is left."
        }
      }
    },
    "/v1/stable/function-path": {
      "get": {
        "operationId": "StableFunctionPathController_list",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_function",
            "toolDescription": "Custom JavaScript code that runs as an agent tool. Sandboxed ES6 V8 runtime: no require/import, no timers, modified fetch API. Functions can also emit traces (text for chat, speak/audio for voice, cardV2/carousel/choice for visual). When the user gives you a plain REST endpoint, prefer an API tool; reach for a Function when you need transforms, parsing, multi-call chains, or conditional logic on responses.\nThe function's description is LLM-facing — the LLM reads it when deciding whether to call the function. Write it in WHAT/WHEN format: WHAT the function does AND WHEN the LLM should call it. A pure WHAT (\"Looks up postal code\") routes badly; the WHEN (\"Use when the user provides a postal code or asks to verify service availability for their address\") is what gives the LLM the signal to pick correctly.\nPredecessor: select the project and environment first; create any project variables the function reads or writes.\nSuccessor: attach the function at agent level, recompile the environment, then run a test conversation to verify the function's declared outputs actually populate.",
            "operation": "list_paths",
            "operationDescription": "WHAT — List the named exit paths on a function (success, error, custom branches).\nUSE WHEN — Verifying the function returns the expected branches."
          },
          "cli": {
            "command": "function path list"
          }
        },
        "x-speakeasy-group": "function.path",
        "x-speakeasy-name-override": "list",
        "summary": "List paths",
        "description": "Returns every function path in its function. A function path is one of the named exits a function can return through. The call takes no paging parameters, so one request yields the whole set.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          },
          {
            "name": "functionID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the function whose paths to list."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns every exit path declared on the function, each with the name the function code returns to select it and the display label shown in Voiceflow.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableFunctionPathListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns every exit path declared on the function, each with the name the function code returns to select it and the display label shown in Voiceflow."
            }
          }
        },
        "tags": [
          "Function Path"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns every function path in its function. A function path is one of the named exits a function can return through. The call takes no paging parameters, so one request yields the whole set."
        }
      },
      "post": {
        "operationId": "StableFunctionPathController_create",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_function",
            "toolDescription": "Custom JavaScript code that runs as an agent tool. Sandboxed ES6 V8 runtime: no require/import, no timers, modified fetch API. Functions can also emit traces (text for chat, speak/audio for voice, cardV2/carousel/choice for visual). When the user gives you a plain REST endpoint, prefer an API tool; reach for a Function when you need transforms, parsing, multi-call chains, or conditional logic on responses.\nThe function's description is LLM-facing — the LLM reads it when deciding whether to call the function. Write it in WHAT/WHEN format: WHAT the function does AND WHEN the LLM should call it. A pure WHAT (\"Looks up postal code\") routes badly; the WHEN (\"Use when the user provides a postal code or asks to verify service availability for their address\") is what gives the LLM the signal to pick correctly.\nPredecessor: select the project and environment first; create any project variables the function reads or writes.\nSuccessor: attach the function at agent level, recompile the environment, then run a test conversation to verify the function's declared outputs actually populate.",
            "operation": "create_path",
            "operationDescription": "WHAT — Add a new exit path to a function (e.g. not_found, retry_needed, partial_match).\nUSE WHEN — The function needs a new branch the playbook can route on. Functions commonly have 3+ paths beyond success/error — `not_found` for empty-result API calls, `retry_needed` for transient failures, `partial_match` for ambiguous lookups. Branch downstream wiring (playbook instructions or canvas-step routing) on the specific path that fires, not just success vs. error."
          },
          "cli": {
            "command": "function path create"
          }
        },
        "x-speakeasy-group": "function.path",
        "x-speakeasy-name-override": "create",
        "summary": "Create path",
        "description": "Adds a function path to its function, one of the named exits a function can return through. The response carries the ID that later calls address it by.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableFunctionPathCreateRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Creates the exit path and returns it with its generated ID and the function it belongs to. The name is the value the function code returns to send the workflow down this branch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableFunctionPathResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Creates the exit path and returns it with its generated ID and the function it belongs to. The name is the value the function code returns to send the workflow down this branch."
            }
          }
        },
        "tags": [
          "Function Path"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds a function path to its function, one of the named exits a function can return through. The response carries the ID that later calls address it by."
        }
      }
    },
    "/v1/stable/function-path/batch": {
      "post": {
        "operationId": "StableFunctionPathController_createMany",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_function",
            "toolDescription": "Custom JavaScript code that runs as an agent tool. Sandboxed ES6 V8 runtime: no require/import, no timers, modified fetch API. Functions can also emit traces (text for chat, speak/audio for voice, cardV2/carousel/choice for visual). When the user gives you a plain REST endpoint, prefer an API tool; reach for a Function when you need transforms, parsing, multi-call chains, or conditional logic on responses.\nThe function's description is LLM-facing — the LLM reads it when deciding whether to call the function. Write it in WHAT/WHEN format: WHAT the function does AND WHEN the LLM should call it. A pure WHAT (\"Looks up postal code\") routes badly; the WHEN (\"Use when the user provides a postal code or asks to verify service availability for their address\") is what gives the LLM the signal to pick correctly.\nPredecessor: select the project and environment first; create any project variables the function reads or writes.\nSuccessor: attach the function at agent level, recompile the environment, then run a test conversation to verify the function's declared outputs actually populate.",
            "operation": "create_many_paths",
            "operationDescription": "WHAT — Add multiple exit paths in one call.\nUSE WHEN — Scaffolding a function with several branches at once."
          },
          "cli": {
            "command": "function path create-many"
          }
        },
        "x-speakeasy-group": "function.path",
        "x-speakeasy-name-override": "create-many",
        "x-speakeasy-ignore": true,
        "summary": "Create many paths",
        "description": "Adds several function paths to its function in one request, each taking the fields the single-create call takes. The response carries the created function paths in the same shape the list call returns.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableFunctionPathCreateManyRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Creates every path in the request against the single function it names, and returns the created paths with their generated IDs and labels.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableFunctionPathListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Creates every path in the request against the single function it names, and returns the created paths with their generated IDs and labels."
            }
          }
        },
        "tags": [
          "Function Path"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds several function paths to its function in one request, each taking the fields the single-create call takes. The response carries the created function paths in the same shape the list call returns."
        }
      }
    },
    "/v1/stable/function-path/{pathID}": {
      "get": {
        "operationId": "StableFunctionPathController_get",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_function",
            "toolDescription": "Custom JavaScript code that runs as an agent tool. Sandboxed ES6 V8 runtime: no require/import, no timers, modified fetch API. Functions can also emit traces (text for chat, speak/audio for voice, cardV2/carousel/choice for visual). When the user gives you a plain REST endpoint, prefer an API tool; reach for a Function when you need transforms, parsing, multi-call chains, or conditional logic on responses.\nThe function's description is LLM-facing — the LLM reads it when deciding whether to call the function. Write it in WHAT/WHEN format: WHAT the function does AND WHEN the LLM should call it. A pure WHAT (\"Looks up postal code\") routes badly; the WHEN (\"Use when the user provides a postal code or asks to verify service availability for their address\") is what gives the LLM the signal to pick correctly.\nPredecessor: select the project and environment first; create any project variables the function reads or writes.\nSuccessor: attach the function at agent level, recompile the environment, then run a test conversation to verify the function's declared outputs actually populate.",
            "operation": "get_path",
            "operationDescription": "WHAT — Fetch a single exit path's detail.\nUSE WHEN — Before editing it."
          },
          "cli": {
            "command": "function path get"
          }
        },
        "x-speakeasy-group": "function.path",
        "x-speakeasy-name-override": "get",
        "summary": "Get path",
        "description": "Returns a single function path by ID, with the fields that define it. A function path is one of the named exits a function can return through.",
        "parameters": [
          {
            "name": "pathID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the function path to operate on."
            },
            "description": "The ID of the function path to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns one exit path, including the function it belongs to, the name its code returns to select it, and the label displayed for it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableFunctionPathResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns one exit path, including the function it belongs to, the name its code returns to select it, and the label displayed for it."
            }
          }
        },
        "tags": [
          "Function Path"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns a single function path by ID, with the fields that define it. A function path is one of the named exits a function can return through."
        }
      },
      "patch": {
        "operationId": "StableFunctionPathController_update",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_function",
            "toolDescription": "Custom JavaScript code that runs as an agent tool. Sandboxed ES6 V8 runtime: no require/import, no timers, modified fetch API. Functions can also emit traces (text for chat, speak/audio for voice, cardV2/carousel/choice for visual). When the user gives you a plain REST endpoint, prefer an API tool; reach for a Function when you need transforms, parsing, multi-call chains, or conditional logic on responses.\nThe function's description is LLM-facing — the LLM reads it when deciding whether to call the function. Write it in WHAT/WHEN format: WHAT the function does AND WHEN the LLM should call it. A pure WHAT (\"Looks up postal code\") routes badly; the WHEN (\"Use when the user provides a postal code or asks to verify service availability for their address\") is what gives the LLM the signal to pick correctly.\nPredecessor: select the project and environment first; create any project variables the function reads or writes.\nSuccessor: attach the function at agent level, recompile the environment, then run a test conversation to verify the function's declared outputs actually populate.",
            "operation": "update_path",
            "operationDescription": "WHAT — Modify an existing path's name or label."
          },
          "cli": {
            "command": "function path update"
          }
        },
        "x-speakeasy-group": "function.path",
        "x-speakeasy-name-override": "update",
        "summary": "Update path",
        "description": "Changes an existing function path in place. The response carries only a confirmation message, so refetch the function path to read its new values.",
        "parameters": [
          {
            "name": "pathID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the function path to operate on."
            },
            "description": "The ID of the function path to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/StableFunctionPathUpdateRequest"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confirms the path's name or label was changed. The body is a message only, and because the name is what function code returns to select this path, renaming it affects that code.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableUpdateResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the path's name or label was changed. The body is a message only, and because the name is what function code returns to select this path, renaming it affects that code."
            }
          }
        },
        "tags": [
          "Function Path"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Changes an existing function path in place. The response carries only a confirmation message, so refetch the function path to read its new values."
        }
      },
      "delete": {
        "operationId": "StableFunctionPathController_delete",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_function",
            "toolDescription": "Custom JavaScript code that runs as an agent tool. Sandboxed ES6 V8 runtime: no require/import, no timers, modified fetch API. Functions can also emit traces (text for chat, speak/audio for voice, cardV2/carousel/choice for visual). When the user gives you a plain REST endpoint, prefer an API tool; reach for a Function when you need transforms, parsing, multi-call chains, or conditional logic on responses.\nThe function's description is LLM-facing — the LLM reads it when deciding whether to call the function. Write it in WHAT/WHEN format: WHAT the function does AND WHEN the LLM should call it. A pure WHAT (\"Looks up postal code\") routes badly; the WHEN (\"Use when the user provides a postal code or asks to verify service availability for their address\") is what gives the LLM the signal to pick correctly.\nPredecessor: select the project and environment first; create any project variables the function reads or writes.\nSuccessor: attach the function at agent level, recompile the environment, then run a test conversation to verify the function's declared outputs actually populate.",
            "operation": "delete_path",
            "operationDescription": "WHAT — Remove a path from a function.\nDO NOT — Delete a path that's referenced by a playbook's exit conditions or canvas-step wiring — runtime breaks when the path is gone."
          },
          "cli": {
            "command": "function path delete"
          }
        },
        "x-speakeasy-group": "function.path",
        "x-speakeasy-name-override": "delete",
        "summary": "Delete path",
        "description": "Deletes a single function path by ID. A function path is one of the named exits a function can return through. The response carries only a confirmation message, so refetch the function paths to see what is left.",
        "parameters": [
          {
            "name": "pathID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the function path to operate on."
            },
            "description": "The ID of the function path to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Confirms the exit path was removed from its function. The body is a message only, so refetch the function's paths to see the branches it can still take.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableDeleteResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the exit path was removed from its function. The body is a message only, so refetch the function's paths to see the branches it can still take."
            }
          }
        },
        "tags": [
          "Function Path"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Deletes a single function path by ID. A function path is one of the named exits a function can return through. The response carries only a confirmation message, so refetch the function paths to see what is left."
        }
      }
    },
    "/v1/stable/evaluation": {
      "get": {
        "operationId": "StableEvaluationController_list",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_evaluation",
            "toolDescription": "LLM-as-judge scoring of transcripts. Define criteria (Binary, Rating, Options, Text), run against one transcript per call, retrieve per-transcript results. Built-in default evaluations auto-run on every new transcript; the ones returned by list can be disabled via update but never deleted. Custom evaluations require calibration before use — an uncalibrated eval will drive every downstream optimization toward wrong fixes.\nPredecessor: search transcripts to find the ones to evaluate.\nSuccessor: fixes on the build surfaces (playbook instructions, the agent's global prompt, and so on) based on the failure patterns the eval surfaces.",
            "operation": "list",
            "operationDescription": "WHAT — List all evaluations defined for the project.\nUSE WHEN — Auditing eval coverage or finding an evaluationID to run/edit."
          },
          "cli": {
            "command": "evaluation list"
          }
        },
        "x-speakeasy-group": "evaluation",
        "x-speakeasy-name-override": "list",
        "summary": "List evaluations",
        "description": "Returns every evaluation in the project. An evaluation is a criterion a model scores past conversations against. The call takes no paging parameters, so one request yields the whole set.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns every evaluation defined on the project, each with the criteria it judges transcripts against, its result type, whether it runs automatically on new transcripts, and its average cost per run.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableEvaluationListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns every evaluation defined on the project, each with the criteria it judges transcripts against, its result type, whether it runs automatically on new transcripts, and its average cost per run."
            }
          }
        },
        "tags": [
          "Evaluation"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns every evaluation in the project. An evaluation is a criterion a model scores past conversations against. The call takes no paging parameters, so one request yields the whole set."
        }
      },
      "post": {
        "operationId": "StableEvaluationController_create",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_evaluation",
            "toolDescription": "LLM-as-judge scoring of transcripts. Define criteria (Binary, Rating, Options, Text), run against one transcript per call, retrieve per-transcript results. Built-in default evaluations auto-run on every new transcript; the ones returned by list can be disabled via update but never deleted. Custom evaluations require calibration before use — an uncalibrated eval will drive every downstream optimization toward wrong fixes.\nPredecessor: search transcripts to find the ones to evaluate.\nSuccessor: fixes on the build surfaces (playbook instructions, the agent's global prompt, and so on) based on the failure patterns the eval surfaces.",
            "operation": "create",
            "operationDescription": "WHAT — Define a new evaluation.\nUSE WHEN — You spotted a failure pattern in transcripts that's worth tracking across future traffic.\nDO NOT — Trust a new evaluation before calibrating it. Run it on 5-10 representative transcripts, compare scores to human judgment, fix false positives/negatives in the criteria text, re-run, iterate until aligned. An uncalibrated eval drives downstream optimization toward bogus changes."
          },
          "cli": {
            "command": "evaluation create"
          }
        },
        "x-speakeasy-group": "evaluation",
        "x-speakeasy-name-override": "create",
        "summary": "Create evaluation",
        "description": "Adds a evaluation to the project, a criterion a model scores past conversations against. The response carries the ID that later calls address it by.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableEvaluationCreateRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Creates the evaluation and returns it with its assigned `id`. No transcript is scored yet: results come from running it against a transcript, or automatically on new transcripts when `enabled` is true.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableEvaluationResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Creates the evaluation and returns it with its assigned `id`. No transcript is scored yet: results come from running it against a transcript, or automatically on new transcripts when `enabled` is true."
            }
          }
        },
        "tags": [
          "Evaluation"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds a evaluation to the project, a criterion a model scores past conversations against. The response carries the ID that later calls address it by."
        }
      }
    },
    "/v1/stable/evaluation/{evaluationID}": {
      "get": {
        "operationId": "StableEvaluationController_get",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_evaluation",
            "toolDescription": "LLM-as-judge scoring of transcripts. Define criteria (Binary, Rating, Options, Text), run against one transcript per call, retrieve per-transcript results. Built-in default evaluations auto-run on every new transcript; the ones returned by list can be disabled via update but never deleted. Custom evaluations require calibration before use — an uncalibrated eval will drive every downstream optimization toward wrong fixes.\nPredecessor: search transcripts to find the ones to evaluate.\nSuccessor: fixes on the build surfaces (playbook instructions, the agent's global prompt, and so on) based on the failure patterns the eval surfaces.",
            "operation": "get",
            "operationDescription": "WHAT — Fetch one evaluation's full config.\nUSE WHEN — Before update."
          },
          "cli": {
            "command": "evaluation get"
          }
        },
        "x-speakeasy-group": "evaluation",
        "x-speakeasy-name-override": "get",
        "summary": "Get evaluation",
        "description": "Returns a single evaluation by ID, with the fields that define it. An evaluation is a criterion a model scores past conversations against.",
        "parameters": [
          {
            "name": "evaluationID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the evaluation to operate on."
            },
            "description": "The ID of the evaluation to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns one evaluation in full: the criteria prompts for its result type, the model settings the evaluator judges with, and whether it is one of the built-in defaults.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableEvaluationResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns one evaluation in full: the criteria prompts for its result type, the model settings the evaluator judges with, and whether it is one of the built-in defaults."
            }
          }
        },
        "tags": [
          "Evaluation"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns a single evaluation by ID, with the fields that define it. An evaluation is a criterion a model scores past conversations against."
        }
      },
      "patch": {
        "operationId": "StableEvaluationController_update",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_evaluation",
            "toolDescription": "LLM-as-judge scoring of transcripts. Define criteria (Binary, Rating, Options, Text), run against one transcript per call, retrieve per-transcript results. Built-in default evaluations auto-run on every new transcript; the ones returned by list can be disabled via update but never deleted. Custom evaluations require calibration before use — an uncalibrated eval will drive every downstream optimization toward wrong fixes.\nPredecessor: search transcripts to find the ones to evaluate.\nSuccessor: fixes on the build surfaces (playbook instructions, the agent's global prompt, and so on) based on the failure patterns the eval surfaces.",
            "operation": "update",
            "operationDescription": "WHAT — Patch evaluation config.\nBEFORE — voiceflow_evaluation.get to see current config."
          },
          "cli": {
            "command": "evaluation update"
          }
        },
        "x-speakeasy-group": "evaluation",
        "x-speakeasy-name-override": "update",
        "summary": "Update evaluation",
        "description": "Changes an existing evaluation in place. The response carries only a confirmation message, so refetch the evaluation to read its new values.",
        "parameters": [
          {
            "name": "evaluationID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the evaluation to operate on."
            },
            "description": "The ID of the evaluation to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableEvaluationUpdateRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confirms the evaluation's name, criteria, result type, or `enabled` state were updated. The body is a message only, so refetch the evaluation to read its stored definition.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableUpdateResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the evaluation's name, criteria, result type, or `enabled` state were updated. The body is a message only, so refetch the evaluation to read its stored definition."
            }
          }
        },
        "tags": [
          "Evaluation"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Changes an existing evaluation in place. The response carries only a confirmation message, so refetch the evaluation to read its new values."
        }
      },
      "delete": {
        "operationId": "StableEvaluationController_delete",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_evaluation",
            "toolDescription": "LLM-as-judge scoring of transcripts. Define criteria (Binary, Rating, Options, Text), run against one transcript per call, retrieve per-transcript results. Built-in default evaluations auto-run on every new transcript; the ones returned by list can be disabled via update but never deleted. Custom evaluations require calibration before use — an uncalibrated eval will drive every downstream optimization toward wrong fixes.\nPredecessor: search transcripts to find the ones to evaluate.\nSuccessor: fixes on the build surfaces (playbook instructions, the agent's global prompt, and so on) based on the failure patterns the eval surfaces.",
            "operation": "delete",
            "operationDescription": "WHAT — Remove an evaluation.\nDO NOT — Try to delete a built-in default evaluation, because they are used to drive analytics. Instead they can be disabled via update."
          },
          "cli": {
            "command": "evaluation delete"
          }
        },
        "x-speakeasy-group": "evaluation",
        "x-speakeasy-name-override": "delete",
        "summary": "Delete evaluation",
        "description": "Deletes a single evaluation by ID. An evaluation is a criterion a model scores past conversations against. The response carries only a confirmation message, so refetch the evaluations to see what is left.",
        "parameters": [
          {
            "name": "evaluationID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the evaluation to operate on."
            },
            "description": "The ID of the evaluation to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Confirms the evaluation was removed from the project. The body carries a message only, so drop any cached copy of the project's evaluations.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableDeleteResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the evaluation was removed from the project. The body carries a message only, so drop any cached copy of the project's evaluations."
            }
          }
        },
        "tags": [
          "Evaluation"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Deletes a single evaluation by ID. An evaluation is a criterion a model scores past conversations against. The response carries only a confirmation message, so refetch the evaluations to see what is left."
        }
      }
    },
    "/v1/stable/evaluation/{evaluationID}/run": {
      "post": {
        "operationId": "StableEvaluationController_run",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_evaluation",
            "toolDescription": "LLM-as-judge scoring of transcripts. Define criteria (Binary, Rating, Options, Text), run against one transcript per call, retrieve per-transcript results. Built-in default evaluations auto-run on every new transcript; the ones returned by list can be disabled via update but never deleted. Custom evaluations require calibration before use — an uncalibrated eval will drive every downstream optimization toward wrong fixes.\nPredecessor: search transcripts to find the ones to evaluate.\nSuccessor: fixes on the build surfaces (playbook instructions, the agent's global prompt, and so on) based on the failure patterns the eval surfaces.",
            "operation": "run",
            "operationDescription": "WHAT — Run a single evaluation against a transcript. One transcript per call — there is no batch form.\nUSE WHEN — Smoke-testing a calibration tweak on one transcript before repeating the call across the rest."
          },
          "cli": {
            "command": "evaluation run"
          }
        },
        "x-speakeasy-group": "evaluation",
        "x-speakeasy-name-override": "run",
        "summary": "Run evaluation",
        "description": "Scores one finished conversation against an evaluation. The response carries the verdict together with the reasoning behind it, so a low score says why.",
        "parameters": [
          {
            "name": "evaluationID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the evaluation to operate on."
            },
            "description": "The ID of the evaluation to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableEvaluationRunRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Scores the transcript named in the body against this evaluation and returns the result: the `value` the evaluator produced, typed to match the evaluation, the `reason` behind it, and the LLM cost the run incurred.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableEvaluationRunResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Scores the transcript named in the body against this evaluation and returns the result: the `value` the evaluator produced, typed to match the evaluation, the `reason` behind it, and the LLM cost the run incurred."
            }
          }
        },
        "tags": [
          "Evaluation"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Scores one finished conversation against an evaluation. The response carries the verdict together with the reasoning behind it, so a low score says why."
        }
      }
    },
    "/v1/stable/document": {
      "get": {
        "operationId": "StableDocumentController_list",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_document",
            "toolDescription": "Individual Knowledge Base documents. Four source types: text (plain prose), table (structured rows — each row becomes its own chunk), URL (web page or sitemap — system crawls), file (PDF/DOCX/TXT upload).\nThe metadata model is documented on the table-creation operation — see it for how document-level metadata, searchable fields, non-searchable metadata fields, and chunk-level metadata interact, and which level the agent's Knowledge Base system tool filters on at runtime.\nPredecessor: select the project and environment first.\nSuccessor: query the knowledge base to verify retrieval surfaces the new/updated content with reasonable scores.",
            "operation": "list",
            "operationDescription": "WHAT — List all documents currently in the Knowledge Base.\nUSE WHEN — Auditing Knowledge Base contents or finding a documentID to update via voiceflow_document."
          },
          "cli": {
            "command": "document list"
          }
        },
        "x-speakeasy-group": "document",
        "x-speakeasy-name-override": "list",
        "summary": "List documents",
        "description": "Returns every document in the knowledge base. A document is a source the knowledge base retrieves from. The call takes no paging parameters, so one request yields the whole set.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns every document in the project's knowledge base, each with its source data, status, and smart chunking settings. Chunks and metadata are left out, so read a document by ID for those.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableDocumentListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns every document in the project's knowledge base, each with its source data, status, and smart chunking settings. Chunks and metadata are left out, so read a document by ID for those."
            }
          }
        },
        "tags": [
          "Document"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns every document in the knowledge base. A document is a source the knowledge base retrieves from. The call takes no paging parameters, so one request yields the whole set."
        }
      }
    },
    "/v1/stable/document/url": {
      "post": {
        "operationId": "StableDocumentController_createURL",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_document",
            "toolDescription": "Individual Knowledge Base documents. Four source types: text (plain prose), table (structured rows — each row becomes its own chunk), URL (web page or sitemap — system crawls), file (PDF/DOCX/TXT upload).\nThe metadata model is documented on the table-creation operation — see it for how document-level metadata, searchable fields, non-searchable metadata fields, and chunk-level metadata interact, and which level the agent's Knowledge Base system tool filters on at runtime.\nPredecessor: select the project and environment first.\nSuccessor: query the knowledge base to verify retrieval surfaces the new/updated content with reasonable scores.",
            "operation": "create_url",
            "operationDescription": "WHAT — Add a web URL as a Knowledge Base source. System crawls the page (or follows the sitemap).\nUSE WHEN — Content that lives on the customer's public site and stays in sync via scheduled refresh.\nDO NOT — Re-upload the same URL via create_url to refresh content — it makes a duplicate document. To refresh an existing URL document, use the source's refresh mechanism instead of re-creating."
          },
          "cli": {
            "command": "document create-url"
          }
        },
        "x-speakeasy-group": "document",
        "x-speakeasy-name-override": "create-url",
        "summary": "Create URL document",
        "description": "Adds a document to the knowledge base, a source the knowledge base retrieves from. The response carries the ID that later calls address it by.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          },
          {
            "name": "maxChunkSize",
            "required": false,
            "in": "query",
            "schema": {
              "description": "Determines how granularly each document is broken up. Range available is 500-1500 tokens, default is 1000. Smaller chunk size means narrower context, faster response, less tokens consumed, and greater risk of less accurate answers. Max chunk size affects the total amount of chunks parsed from a document - i.e., larger chunks means less chunks retrieved.",
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                }
              ]
            }
          },
          {
            "name": "overwrite",
            "required": false,
            "in": "query",
            "schema": {
              "description": "If set to true, the existing table with the same name will be overwritten.",
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ],
                  "x-enumNames": [
                    "TRUE",
                    "FALSE"
                  ]
                }
              ]
            }
          },
          {
            "name": "markdownConversion",
            "required": false,
            "in": "query",
            "schema": {
              "description": "When enabled, HTML is automatically converted to markdown to generate better chunks.",
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ],
                  "x-enumNames": [
                    "TRUE",
                    "FALSE"
                  ]
                }
              ]
            }
          },
          {
            "name": "llmBasedChunks",
            "required": false,
            "in": "query",
            "schema": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ],
                  "x-enumNames": [
                    "TRUE",
                    "FALSE"
                  ]
                }
              ]
            },
            "x-vf-doc": {
              "description": "Whether to split the document into chunks with a model rather than by fixed size."
            },
            "description": "Whether to split the document into chunks with a model rather than by fixed size."
          },
          {
            "name": "llmGeneratedQ",
            "required": false,
            "in": "query",
            "schema": {
              "description": "When enabled, an LLM will be used to generate a question based on the document context and specific chunk, then prepend it to the chunk. This enhances retrieval by aligning chunks with potential user queries.",
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ],
                  "x-enumNames": [
                    "TRUE",
                    "FALSE"
                  ]
                }
              ]
            }
          },
          {
            "name": "llmContentSummarization",
            "required": false,
            "in": "query",
            "schema": {
              "description": "When enabled, an LLM summarizes and rewrites the content, removing unnecessary information and focusing on important parts to optimize for retrieval. Limited to 15 rows per table upload.",
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ],
                  "x-enumNames": [
                    "TRUE",
                    "FALSE"
                  ]
                }
              ]
            }
          },
          {
            "name": "llmPrependContext",
            "required": false,
            "in": "query",
            "schema": {
              "description": "When enabled, an LLM generates a context summary based on the document and chunk context, and prepends it to each chunk. This improves retrieval by providing additional context to each chunk. Note: If both llmGeneratedQ and llmPrependContext are set to true, llmGeneratedQ takes precedence, and the context summarization will not be applied.",
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ],
                  "x-enumNames": [
                    "TRUE",
                    "FALSE"
                  ]
                }
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableDocumentCreateURLRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Returns the newly created document, including the ID assigned to it and the status of the import from the URL.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableDocumentResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the newly created document, including the ID assigned to it and the status of the import from the URL."
            }
          }
        },
        "tags": [
          "Document"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds a document to the knowledge base, a source the knowledge base retrieves from. The response carries the ID that later calls address it by."
        }
      }
    },
    "/v1/stable/document/text": {
      "post": {
        "operationId": "StableDocumentController_createText",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_document",
            "toolDescription": "Individual Knowledge Base documents. Four source types: text (plain prose), table (structured rows — each row becomes its own chunk), URL (web page or sitemap — system crawls), file (PDF/DOCX/TXT upload).\nThe metadata model is documented on the table-creation operation — see it for how document-level metadata, searchable fields, non-searchable metadata fields, and chunk-level metadata interact, and which level the agent's Knowledge Base system tool filters on at runtime.\nPredecessor: select the project and environment first.\nSuccessor: query the knowledge base to verify retrieval surfaces the new/updated content with reasonable scores.",
            "operation": "create_text",
            "operationDescription": "WHAT — Add a plain-text document to the Knowledge Base.\nUSE WHEN — Short policies, FAQ entries, or content that doesn't have a source URL.\nDO NOT — Dump CSV/tabular data here. Parse it into rows and use create_table instead so each row becomes a chunk with filterable row-level metadata."
          },
          "cli": {
            "command": "document create-text"
          }
        },
        "x-speakeasy-group": "document",
        "x-speakeasy-name-override": "create-text",
        "summary": "Create text document",
        "description": "Adds a document to the knowledge base, a source the knowledge base retrieves from. The response carries the ID that later calls address it by.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          },
          {
            "name": "maxChunkSize",
            "required": false,
            "in": "query",
            "schema": {
              "description": "Determines how granularly each document is broken up. Range available is 500-1500 tokens, default is 1000. Smaller chunk size means narrower context, faster response, less tokens consumed, and greater risk of less accurate answers. Max chunk size affects the total amount of chunks parsed from a document - i.e., larger chunks means less chunks retrieved.",
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                }
              ]
            }
          },
          {
            "name": "overwrite",
            "required": false,
            "in": "query",
            "schema": {
              "description": "If set to true, the existing table with the same name will be overwritten.",
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ],
                  "x-enumNames": [
                    "TRUE",
                    "FALSE"
                  ]
                }
              ]
            }
          },
          {
            "name": "markdownConversion",
            "required": false,
            "in": "query",
            "schema": {
              "description": "When enabled, HTML is automatically converted to markdown to generate better chunks.",
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ],
                  "x-enumNames": [
                    "TRUE",
                    "FALSE"
                  ]
                }
              ]
            }
          },
          {
            "name": "llmBasedChunks",
            "required": false,
            "in": "query",
            "schema": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ],
                  "x-enumNames": [
                    "TRUE",
                    "FALSE"
                  ]
                }
              ]
            },
            "x-vf-doc": {
              "description": "Whether to split the document into chunks with a model rather than by fixed size."
            },
            "description": "Whether to split the document into chunks with a model rather than by fixed size."
          },
          {
            "name": "llmGeneratedQ",
            "required": false,
            "in": "query",
            "schema": {
              "description": "When enabled, an LLM will be used to generate a question based on the document context and specific chunk, then prepend it to the chunk. This enhances retrieval by aligning chunks with potential user queries.",
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ],
                  "x-enumNames": [
                    "TRUE",
                    "FALSE"
                  ]
                }
              ]
            }
          },
          {
            "name": "llmContentSummarization",
            "required": false,
            "in": "query",
            "schema": {
              "description": "When enabled, an LLM summarizes and rewrites the content, removing unnecessary information and focusing on important parts to optimize for retrieval. Limited to 15 rows per table upload.",
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ],
                  "x-enumNames": [
                    "TRUE",
                    "FALSE"
                  ]
                }
              ]
            }
          },
          {
            "name": "llmPrependContext",
            "required": false,
            "in": "query",
            "schema": {
              "description": "When enabled, an LLM generates a context summary based on the document and chunk context, and prepends it to each chunk. This improves retrieval by providing additional context to each chunk. Note: If both llmGeneratedQ and llmPrependContext are set to true, llmGeneratedQ takes precedence, and the context summarization will not be applied.",
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ],
                  "x-enumNames": [
                    "TRUE",
                    "FALSE"
                  ]
                }
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "description": "An optional source URL to associate with the uploaded document.",
                    "type": "string"
                  },
                  "canEdit": {
                    "default": false,
                    "description": "If true, the document content can be edited in the Creator after upload.",
                    "type": "boolean"
                  },
                  "metadata": {
                    "description": "A JSON-encoded array of `{ key, values }` metadata tags attached to the document, used to filter knowledge base retrieval at runtime.",
                    "type": "string"
                  },
                  "file": {
                    "type": "string",
                    "format": "binary"
                  }
                },
                "required": [
                  "file"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Returns the document created from the supplied text, with its assigned ID, its status, and the smart chunking settings the query parameters selected.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableDocumentResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the document created from the supplied text, with its assigned ID, its status, and the smart chunking settings the query parameters selected."
            }
          }
        },
        "tags": [
          "Document"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds a document to the knowledge base, a source the knowledge base retrieves from. The response carries the ID that later calls address it by."
        }
      }
    },
    "/v1/stable/document/table": {
      "post": {
        "operationId": "StableDocumentController_createTable",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_document",
            "toolDescription": "Individual Knowledge Base documents. Four source types: text (plain prose), table (structured rows — each row becomes its own chunk), URL (web page or sitemap — system crawls), file (PDF/DOCX/TXT upload).\nThe metadata model is documented on the table-creation operation — see it for how document-level metadata, searchable fields, non-searchable metadata fields, and chunk-level metadata interact, and which level the agent's Knowledge Base system tool filters on at runtime.\nPredecessor: select the project and environment first.\nSuccessor: query the knowledge base to verify retrieval surfaces the new/updated content with reasonable scores.",
            "operation": "create_table",
            "operationDescription": "WHAT — Add structured rows as a Knowledge Base document. Each row becomes its own chunk. Items are FLAT objects — the `schema` block declares which top-level keys are full-text indexed (`searchableFields`) vs metadata (`metadataFields`).\nUSE WHEN — Service catalogues, product lists, region/plan-tagged content — anywhere the agent should filter retrieval by structured attributes.\nDO NOT — Nest items as `{ metadata: {...}, content: \"...\" }`. API rejects it. Items must be flat objects; `schema` declares which keys are searchable vs metadata.\nESCAPE HATCH — For filtering the system tool can't express (per-row by `metadataFields`, multi-field logic, fallback chains), scaffold a Function that POSTs to https://general-runtime.voiceflow.com/knowledge-base/query with { question, filters, chunkLimit, synthesis: false }. Mongo-style filter syntax (`$eq`, `$in`, `$ne`). Attach via voiceflow_tool. See public Voiceflow Knowledge Base query API docs for the full request/response shape and the function authoring conventions (`args.inputVars`, `response.json` as property)."
          },
          "cli": {
            "command": "document create-table"
          }
        },
        "x-speakeasy-group": "document",
        "x-speakeasy-name-override": "create-table",
        "summary": "Create table document",
        "description": "Adds a document to the knowledge base, a source the knowledge base retrieves from. The response carries the ID that later calls address it by.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          },
          {
            "name": "maxChunkSize",
            "required": false,
            "in": "query",
            "schema": {
              "description": "Determines how granularly each document is broken up. Range available is 500-1500 tokens, default is 1000. Smaller chunk size means narrower context, faster response, less tokens consumed, and greater risk of less accurate answers. Max chunk size affects the total amount of chunks parsed from a document - i.e., larger chunks means less chunks retrieved.",
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                }
              ]
            }
          },
          {
            "name": "overwrite",
            "required": false,
            "in": "query",
            "schema": {
              "description": "If set to true, the existing table with the same name will be overwritten.",
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ],
                  "x-enumNames": [
                    "TRUE",
                    "FALSE"
                  ]
                }
              ]
            }
          },
          {
            "name": "markdownConversion",
            "required": false,
            "in": "query",
            "schema": {
              "description": "When enabled, HTML is automatically converted to markdown to generate better chunks.",
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ],
                  "x-enumNames": [
                    "TRUE",
                    "FALSE"
                  ]
                }
              ]
            }
          },
          {
            "name": "llmBasedChunks",
            "required": false,
            "in": "query",
            "schema": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ],
                  "x-enumNames": [
                    "TRUE",
                    "FALSE"
                  ]
                }
              ]
            },
            "x-vf-doc": {
              "description": "Whether to split the document into chunks with a model rather than by fixed size."
            },
            "description": "Whether to split the document into chunks with a model rather than by fixed size."
          },
          {
            "name": "llmGeneratedQ",
            "required": false,
            "in": "query",
            "schema": {
              "description": "When enabled, an LLM will be used to generate a question based on the document context and specific chunk, then prepend it to the chunk. This enhances retrieval by aligning chunks with potential user queries.",
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ],
                  "x-enumNames": [
                    "TRUE",
                    "FALSE"
                  ]
                }
              ]
            }
          },
          {
            "name": "llmContentSummarization",
            "required": false,
            "in": "query",
            "schema": {
              "description": "When enabled, an LLM summarizes and rewrites the content, removing unnecessary information and focusing on important parts to optimize for retrieval. Limited to 15 rows per table upload.",
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ],
                  "x-enumNames": [
                    "TRUE",
                    "FALSE"
                  ]
                }
              ]
            }
          },
          {
            "name": "llmPrependContext",
            "required": false,
            "in": "query",
            "schema": {
              "description": "When enabled, an LLM generates a context summary based on the document and chunk context, and prepends it to each chunk. This improves retrieval by providing additional context to each chunk. Note: If both llmGeneratedQ and llmPrependContext are set to true, llmGeneratedQ takes precedence, and the context summarization will not be applied.",
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ],
                  "x-enumNames": [
                    "TRUE",
                    "FALSE"
                  ]
                }
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableDocumentCreateTableRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Returns the document created from the structured data, with its assigned ID and status. The chunks it was split into are not in this response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableDocumentResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the document created from the structured data, with its assigned ID and status. The chunks it was split into are not in this response."
            }
          }
        },
        "tags": [
          "Document"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds a document to the knowledge base, a source the knowledge base retrieves from. The response carries the ID that later calls address it by."
        }
      }
    },
    "/v1/stable/document/{documentID}": {
      "get": {
        "operationId": "StableDocumentController_get",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_document",
            "toolDescription": "Individual Knowledge Base documents. Four source types: text (plain prose), table (structured rows — each row becomes its own chunk), URL (web page or sitemap — system crawls), file (PDF/DOCX/TXT upload).\nThe metadata model is documented on the table-creation operation — see it for how document-level metadata, searchable fields, non-searchable metadata fields, and chunk-level metadata interact, and which level the agent's Knowledge Base system tool filters on at runtime.\nPredecessor: select the project and environment first.\nSuccessor: query the knowledge base to verify retrieval surfaces the new/updated content with reasonable scores.",
            "operation": "get",
            "operationDescription": "WHAT — Fetch one document's metadata plus content (or chunk preview for large docs).\nUSE WHEN — Before update, or inspecting what's actually stored for a specific document."
          },
          "cli": {
            "command": "document get"
          }
        },
        "x-speakeasy-group": "document",
        "x-speakeasy-name-override": "get",
        "summary": "Get document",
        "description": "Returns a single document by ID, with the fields that define it. A document is a source the knowledge base retrieves from.",
        "parameters": [
          {
            "name": "documentID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the knowledge base document to operate on."
            },
            "description": "The ID of the knowledge base document to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns one knowledge base document in full, adding its chunks and metadata to the data, status, and chunking settings the list operation reports.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableDocumentDetailsResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns one knowledge base document in full, adding its chunks and metadata to the data, status, and chunking settings the list operation reports."
            }
          }
        },
        "tags": [
          "Document"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns a single document by ID, with the fields that define it. A document is a source the knowledge base retrieves from."
        }
      },
      "patch": {
        "operationId": "StableDocumentController_update",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_document",
            "toolDescription": "Individual Knowledge Base documents. Four source types: text (plain prose), table (structured rows — each row becomes its own chunk), URL (web page or sitemap — system crawls), file (PDF/DOCX/TXT upload).\nThe metadata model is documented on the table-creation operation — see it for how document-level metadata, searchable fields, non-searchable metadata fields, and chunk-level metadata interact, and which level the agent's Knowledge Base system tool filters on at runtime.\nPredecessor: select the project and environment first.\nSuccessor: query the knowledge base to verify retrieval surfaces the new/updated content with reasonable scores.",
            "operation": "update",
            "operationDescription": "WHAT — Patch a document metadata.\nUSE WHEN — Renaming, replacing content, or adjusting chunking settings."
          },
          "cli": {
            "command": "document update"
          }
        },
        "x-speakeasy-group": "document",
        "x-speakeasy-name-override": "update",
        "summary": "Update document",
        "description": "Changes an existing document in place. The response carries only a confirmation message, so refetch the document to read its new values.",
        "parameters": [
          {
            "name": "documentID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the knowledge base document to operate on."
            },
            "description": "The ID of the knowledge base document to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/StableDocumentUpdateRequest"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confirms the document was updated. The response is a message rather than the revised document, so fetch it again to check its status or read the resulting chunks.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableUpdateResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the document was updated. The response is a message rather than the revised document, so fetch it again to check its status or read the resulting chunks."
            }
          }
        },
        "tags": [
          "Document"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Changes an existing document in place. The response carries only a confirmation message, so refetch the document to read its new values."
        }
      },
      "delete": {
        "operationId": "StableDocumentController_delete",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_document",
            "toolDescription": "Individual Knowledge Base documents. Four source types: text (plain prose), table (structured rows — each row becomes its own chunk), URL (web page or sitemap — system crawls), file (PDF/DOCX/TXT upload).\nThe metadata model is documented on the table-creation operation — see it for how document-level metadata, searchable fields, non-searchable metadata fields, and chunk-level metadata interact, and which level the agent's Knowledge Base system tool filters on at runtime.\nPredecessor: select the project and environment first.\nSuccessor: query the knowledge base to verify retrieval surfaces the new/updated content with reasonable scores.",
            "operation": "delete",
            "operationDescription": "WHAT — Remove a document from the Knowledge Base.\nDO NOT — Delete without first checking which playbooks rely on Knowledge Base retrieval for the content this document covers. The agent's answers will silently degrade if the topic disappears."
          },
          "cli": {
            "command": "document delete"
          }
        },
        "x-speakeasy-group": "document",
        "x-speakeasy-name-override": "delete",
        "summary": "Delete document",
        "description": "Deletes a single document by ID. A document is a source the knowledge base retrieves from. The response carries only a confirmation message, so refetch the documents to see what is left.",
        "parameters": [
          {
            "name": "documentID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the knowledge base document to operate on."
            },
            "description": "The ID of the knowledge base document to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Confirms the document was removed from the knowledge base. The body is a message only, not a copy of the deleted document.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableDeleteResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the document was removed from the knowledge base. The body is a message only, not a copy of the deleted document."
            }
          }
        },
        "tags": [
          "Document"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Deletes a single document by ID. A document is a source the knowledge base retrieves from. The response carries only a confirmation message, so refetch the documents to see what is left."
        }
      }
    },
    "/v1/stable/integration": {
      "get": {
        "operationId": "StableIntegrationController_list",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_integration",
            "toolDescription": "Inspect and manage the third-party integrations a project can use (Zendesk, Twilio, Salesforce, Shopify, ElevenLabs and friends). Standard flow: list the catalog to see what exists and what is already connected → connect the api-key ones with credentials → disconnect to clear stored credentials.\nPredecessor: select the project first.\nSuccessor: attach integration tools to a playbook or to the agent.",
            "operation": "list",
            "operationDescription": "WHAT — List the full integration catalog with a connected flag per integration. Never returns credential values.\nUSE WHEN — Discovering what a project can integrate with, or checking what is already wired up.\nAFTER — Only entries with connectableViaAPI true can be connected through this API; the rest are browser flows in the Voiceflow UI."
          },
          "cli": {
            "command": "integration list"
          }
        },
        "x-speakeasy-group": "integration",
        "x-speakeasy-name-override": "list",
        "summary": "List integrations",
        "description": "Returns the integrations a project can use and whether each is connected. `connectionType` says how credentials arrive: `api-key` ones connect through this API, `oauth` and `app` ones only through the Voiceflow UI. The call is unpaginated: it takes no paging parameters, so one request yields the whole set.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns one entry per integration the project can use, each with its identifier, display name, connection type, whether credentials are stored, and whether this API can connect it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableIntegrationListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns one entry per integration the project can use, each with its identifier, display name, connection type, whether credentials are stored, and whether this API can connect it."
            }
          }
        },
        "tags": [
          "Integration"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns the integrations a project can use and whether each is connected. `connectionType` says how credentials arrive: `api-key` ones connect through this API, `oauth` and `app` ones only through the Voiceflow UI. The call is unpaginated: it takes no paging parameters, so one request yields the whole set."
        }
      }
    },
    "/v1/stable/integration/{integration}": {
      "post": {
        "operationId": "StableIntegrationController_connect",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_integration",
            "toolDescription": "Inspect and manage the third-party integrations a project can use (Zendesk, Twilio, Salesforce, Shopify, ElevenLabs and friends). Standard flow: list the catalog to see what exists and what is already connected → connect the api-key ones with credentials → disconnect to clear stored credentials.\nPredecessor: select the project first.\nSuccessor: attach integration tools to a playbook or to the agent.",
            "operation": "connect",
            "operationDescription": "WHAT — Store credentials for an api-key integration.\nDO NOT — Call this. Credentials must never pass through an MCP client; this operation is refused for them. Direct the user to the Voiceflow UI instead."
          },
          "cli": {
            "command": "integration connect"
          }
        },
        "x-speakeasy-group": "integration",
        "x-speakeasy-name-override": "connect",
        "x-vf-client-restriction": {
          "deniedClientTypes": [
            "mcp"
          ],
          "guidance": "Connecting an integration requires handing over live credentials, which MCP clients may not do. Ask the user to connect this integration from the Voiceflow UI."
        },
        "summary": "Connect integration",
        "description": "Stores the credentials for one `api-key` integration on the project, in the shape that integration expects; `oauth` and `app` integrations connect through the Voiceflow UI instead. The response carries only a confirmation message, so refetch the integration list to see the connection.",
        "parameters": [
          {
            "name": "integration",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The integration identifier, as `GET /v1/stable/integration` lists it (for example `twilio`)."
            },
            "description": "The integration identifier, as `GET /v1/stable/integration` lists it (for example `twilio`)."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableIntegrationConnectRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confirms the credentials were stored. The body is a message only, so refetch the integration list to see `connected` flip for this integration.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableUpdateResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the credentials were stored. The body is a message only, so refetch the integration list to see `connected` flip for this integration."
            }
          }
        },
        "tags": [
          "Integration"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Stores the credentials for one `api-key` integration on the project, in the shape that integration expects; `oauth` and `app` integrations connect through the Voiceflow UI instead. The response carries only a confirmation message, so refetch the integration list to see the connection."
        }
      },
      "delete": {
        "operationId": "StableIntegrationController_disconnect",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_integration",
            "toolDescription": "Inspect and manage the third-party integrations a project can use (Zendesk, Twilio, Salesforce, Shopify, ElevenLabs and friends). Standard flow: list the catalog to see what exists and what is already connected → connect the api-key ones with credentials → disconnect to clear stored credentials.\nPredecessor: select the project first.\nSuccessor: attach integration tools to a playbook or to the agent.",
            "operation": "disconnect",
            "operationDescription": "WHAT — Clear every stored credential slot an integration owns on this project.\nUSE WHEN — Retiring an integration, or forcing a reconnect.\nDO NOT — Expect this to work for integrations whose credentials the integration service owns (Zendesk, Salesforce); those return a 400 and must be disconnected from the Voiceflow UI."
          },
          "cli": {
            "command": "integration disconnect"
          }
        },
        "x-speakeasy-group": "integration",
        "x-speakeasy-name-override": "disconnect",
        "summary": "Disconnect integration",
        "description": "Clears the stored credentials for one integration on the project, every slot it owns. The response carries only a confirmation message, so refetch the integration list to see it disconnected.",
        "parameters": [
          {
            "name": "integration",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The integration identifier, as `GET /v1/stable/integration` lists it (for example `twilio`)."
            },
            "description": "The integration identifier, as `GET /v1/stable/integration` lists it (for example `twilio`)."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Confirms the integration was disconnected. The body is a message only, so refetch the integration list to see `connected` turn false.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableDeleteResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the integration was disconnected. The body is a message only, so refetch the integration list to see `connected` turn false."
            }
          }
        },
        "tags": [
          "Integration"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Clears the stored credentials for one integration on the project, every slot it owns. The response carries only a confirmation message, so refetch the integration list to see it disconnected."
        }
      }
    },
    "/v1/stable/mcp-server": {
      "get": {
        "operationId": "StableMCPServerController_list",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_mcp_server",
            "toolDescription": "Manage connections to upstream MCP servers and the specific tools they expose. Standard flow: register a server and all the tools it exposes → list those tools → attach the ones you want to a playbook or to the agent.\nA server's auth lives in its header values, which reference a secret by ID rather than holding the credential; sending one as literal text is refused.\nPredecessor: select the project and environment first.\nSuccessor: list the server's MCP tools to discover what's available.",
            "operation": "list",
            "operationDescription": "WHAT — List MCP servers currently connected to this project.\nUSE WHEN — Discovering which upstream services are wired in."
          },
          "cli": {
            "command": "mcp-server list"
          }
        },
        "x-speakeasy-group": "mcp-server",
        "x-speakeasy-name-override": "list",
        "summary": "List MCP servers",
        "description": "Returns every MCP server in the environment. A MCP server is a registered Model Context Protocol server whose tools an agent can call. The call takes no paging parameters, so one request yields the whole set.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns every MCP server connected to the project's environment, each with its URL, description, icon, and the MCP specification version it was registered against.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableMCPServerListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns every MCP server connected to the project's environment, each with its URL, description, icon, and the MCP specification version it was registered against."
            }
          }
        },
        "tags": [
          "MCP Server"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns every MCP server in the environment. A MCP server is a registered Model Context Protocol server whose tools an agent can call. The call takes no paging parameters, so one request yields the whole set."
        }
      },
      "post": {
        "operationId": "StableMCPServerController_create",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_mcp_server",
            "toolDescription": "Manage connections to upstream MCP servers and the specific tools they expose. Standard flow: register a server and all the tools it exposes → list those tools → attach the ones you want to a playbook or to the agent.\nA server's auth lives in its header values, which reference a secret by ID rather than holding the credential; sending one as literal text is refused.\nPredecessor: select the project and environment first.\nSuccessor: list the server's MCP tools to discover what's available.",
            "operation": "create",
            "operationDescription": "WHAT — Register a new MCP server endpoint with URL + auth headers + optional custom instructions for the LLM.\nUSE WHEN — Connecting a new upstream MCP service.\nBEFORE — Every header value must reference a secret instead of carrying the credential: create an EMPTY secret with voiceflow_secret.create, then send its ID as the header value (`value: [{ secretID }]`, or `value: ['Bearer ', { secretID }]` when the scheme prefix is needed) and tell the user to fill that secret in.\nAFTER — voiceflow_mcp_server.sync to pull the server's tool catalog.\nDO NOT — Send a header value that is literal text, even when the user pasted the credential into the conversation. Such a request is refused and no server is created. The same refusal covers a header that is not a credential at all (`Content-Type`, a tenant ID) — ask the user to add those in the Voiceflow UI (Agent settings → MCP servers).\nDO NOT — Put a credential in the URL either. Reference a secret there the same way: a token written into a path segment or a query parameter is stored verbatim and is never redacted on read."
          },
          "cli": {
            "command": "mcp-server create"
          }
        },
        "x-speakeasy-group": "mcp-server",
        "x-speakeasy-name-override": "create",
        "x-vf-client-restriction": {
          "deniedClientTypes": [
            "mcp"
          ],
          "guidance": "An MCP server header value cannot be sent as literal text from an MCP client — the credential would be recorded in this conversation. Reference a secret instead (`value: [{ secretID }]`, or `value: ['Bearer ', { secretID }]` when the scheme prefix is needed). A header that is genuinely not a credential has to be added in the Voiceflow UI (Agent settings → MCP servers), with the Voiceflow CLI, or through the Voiceflow REST API.",
          "condition": "Only when a header value carries literal text that does not reference a secret or variable."
        },
        "summary": "Create MCP server",
        "description": "Adds a MCP server to the environment, a registered Model Context Protocol server whose tools an agent can call. The response carries the ID that later calls address it by.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableMCPServerCreateRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Creates the connection to the MCP server and returns it with its generated ID, URL, and specification version. The tools the server exposes are read through the MCP tool endpoints.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableMCPServerResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Creates the connection to the MCP server and returns it with its generated ID, URL, and specification version. The tools the server exposes are read through the MCP tool endpoints."
            }
          }
        },
        "tags": [
          "MCP Server"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds a MCP server to the environment, a registered Model Context Protocol server whose tools an agent can call. The response carries the ID that later calls address it by."
        }
      }
    },
    "/v1/stable/mcp-server/{serverID}": {
      "get": {
        "operationId": "StableMCPServerController_get",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_mcp_server",
            "toolDescription": "Manage connections to upstream MCP servers and the specific tools they expose. Standard flow: register a server and all the tools it exposes → list those tools → attach the ones you want to a playbook or to the agent.\nA server's auth lives in its header values, which reference a secret by ID rather than holding the credential; sending one as literal text is refused.\nPredecessor: select the project and environment first.\nSuccessor: list the server's MCP tools to discover what's available.",
            "operation": "get",
            "operationDescription": "WHAT — Fetch one MCP server's full config (URL, headers, custom instructions). Secrets are redacted.\nUSE WHEN — Before editing the server config."
          },
          "cli": {
            "command": "mcp-server get"
          }
        },
        "x-speakeasy-group": "mcp-server",
        "x-speakeasy-name-override": "get",
        "summary": "Get MCP server",
        "description": "Returns a single MCP server by ID, with the fields that define it. A MCP server is a registered Model Context Protocol server whose tools an agent can call.",
        "parameters": [
          {
            "name": "serverID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the MCP server to operate on."
            },
            "description": "The ID of the MCP server to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns one MCP server's stored configuration: its name, URL, description, icon, and specification version.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableMCPServerResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns one MCP server's stored configuration: its name, URL, description, icon, and specification version."
            }
          }
        },
        "tags": [
          "MCP Server"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns a single MCP server by ID, with the fields that define it. A MCP server is a registered Model Context Protocol server whose tools an agent can call."
        }
      },
      "patch": {
        "operationId": "StableMCPServerController_update",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_mcp_server",
            "toolDescription": "Manage connections to upstream MCP servers and the specific tools they expose. Standard flow: register a server and all the tools it exposes → list those tools → attach the ones you want to a playbook or to the agent.\nA server's auth lives in its header values, which reference a secret by ID rather than holding the credential; sending one as literal text is refused.\nPredecessor: select the project and environment first.\nSuccessor: list the server's MCP tools to discover what's available.",
            "operation": "update",
            "operationDescription": "WHAT — Patch an MCP server's config. Partial PATCH.\nUSE WHEN — Renaming a server, moving its endpoint, or pointing a header at a different secret.\nDO NOT — Send a header value that is literal text; the refusal described on voiceflow_mcp_server.create applies here too. Rotating a credential is a change to the secret's value, not to the header: leave the header referencing the secret and tell the user to update it in the Voiceflow UI (Agent settings → Secrets), with the Voiceflow CLI, or through the Voiceflow REST API."
          },
          "cli": {
            "command": "mcp-server update"
          }
        },
        "x-speakeasy-group": "mcp-server",
        "x-speakeasy-name-override": "update",
        "x-vf-client-restriction": {
          "deniedClientTypes": [
            "mcp"
          ],
          "guidance": "An MCP server header value cannot be sent as literal text from an MCP client — the credential would be recorded in this conversation. Reference a secret instead (`value: [{ secretID }]`, or `value: ['Bearer ', { secretID }]` when the scheme prefix is needed). A header that is genuinely not a credential has to be added in the Voiceflow UI (Agent settings → MCP servers), with the Voiceflow CLI, or through the Voiceflow REST API.",
          "condition": "Only when a header value carries literal text that does not reference a secret or variable."
        },
        "summary": "Update MCP server",
        "description": "Changes an existing MCP server in place. The response carries only a confirmation message, so refetch the MCP server to read its new values.",
        "parameters": [
          {
            "name": "serverID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the MCP server to operate on."
            },
            "description": "The ID of the MCP server to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/StableMCPServerUpdateRequest"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confirms the server's connection details were updated. The body is a message only, so refetch the server to read its current URL, description, and specification version.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableUpdateResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the server's connection details were updated. The body is a message only, so refetch the server to read its current URL, description, and specification version."
            }
          }
        },
        "tags": [
          "MCP Server"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Changes an existing MCP server in place. The response carries only a confirmation message, so refetch the MCP server to read its new values."
        }
      },
      "delete": {
        "operationId": "StableMCPServerController_delete",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_mcp_server",
            "toolDescription": "Manage connections to upstream MCP servers and the specific tools they expose. Standard flow: register a server and all the tools it exposes → list those tools → attach the ones you want to a playbook or to the agent.\nA server's auth lives in its header values, which reference a secret by ID rather than holding the credential; sending one as literal text is refused.\nPredecessor: select the project and environment first.\nSuccessor: list the server's MCP tools to discover what's available.",
            "operation": "delete",
            "operationDescription": "WHAT — Unregister an MCP server.\nBEFORE — Check whether any voiceflow_tool or playbook attachments reference tools from this server — references break at runtime when the server is gone."
          },
          "cli": {
            "command": "mcp-server delete"
          }
        },
        "x-speakeasy-group": "mcp-server",
        "x-speakeasy-name-override": "delete",
        "summary": "Delete MCP server",
        "description": "Deletes a single MCP server by ID. A MCP server is a registered Model Context Protocol server whose tools an agent can call. The response carries only a confirmation message, so refetch the MCP servers to see what is left.",
        "parameters": [
          {
            "name": "serverID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the MCP server to operate on."
            },
            "description": "The ID of the MCP server to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Confirms the MCP server connection was removed from the project. The body is a message only, so refetch the project's MCP servers and tools to see what is left.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableDeleteResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the MCP server connection was removed from the project. The body is a message only, so refetch the project's MCP servers and tools to see what is left."
            }
          }
        },
        "tags": [
          "MCP Server"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Deletes a single MCP server by ID. A MCP server is a registered Model Context Protocol server whose tools an agent can call. The response carries only a confirmation message, so refetch the MCP servers to see what is left."
        }
      }
    },
    "/v1/stable/mcp-server/{serverID}/sync": {
      "put": {
        "operationId": "StableMCPServerController_sync",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_mcp_server",
            "toolDescription": "Manage connections to upstream MCP servers and the specific tools they expose. Standard flow: register a server and all the tools it exposes → list those tools → attach the ones you want to a playbook or to the agent.\nA server's auth lives in its header values, which reference a secret by ID rather than holding the credential; sending one as literal text is refused.\nPredecessor: select the project and environment first.\nSuccessor: list the server's MCP tools to discover what's available.",
            "operation": "sync",
            "operationDescription": "WHAT — Refetch the upstream MCP server's tool catalog and update the cached list of available tools.\nUSE WHEN — The server has added or removed tools since last sync, or you suspect the local catalog is stale."
          },
          "cli": {
            "command": "mcp-server sync"
          }
        },
        "x-speakeasy-group": "mcp-server",
        "x-speakeasy-name-override": "sync",
        "summary": "Sync MCP server",
        "description": "Refreshes the stored list of tools an MCP server advertises, which is how MCP tools come to exist rather than being created by hand.",
        "parameters": [
          {
            "name": "serverID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the MCP server to operate on."
            },
            "description": "The ID of the MCP server to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Confirms the sync ran against the server. The body is a message and does not itemise what changed, so list the project's MCP tools to see the server's current set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableUpdateResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the sync ran against the server. The body is a message and does not itemise what changed, so list the project's MCP tools to see the server's current set."
            }
          }
        },
        "tags": [
          "MCP Server"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Refreshes the stored list of tools an MCP server advertises, which is how MCP tools come to exist rather than being created by hand."
        }
      }
    },
    "/v1/stable/mcp-tool": {
      "get": {
        "operationId": "StableMCPToolController_list",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_mcp_tool",
            "toolDescription": "Discover tools registered on known MCP servers.\nPredecessor: register the MCP server first.\nSuccessor: attach the MCP tool at agent level, then run a test conversation.",
            "operation": "list",
            "operationDescription": "WHAT — List configured MCP tools across all servers in this project.\nUSE WHEN — Auditing all agent-callable MCP tools regardless of which server they come from."
          },
          "cli": {
            "command": "mcp-tool list"
          }
        },
        "x-speakeasy-group": "mcp-tool",
        "x-speakeasy-name-override": "list",
        "summary": "List MCP tools",
        "description": "Returns every MCP tool in its server. A MCP tool is a tool an MCP server advertises, populated by syncing the server rather than by hand. The call takes no paging parameters, so one request yields the whole set.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          },
          {
            "name": "serverID",
            "required": false,
            "in": "query",
            "schema": {
              "description": "When provided, only tools belonging to the MCP server with this ID are returned.",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns every MCP tool available in the project's environment, each with the name, description, and input JSON Schema its server declared, plus the ID of the server it came from. Pass serverID to narrow the list to one server.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableMCPToolListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns every MCP tool available in the project's environment, each with the name, description, and input JSON Schema its server declared, plus the ID of the server it came from. Pass serverID to narrow the list to one server."
            }
          }
        },
        "tags": [
          "MCP Tool"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns every MCP tool in its server. A MCP tool is a tool an MCP server advertises, populated by syncing the server rather than by hand. The call takes no paging parameters, so one request yields the whole set."
        }
      }
    },
    "/v1/stable/mcp-tool/{toolID}": {
      "get": {
        "operationId": "StableMCPToolController_get",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_mcp_tool",
            "toolDescription": "Discover tools registered on known MCP servers.\nPredecessor: register the MCP server first.\nSuccessor: attach the MCP tool at agent level, then run a test conversation.",
            "operation": "get",
            "operationDescription": "WHAT — Fetch a single configured MCP tool."
          },
          "cli": {
            "command": "mcp-tool get"
          }
        },
        "x-speakeasy-group": "mcp-tool",
        "x-speakeasy-name-override": "get",
        "summary": "Get MCP tool",
        "description": "Returns a single MCP tool by ID, with the fields that define it. A MCP tool is a tool an MCP server advertises, populated by syncing the server rather than by hand.",
        "parameters": [
          {
            "name": "toolID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the tool to operate on."
            },
            "description": "The ID of the tool to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns one MCP tool with the name and description its server declared and the JSON Schema for its input arguments. MCP tools are defined on the server itself, so these records are read-only in Voiceflow.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableMCPToolResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns one MCP tool with the name and description its server declared and the JSON Schema for its input arguments. MCP tools are defined on the server itself, so these records are read-only in Voiceflow."
            }
          }
        },
        "tags": [
          "MCP Tool"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns a single MCP tool by ID, with the fields that define it. A MCP tool is a tool an MCP server advertises, populated by syncing the server rather than by hand."
        }
      }
    },
    "/v1/stable/secret": {
      "get": {
        "operationId": "StableSecretController_list",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_secret",
            "toolDescription": "Manage the project's secrets — named, write-only credentials (API keys, bearer tokens) that tools and integrations reference by ID instead of embedding the literal value. This surface returns IDs, names and whether a value is set; it never returns a value.\nPredecessor: select the project first.\nSuccessor: use a secret's ID as a tool input default (`defaultValue: [{ secretID }]`) so the tool fills the credential at runtime.",
            "operation": "list",
            "operationDescription": "WHAT — List the project's secrets: ID, name, visibility, and whether a project-level value is set. Values are never returned.\nUSE WHEN — You need a secret's ID to reference it as a tool input default (`defaultValue: [{ secretID }]`), or to check which secrets already exist before creating another.\nDO NOT — Expect to read a secret's value here or anywhere else in this API. Values are write-only."
          },
          "cli": {
            "command": "secret list"
          }
        },
        "x-speakeasy-group": "secret",
        "x-speakeasy-name-override": "list",
        "summary": "List secrets",
        "description": "Returns the secrets defined on a project: name, visibility and whether a value has been stored for it, never the value itself. To learn which environment versions hold a value, use the override list. The call is unpaginated: it takes no paging parameters, so one request yields the whole set.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns every secret on the project with its ID, name, visibility, whether a value has been stored, and its timestamps; values are never included.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableSecretListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns every secret on the project with its ID, name, visibility, whether a value has been stored, and its timestamps; values are never included."
            }
          }
        },
        "tags": [
          "Secret"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns the secrets defined on a project: name, visibility and whether a value has been stored for it, never the value itself. To learn which environment versions hold a value, use the override list. The call is unpaginated: it takes no paging parameters, so one request yields the whole set."
        }
      },
      "post": {
        "operationId": "StableSecretController_create",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_secret",
            "toolDescription": "Manage the project's secrets — named, write-only credentials (API keys, bearer tokens) that tools and integrations reference by ID instead of embedding the literal value. This surface returns IDs, names and whether a value is set; it never returns a value.\nPredecessor: select the project first.\nSuccessor: use a secret's ID as a tool input default (`defaultValue: [{ secretID }]`) so the tool fills the credential at runtime.",
            "operation": "create",
            "operationDescription": "WHAT — Create a named, EMPTY secret. Returns its ID, which is what you put in a tool input default (`defaultValue: [{ secretID }]`).\nUSE WHEN — A tool or integration needs a credential that must not be written literally into a URL, header or prompt.\nAFTER — Reference the returned ID from the tool input, then tell the user the secret has no value yet and that they must set it themselves in the Voiceflow UI (Agent settings → Secrets), with the Voiceflow CLI, or through the Voiceflow REST API.\nDO NOT — Send `defaultValue`. A secret value cannot be set from this client at all: a request carrying one is refused and no secret is created. Omit the field even when the user has pasted the credential into the conversation, and do not fall back to voiceflow_secret.set_value — that is refused for the same reason."
          },
          "cli": {
            "command": "secret create"
          }
        },
        "x-speakeasy-group": "secret",
        "x-speakeasy-name-override": "create",
        "x-vf-client-restriction": {
          "deniedClientTypes": [
            "mcp"
          ],
          "guidance": "A secret value cannot be set from an MCP client. Create the secret without `defaultValue`, then set the value in the Voiceflow UI (Agent settings → Secrets), with the Voiceflow CLI, or through the Voiceflow REST API.",
          "condition": "Only when the request body carries a non-empty `defaultValue`."
        },
        "summary": "Create secret",
        "description": "Creates a secret on the project, optionally with its value, which is written to the `main` environment's published version and never read back. Omit the value to create a placeholder for a teammate to fill in the Voiceflow UI; MCP clients must create it empty.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableSecretCreateRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Returns the new secret with its generated ID, the value to reference from a tool input default so the credential is injected at runtime, plus its name, visibility and whether a value is stored. When a value was sent, the response also names the environment version it was written to.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableSecretResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the new secret with its generated ID, the value to reference from a tool input default so the credential is injected at runtime, plus its name, visibility and whether a value is stored. When a value was sent, the response also names the environment version it was written to."
            }
          }
        },
        "tags": [
          "Secret"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Creates a secret on the project, optionally with its value, which is written to the `main` environment's published version and never read back. Omit the value to create a placeholder for a teammate to fill in the Voiceflow UI; MCP clients must create it empty."
        }
      }
    },
    "/v1/stable/secret/override": {
      "get": {
        "operationId": "StableSecretController_listOverrides",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_secret",
            "toolDescription": "Manage the project's secrets — named, write-only credentials (API keys, bearer tokens) that tools and integrations reference by ID instead of embedding the literal value. This surface returns IDs, names and whether a value is set; it never returns a value.\nPredecessor: select the project first.\nSuccessor: use a secret's ID as a tool input default (`defaultValue: [{ secretID }]`) so the tool fills the credential at runtime.",
            "operation": "list_overrides",
            "operationDescription": "WHAT — List which secrets are overridden per environment, and on which version of that environment (`draft` or `published`). Only IDs are returned, never values.\nUSE WHEN — A tool behaves differently between environments and you need to know whether the environment overrides the secret rather than falling back to the project default.\nBEFORE — Run voiceflow_secret.list to map the returned secret IDs back to names."
          },
          "cli": {
            "command": "secret list-overrides"
          }
        },
        "x-speakeasy-group": "secret",
        "x-speakeasy-name-override": "list-overrides",
        "summary": "List secret overrides",
        "description": "Returns which environment versions hold a value of their own for each secret, as secret IDs grouped by environment alias and `draft` or `published` variant; values are never included. The call is unpaginated: it takes no paging parameters, so one request yields the whole set.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns one entry per environment version that holds a value for at least one secret, each with the environment alias, the `draft` or `published` variant, and the IDs of the secrets with a value there.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableSecretOverrideListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns one entry per environment version that holds a value for at least one secret, each with the environment alias, the `draft` or `published` variant, and the IDs of the secrets with a value there."
            }
          }
        },
        "tags": [
          "Secret"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns which environment versions hold a value of their own for each secret, as secret IDs grouped by environment alias and `draft` or `published` variant; values are never included. The call is unpaginated: it takes no paging parameters, so one request yields the whole set."
        }
      }
    },
    "/v1/stable/secret/{secretID}": {
      "delete": {
        "operationId": "StableSecretController_delete",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_secret",
            "toolDescription": "Manage the project's secrets — named, write-only credentials (API keys, bearer tokens) that tools and integrations reference by ID instead of embedding the literal value. This surface returns IDs, names and whether a value is set; it never returns a value.\nPredecessor: select the project first.\nSuccessor: use a secret's ID as a tool input default (`defaultValue: [{ secretID }]`) so the tool fills the credential at runtime.",
            "operation": "delete",
            "operationDescription": "WHAT — Permanently delete a secret, its project value and every environment override.\nBEFORE — Check whether any tool, function or integration still references this secret ID as an input default; those references break at runtime once it is gone."
          },
          "cli": {
            "command": "secret delete"
          }
        },
        "x-speakeasy-group": "secret",
        "x-speakeasy-name-override": "delete",
        "summary": "Delete secret",
        "description": "Deletes a secret by ID, taking every environment's values for it with it. The response carries only a confirmation message, so refetch the secret list to see what is left.",
        "parameters": [
          {
            "name": "secretID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the secret to operate on."
            },
            "description": "The ID of the secret to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Confirms the secret was deleted. The body is a message only, so refetch the secret list and the override list to see it gone from both.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableDeleteResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the secret was deleted. The body is a message only, so refetch the secret list and the override list to see it gone from both."
            }
          }
        },
        "tags": [
          "Secret"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Deletes a secret by ID, taking every environment's values for it with it. The response carries only a confirmation message, so refetch the secret list to see what is left."
        }
      }
    },
    "/v1/stable/secret/{secretID}/value": {
      "put": {
        "operationId": "StableSecretController_setValue",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_secret",
            "toolDescription": "Manage the project's secrets — named, write-only credentials (API keys, bearer tokens) that tools and integrations reference by ID instead of embedding the literal value. This surface returns IDs, names and whether a value is set; it never returns a value.\nPredecessor: select the project first.\nSuccessor: use a secret's ID as a tool input default (`defaultValue: [{ secretID }]`) so the tool fills the credential at runtime.",
            "operation": "set_value",
            "operationDescription": "WHAT — Set a secret's value: the project default, or an override on one environment version.\nDO NOT — Call this. Secret values cannot be set from an MCP client and the request will be refused. Tell the user to set the value in the Voiceflow UI (Agent settings → Secrets), with the Voiceflow CLI, or through the Voiceflow REST API."
          },
          "cli": {
            "command": "secret set-value"
          }
        },
        "x-speakeasy-group": "secret",
        "x-speakeasy-name-override": "set-value",
        "x-vf-client-restriction": {
          "deniedClientTypes": [
            "mcp"
          ],
          "guidance": "Secret values cannot be set from an MCP client. Set the value in the Voiceflow UI (Agent settings → Secrets), with the Voiceflow CLI, or through the Voiceflow REST API."
        },
        "summary": "Set secret value",
        "description": "Sets a secret's value on one version of an environment. Without `environmentAlias` it writes the `main` environment's published version. With `environmentAlias`, pass `versionVariant` (`published` or `draft`) to name the version to write. The value is never read back; MCP clients cannot call this.",
        "parameters": [
          {
            "name": "secretID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the secret to operate on."
            },
            "description": "The ID of the secret to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableSecretValueRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confirms the value was stored and names the environment version it was written to. Only when there is no environment to name, such as a project that predates environments, does the confirmation stand alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableUpdateResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the value was stored and names the environment version it was written to. Only when there is no environment to name, such as a project that predates environments, does the confirmation stand alone."
            }
          }
        },
        "tags": [
          "Secret"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Sets a secret's value on one version of an environment. Without `environmentAlias` it writes the `main` environment's published version. With `environmentAlias`, pass `versionVariant` (`published` or `draft`) to name the version to write. The value is never read back; MCP clients cannot call this."
        }
      }
    },
    "/v1/stable/knowledge-base/query": {
      "post": {
        "operationId": "StableKnowledgeBaseController_query",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_knowledge_base",
            "toolDescription": "The project's RAG corpus. Queried at runtime by playbooks and the main agent when the Knowledge Base system tool is enabled on the agent.\nFor the metadata model (what's filterable by the agent at runtime, and how to lay out searchable vs metadata fields when uploading a table), see the document table-creation operation.\nPredecessor: select the project first.\nSuccessor: manage content on the document surface; run a test conversation to verify the Knowledge Base surfaces relevant chunks at runtime when the agent uses it.",
            "operation": "query",
            "operationDescription": "WHAT — Run a natural-language query against the Knowledge Base and return top-K chunks. Accepts metadata filters (see `voiceflow_document.create_table` for the metadata model). Toggle `synthesis: true` for a synthesized answer string; `synthesis: false` returns raw chunks.\nUSE WHEN — Build-time verification — testing whether the Knowledge Base returns the expected chunks for representative queries, or debugging \"the bot can't find X in the docs.\"\nDO NOT — Use this as a runtime path. The agent calls the Knowledge Base via the system tool at runtime, not via this MCP op. This is build-time diagnostic only. Flag any chunk with a relevance score < 0.6 as a Knowledge Base gap."
          },
          "cli": {
            "command": "knowledge-base query"
          }
        },
        "x-speakeasy-group": "knowledge-base",
        "x-speakeasy-name-override": "query",
        "summary": "Query knowledge base",
        "description": "Searches the knowledge base and returns the passages a retrieval would surface, which is how to see what an agent will be grounded on before it answers.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableKnowledgeBaseQueryRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns the answer generated from the knowledge base and the chunks it was drawn from, alongside the model used, the duration, and the token accounting for the call.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableKnowledgeBaseQueryResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the answer generated from the knowledge base and the chunks it was drawn from, alongside the model used, the duration, and the token accounting for the call."
            }
          }
        },
        "tags": [
          "Knowledge Base"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Searches the knowledge base and returns the passages a retrieval would surface, which is how to see what an agent will be grounded on before it answers."
        }
      }
    },
    "/v1/stable/conversation/{userID}": {
      "put": {
        "operationId": "StableConversationController_send",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_conversation",
            "toolDescription": "Drive a live test session against the agent runtime, turn by turn. You send actions (launch, text, intent, event) and the runtime returns trace arrays you inspect (text, speak, cardV2, choice, end, debug). The most common build-loop smoke test — verify a change actually works before publishing.\nPredecessor: select the project and environment first, and recompile the environment after any edits (otherwise the test runs against the last-compiled version and changes won't be reflected).\nSuccessor: search transcripts to find the resulting one for deeper inspection, or head back to the build surfaces to apply a fix.",
            "operation": "send",
            "operationDescription": "WHAT — Send a turn input to the runtime. Action types: text (most common), intent (test a specific intent branch), event (extension-emitted), launch (start).\nUSE WHEN — Driving a multi-turn conversation, simulating a user message.\nAFTER — Inspect the returned trace array carefully: right trace type for the channel (text on chat, speak/audio on voice); tool called when expected and with the right args; error paths handled; no information leakage (\"I checked the knowledge base...\"); no re-greeting; variables not showing as literal \"0\" because they weren't pre-resolved.\nDO NOT — Conclude success based on the visible agent reply alone. The reply often looks fine while a tool silently failed or returned empty — you'll only catch it by reading the trace."
          },
          "cli": {
            "command": "conversation send"
          }
        },
        "x-speakeasy-group": "conversation",
        "x-speakeasy-name-override": "send",
        "summary": "Send",
        "description": "Advances a conversation by one turn: the body carries the action to apply, and the response carries the traces the agent produced in reply.",
        "parameters": [
          {
            "name": "userID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID identifying this conversation. Any stable string you choose; the same value addresses the same conversation on every call."
            },
            "description": "The ID identifying this conversation. Any stable string you choose; the same value addresses the same conversation on every call."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableConversationSendRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns the agent's response to the turn as an array of traces, each a typed piece of the reply such as text, speech, a card or carousel, a choice, a tool call, or a debug entry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableConversationSendResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the agent's response to the turn as an array of traces, each a typed piece of the reply such as text, speech, a card or carousel, a choice, a tool call, or a debug entry."
            }
          }
        },
        "tags": [
          "Conversation"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Advances a conversation by one turn: the body carries the action to apply, and the response carries the traces the agent produced in reply."
        }
      }
    },
    "/v1/stable/conversation-state/{userID}": {
      "get": {
        "operationId": "StableConversationStateController_get",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_conversation",
            "toolDescription": "Drive a live test session against the agent runtime, turn by turn. You send actions (launch, text, intent, event) and the runtime returns trace arrays you inspect (text, speak, cardV2, choice, end, debug). The most common build-loop smoke test — verify a change actually works before publishing.\nPredecessor: select the project and environment first, and recompile the environment after any edits (otherwise the test runs against the last-compiled version and changes won't be reflected).\nSuccessor: search transcripts to find the resulting one for deeper inspection, or head back to the build surfaces to apply a fix.",
            "operation": "get_state",
            "operationDescription": "WHAT — Read the session's current state — stack, variables, storage.\nUSE WHEN — Mid-conversation debugging — what does the agent think the customer's name is right now? Which variables actually populated after the last tool call?"
          },
          "cli": {
            "command": "conversation state get"
          }
        },
        "x-speakeasy-group": "conversation.state",
        "x-speakeasy-name-override": "get",
        "summary": "Get state",
        "description": "Returns the stored state for one conversation - where it stands and what its variables hold - addressed by the same `userID` used to run it.",
        "parameters": [
          {
            "name": "userID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID identifying this conversation. Any stable string you choose; the same value addresses the same conversation on every call."
            },
            "description": "The ID identifying this conversation. Any stable string you choose; the same value addresses the same conversation on every call."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          },
          {
            "name": "version",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "draft",
                "published"
              ],
              "x-enumNames": [
                "DRAFT",
                "PUBLISHED"
              ]
            },
            "x-vf-doc": {
              "description": "Which version of the environment to read: the editable draft or the published one."
            },
            "description": "Which version of the environment to read: the editable draft or the published one."
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the user's session state for the requested version of the environment: every variable and its current value, the runtime storage carried between turns, and the execution stack showing which diagram and node the conversation is sitting on.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableConversationStateResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the user's session state for the requested version of the environment: every variable and its current value, the runtime storage carried between turns, and the execution stack showing which diagram and node the conversation is sitting on."
            }
          }
        },
        "tags": [
          "Conversation State"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns the stored state for one conversation - where it stands and what its variables hold - addressed by the same `userID` used to run it."
        }
      },
      "patch": {
        "operationId": "StableConversationStateController_update",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_conversation",
            "toolDescription": "Drive a live test session against the agent runtime, turn by turn. You send actions (launch, text, intent, event) and the runtime returns trace arrays you inspect (text, speak, cardV2, choice, end, debug). The most common build-loop smoke test — verify a change actually works before publishing.\nPredecessor: select the project and environment first, and recompile the environment after any edits (otherwise the test runs against the last-compiled version and changes won't be reflected).\nSuccessor: search transcripts to find the resulting one for deeper inspection, or head back to the build surfaces to apply a fix.",
            "operation": "update_state",
            "operationDescription": "WHAT — Patch session state directly (stack / variables / storage).\nUSE WHEN — Simulating a state that would take many turns to reach organically — jumping mid-flow for testing."
          },
          "cli": {
            "command": "conversation state update"
          }
        },
        "x-speakeasy-group": "conversation.state",
        "x-speakeasy-name-override": "update",
        "summary": "Update state",
        "description": "Changes the stored state of a live conversation, which is how a caller seeds or corrects variables between turns without replaying the conversation.",
        "parameters": [
          {
            "name": "userID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID identifying this conversation. Any stable string you choose; the same value addresses the same conversation on every call."
            },
            "description": "The ID identifying this conversation. Any stable string you choose; the same value addresses the same conversation on every call."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          },
          {
            "name": "version",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "draft",
                "published"
              ],
              "x-enumNames": [
                "DRAFT",
                "PUBLISHED"
              ]
            },
            "x-vf-doc": {
              "description": "Which version of the environment to read: the editable draft or the published one."
            },
            "description": "Which version of the environment to read: the editable draft or the published one."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableConversationUpdateStateRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confirms the conversation state was written for that user. The body carries a message only, so fetch the state again to see the stack, storage, and variables as they now stand.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableUpdateResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the conversation state was written for that user. The body carries a message only, so fetch the state again to see the stack, storage, and variables as they now stand."
            }
          }
        },
        "tags": [
          "Conversation State"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Changes the stored state of a live conversation, which is how a caller seeds or corrects variables between turns without replaying the conversation."
        }
      },
      "delete": {
        "operationId": "StableConversationStateController_delete",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_conversation",
            "toolDescription": "Drive a live test session against the agent runtime, turn by turn. You send actions (launch, text, intent, event) and the runtime returns trace arrays you inspect (text, speak, cardV2, choice, end, debug). The most common build-loop smoke test — verify a change actually works before publishing.\nPredecessor: select the project and environment first, and recompile the environment after any edits (otherwise the test runs against the last-compiled version and changes won't be reflected).\nSuccessor: search transcripts to find the resulting one for deeper inspection, or head back to the build surfaces to apply a fix.",
            "operation": "delete_state",
            "operationDescription": "WHAT — Reset session state. Stack and storage cleared; variables persist.\nUSE WHEN — Fresh test after poking around — returns the session to a clean starting point without losing pre-seeded variables."
          },
          "cli": {
            "command": "conversation state delete"
          }
        },
        "x-speakeasy-group": "conversation.state",
        "x-speakeasy-name-override": "delete",
        "summary": "Delete state",
        "description": "Discards the stored state for one conversation, so the next turn on that `userID` begins from the start. The response carries only a confirmation message.",
        "parameters": [
          {
            "name": "userID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID identifying this conversation. Any stable string you choose; the same value addresses the same conversation on every call."
            },
            "description": "The ID identifying this conversation. Any stable string you choose; the same value addresses the same conversation on every call."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          },
          {
            "name": "version",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "draft",
                "published"
              ],
              "x-enumNames": [
                "DRAFT",
                "PUBLISHED"
              ]
            },
            "x-vf-doc": {
              "description": "Which version of the environment to read: the editable draft or the published one."
            },
            "description": "Which version of the environment to read: the editable draft or the published one."
          }
        ],
        "responses": {
          "200": {
            "description": "Confirms the user's stored state was deleted. The body is a message only, so nothing of the discarded stack, storage, or variables comes back with it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableDeleteResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the user's stored state was deleted. The body is a message only, so nothing of the discarded stack, storage, or variables comes back with it."
            }
          }
        },
        "tags": [
          "Conversation State"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Discards the stored state for one conversation, so the next turn on that `userID` begins from the start. The response carries only a confirmation message."
        }
      }
    },
    "/v1/stable/conversation-state/{userID}/variables": {
      "patch": {
        "operationId": "StableConversationStateController_updateVariables",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_conversation",
            "toolDescription": "Drive a live test session against the agent runtime, turn by turn. You send actions (launch, text, intent, event) and the runtime returns trace arrays you inspect (text, speak, cardV2, choice, end, debug). The most common build-loop smoke test — verify a change actually works before publishing.\nPredecessor: select the project and environment first, and recompile the environment after any edits (otherwise the test runs against the last-compiled version and changes won't be reflected).\nSuccessor: search transcripts to find the resulting one for deeper inspection, or head back to the build surfaces to apply a fix.",
            "operation": "update_variables",
            "operationDescription": "WHAT — Patch session variables only — no stack/storage changes.\nUSE WHEN — Pre-seeding caller info for a test scenario (e.g. caller_number = \"+15555550100\") before driving the conversation."
          },
          "cli": {
            "command": "conversation state update-variables"
          }
        },
        "x-speakeasy-group": "conversation.state",
        "x-speakeasy-name-override": "update-variables",
        "summary": "Update variables",
        "description": "Updates variables in the conversation state by merging with the properties in the request body.",
        "parameters": [
          {
            "name": "userID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID identifying this conversation. Any stable string you choose; the same value addresses the same conversation on every call."
            },
            "description": "The ID identifying this conversation. Any stable string you choose; the same value addresses the same conversation on every call."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          },
          {
            "name": "version",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "draft",
                "published"
              ],
              "x-enumNames": [
                "DRAFT",
                "PUBLISHED"
              ]
            },
            "x-vf-doc": {
              "description": "Which version of the environment to read: the editable draft or the published one."
            },
            "description": "Which version of the environment to read: the editable draft or the published one."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableConversationUpdateVariablesRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confirms the supplied variables were merged into the session's existing values. The response is a message only, so read the state back if you need the merged result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableUpdateResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the supplied variables were merged into the session's existing values. The response is a message only, so read the state back if you need the merged result."
            }
          }
        },
        "tags": [
          "Conversation State"
        ],
        "security": [
          {
            "token": []
          }
        ]
      }
    },
    "/v1/stable/analytics/query/call-count/project/{projectID}": {
      "post": {
        "operationId": "StableAnalyticsController_queryCallCount",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_analytics",
            "toolDescription": "The Analytics dashboard surface — pre-defined widgets for the assistant's objective metric (conversion rate or resolution rate), CSAT, deflection, total chats, total interactions, unique users, latency, credits usage, playbook usage, tool usage, Knowledge Base document usage, time/dollars saved. Read-only.\nPredecessor: select the project first.\nSuccessor: search transcripts to drill into the specific conversations behind a metric.",
            "operation": "query_call_count",
            "operationDescription": "WHAT — Query call volume for a project, bucketed by interval (hour | day | week | month).\nUSE WHEN — Charting call volume trends or comparing period-over-period call load.\nDO NOT — Treat the returned duration as talk time — it's total call duration including hold/silence. Use voiceflow_analytics.query_call_duration for actual talk time."
          },
          "cli": {
            "command": "analytics query call-count"
          }
        },
        "x-speakeasy-group": "analytics.query",
        "x-speakeasy-name-override": "call-count",
        "summary": "Query call count",
        "description": "Reports how many voice calls were placed, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the project to operate on."
            },
            "description": "The ID of the project to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAnalyticsQueryCallCountRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns the project's call volume as a time series, one row per interval carrying the call count, an accompanying duration in milliseconds, and the timestamp the interval starts at.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAnalyticsQueryCallCountResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the project's call volume as a time series, one row per interval carrying the call count, an accompanying duration in milliseconds, and the timestamp the interval starts at."
            }
          }
        },
        "tags": [
          "Analytics"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Reports how many voice calls were placed, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take."
        }
      }
    },
    "/v1/stable/analytics/query/call-duration/project/{projectID}": {
      "post": {
        "operationId": "StableAnalyticsController_queryCallDuration",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_analytics",
            "toolDescription": "The Analytics dashboard surface — pre-defined widgets for the assistant's objective metric (conversion rate or resolution rate), CSAT, deflection, total chats, total interactions, unique users, latency, credits usage, playbook usage, tool usage, Knowledge Base document usage, time/dollars saved. Read-only.\nPredecessor: select the project first.\nSuccessor: search transcripts to drill into the specific conversations behind a metric.",
            "operation": "query_call_duration",
            "operationDescription": "WHAT — Query real call duration (talk time only, excluding hold/silence) for a project, bucketed by interval.\nUSE WHEN — Measuring how long callers are actually engaged, as distinct from total call length from voiceflow_analytics.query_call_count."
          },
          "cli": {
            "command": "analytics query call-duration"
          }
        },
        "x-speakeasy-group": "analytics.query",
        "x-speakeasy-name-override": "call-duration",
        "summary": "Query call duration",
        "description": "Reports how much time was spent on voice calls, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the project to operate on."
            },
            "description": "The ID of the project to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAnalyticsQueryCallDurationRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns real call duration, or talk time, as a millisecond figure for each interval. Each row holds only that duration and the interval's start timestamp, with no call count beside it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAnalyticsQueryCallDurationResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns real call duration, or talk time, as a millisecond figure for each interval. Each row holds only that duration and the interval's start timestamp, with no call count beside it."
            }
          }
        },
        "tags": [
          "Analytics"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Reports how much time was spent on voice calls, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take."
        }
      }
    },
    "/v1/stable/analytics/query/transcript-count/workspace/{workspaceID}": {
      "post": {
        "operationId": "StableAnalyticsController_queryTranscriptCountByWorkspace",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_analytics",
            "toolDescription": "The Analytics dashboard surface — pre-defined widgets for the assistant's objective metric (conversion rate or resolution rate), CSAT, deflection, total chats, total interactions, unique users, latency, credits usage, playbook usage, tool usage, Knowledge Base document usage, time/dollars saved. Read-only.\nPredecessor: select the project first.\nSuccessor: search transcripts to drill into the specific conversations behind a metric.",
            "operation": "query_workspace_transcript_count",
            "operationDescription": "WHAT — Transcript counts across a workspace, broken down per environment.\nUSE WHEN — Comparing transcript volume across projects/environments in a workspace, before drilling into one via voiceflow_analytics.query_project_transcript_count."
          },
          "cli": {
            "command": "analytics query workspace-transcript-count"
          }
        },
        "x-speakeasy-group": "analytics.query",
        "x-speakeasy-name-override": "workspace-transcript-count",
        "summary": "Query workspace transcript count",
        "description": "Reports how many conversations were recorded, for one workspace over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take.",
        "parameters": [
          {
            "name": "workspaceID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the workspace to operate on."
            },
            "description": "The ID of the workspace to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAnalyticsQueryWorkspaceTranscriptCountRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns transcript totals across the workspace, split by project, by environment alias, and by whether the transcripts came from the environment's draft or published version. The rows carry no time dimension.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAnalyticsQueryWorkspaceTranscriptCountResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns transcript totals across the workspace, split by project, by environment alias, and by whether the transcripts came from the environment's draft or published version. The rows carry no time dimension."
            }
          }
        },
        "tags": [
          "Analytics"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Reports how many conversations were recorded, for one workspace over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take."
        }
      }
    },
    "/v1/stable/analytics/query/transcript-count/project/{projectID}": {
      "post": {
        "operationId": "StableAnalyticsController_queryTranscriptCountByProject",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_analytics",
            "toolDescription": "The Analytics dashboard surface — pre-defined widgets for the assistant's objective metric (conversion rate or resolution rate), CSAT, deflection, total chats, total interactions, unique users, latency, credits usage, playbook usage, tool usage, Knowledge Base document usage, time/dollars saved. Read-only.\nPredecessor: select the project first.\nSuccessor: search transcripts to drill into the specific conversations behind a metric.",
            "operation": "query_project_transcript_count",
            "operationDescription": "WHAT — Transcript counts for a single project, bucketed by interval.\nUSE WHEN — Tracking conversation volume trends for one project over a date range.\nAFTER — voiceflow_transcript.search to pull the actual transcripts behind a spike or drop."
          },
          "cli": {
            "command": "analytics query project-transcript-count"
          }
        },
        "x-speakeasy-group": "analytics.query",
        "x-speakeasy-name-override": "project-transcript-count",
        "summary": "Query project transcript count",
        "description": "Reports how many conversations were recorded, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the project to operate on."
            },
            "description": "The ID of the project to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAnalyticsQueryProjectTranscriptCountRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns the project's transcript count as a time series, one row per interval holding the count and the timestamp that interval begins at.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAnalyticsQueryProjectTranscriptCountResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the project's transcript count as a time series, one row per interval holding the count and the timestamp that interval begins at."
            }
          }
        },
        "tags": [
          "Analytics"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Reports how many conversations were recorded, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take."
        }
      }
    },
    "/v1/stable/analytics/query/transcript-cost/project/{projectID}": {
      "post": {
        "operationId": "StableAnalyticsController_queryTranscriptCost",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_analytics",
            "toolDescription": "The Analytics dashboard surface — pre-defined widgets for the assistant's objective metric (conversion rate or resolution rate), CSAT, deflection, total chats, total interactions, unique users, latency, credits usage, playbook usage, tool usage, Knowledge Base document usage, time/dollars saved. Read-only.\nPredecessor: select the project first.\nSuccessor: search transcripts to drill into the specific conversations behind a metric.",
            "operation": "query_project_transcript_cost",
            "operationDescription": "WHAT — Per-interval cost and transcript count for a project.\nUSE WHEN — Estimating spend trends or cost-per-transcript for a project over a date range."
          },
          "cli": {
            "command": "analytics query project-transcript-cost"
          }
        },
        "x-speakeasy-group": "analytics.query",
        "x-speakeasy-name-override": "project-transcript-cost",
        "summary": "Query transcript cost",
        "description": "Reports what those conversations cost in model spend, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the project to operate on."
            },
            "description": "The ID of the project to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAnalyticsQueryProjectTranscriptCostRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns per-interval cost paired with the transcript count behind it, so a row shows both the total cost incurred by transcripts and how many transcripts produced it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAnalyticsQueryProjectTranscriptCostResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns per-interval cost paired with the transcript count behind it, so a row shows both the total cost incurred by transcripts and how many transcripts produced it."
            }
          }
        },
        "tags": [
          "Analytics"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Reports what those conversations cost in model spend, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take."
        }
      }
    },
    "/v1/stable/analytics/query/interaction-count/workspace/{workspaceID}": {
      "post": {
        "operationId": "StableAnalyticsController_queryInteractionCountByWorkspace",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_analytics",
            "toolDescription": "The Analytics dashboard surface — pre-defined widgets for the assistant's objective metric (conversion rate or resolution rate), CSAT, deflection, total chats, total interactions, unique users, latency, credits usage, playbook usage, tool usage, Knowledge Base document usage, time/dollars saved. Read-only.\nPredecessor: select the project first.\nSuccessor: search transcripts to drill into the specific conversations behind a metric.",
            "operation": "query_workspace_interaction_count",
            "operationDescription": "WHAT — Interaction counts across a workspace, grouped by interaction type.\nUSE WHEN — Seeing which interaction types (text, intent, event, launch) dominate usage across a workspace's projects."
          },
          "cli": {
            "command": "analytics query workspace-interaction-count"
          }
        },
        "x-speakeasy-group": "analytics.query",
        "x-speakeasy-name-override": "workspace-interaction-count",
        "summary": "Query workspace interaction count",
        "description": "Reports how many interactions were exchanged, for one workspace over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take.",
        "parameters": [
          {
            "name": "workspaceID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the workspace to operate on."
            },
            "description": "The ID of the workspace to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAnalyticsQueryWorkspaceInteractionCountRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns interaction totals for the workspace grouped by interaction type, one row per type. Each row is a type and a count only, with no time dimension.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAnalyticsQueryWorkspaceInteractionCountResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns interaction totals for the workspace grouped by interaction type, one row per type. Each row is a type and a count only, with no time dimension."
            }
          }
        },
        "tags": [
          "Analytics"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Reports how many interactions were exchanged, for one workspace over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take."
        }
      }
    },
    "/v1/stable/analytics/query/interaction-count/project/{projectID}": {
      "post": {
        "operationId": "StableAnalyticsController_queryInteractionsByProject",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_analytics",
            "toolDescription": "The Analytics dashboard surface — pre-defined widgets for the assistant's objective metric (conversion rate or resolution rate), CSAT, deflection, total chats, total interactions, unique users, latency, credits usage, playbook usage, tool usage, Knowledge Base document usage, time/dollars saved. Read-only.\nPredecessor: select the project first.\nSuccessor: search transcripts to drill into the specific conversations behind a metric.",
            "operation": "query_project_interaction_count",
            "operationDescription": "WHAT — Interaction counts and average latency for a single project, bucketed by interval.\nUSE WHEN — Tracking a project's response volume and latency trend over a date range."
          },
          "cli": {
            "command": "analytics query project-interaction-count"
          }
        },
        "x-speakeasy-group": "analytics.query",
        "x-speakeasy-name-override": "project-interaction-count",
        "summary": "Query project interaction count",
        "description": "Reports how many interactions were exchanged, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the project to operate on."
            },
            "description": "The ID of the project to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAnalyticsQueryProjectInteractionCountRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns the project's interaction count per time interval, pairing each count with the average latency in milliseconds recorded over that interval.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAnalyticsQueryProjectInteractionCountResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the project's interaction count per time interval, pairing each count with the average latency in milliseconds recorded over that interval."
            }
          }
        },
        "tags": [
          "Analytics"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Reports how many interactions were exchanged, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take."
        }
      }
    },
    "/v1/stable/analytics/query/token-usage/organization/{organizationID}": {
      "post": {
        "operationId": "StableAnalyticsController_queryTokenUsageByOrganization",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_analytics",
            "toolDescription": "The Analytics dashboard surface — pre-defined widgets for the assistant's objective metric (conversion rate or resolution rate), CSAT, deflection, total chats, total interactions, unique users, latency, credits usage, playbook usage, tool usage, Knowledge Base document usage, time/dollars saved. Read-only.\nPredecessor: select the project first.\nSuccessor: search transcripts to drill into the specific conversations behind a metric.",
            "operation": "query_organization_token_usage",
            "operationDescription": "WHAT — Token totals for an organization, grouped by model. Not time-bucketed — totals across the requested date range.\nUSE WHEN — Comparing model mix or overall token spend across an entire organization."
          },
          "cli": {
            "command": "analytics query organization-token-usage"
          }
        },
        "x-speakeasy-group": "analytics.query",
        "x-speakeasy-name-override": "organization-token-usage",
        "summary": "Query organization token usage",
        "description": "Reports how many tokens were consumed, for one organization over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take.",
        "parameters": [
          {
            "name": "organizationID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the organization to operate on."
            },
            "description": "The ID of the organization to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAnalyticsQueryOrganizationTokenUsageRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns the organization's token consumption broken down by model, one row per model with the tokens attributed to it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAnalyticsQueryOrganizationTokenUsageResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the organization's token consumption broken down by model, one row per model with the tokens attributed to it."
            }
          }
        },
        "tags": [
          "Analytics"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Reports how many tokens were consumed, for one organization over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take."
        }
      }
    },
    "/v1/stable/analytics/query/token-usage/workspace/{workspaceID}": {
      "post": {
        "operationId": "StableAnalyticsController_queryTokenUsageByWorkspace",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_analytics",
            "toolDescription": "The Analytics dashboard surface — pre-defined widgets for the assistant's objective metric (conversion rate or resolution rate), CSAT, deflection, total chats, total interactions, unique users, latency, credits usage, playbook usage, tool usage, Knowledge Base document usage, time/dollars saved. Read-only.\nPredecessor: select the project first.\nSuccessor: search transcripts to drill into the specific conversations behind a metric.",
            "operation": "query_workspace_token_usage",
            "operationDescription": "WHAT — Token totals for a workspace, grouped by model. Not time-bucketed.\nUSE WHEN — Comparing model mix or token spend across the projects in one workspace."
          },
          "cli": {
            "command": "analytics query workspace-token-usage"
          }
        },
        "x-speakeasy-group": "analytics.query",
        "x-speakeasy-name-override": "workspace-token-usage",
        "summary": "Query workspace token usage",
        "description": "Reports how many tokens were consumed, for one workspace over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take.",
        "parameters": [
          {
            "name": "workspaceID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the workspace to operate on."
            },
            "description": "The ID of the workspace to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAnalyticsQueryWorkspaceTokenUsageRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns token consumption scoped to a single workspace, one row per model, the same model and count pairing the organization query returns at a wider scope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAnalyticsQueryWorkspaceTokenUsageResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns token consumption scoped to a single workspace, one row per model, the same model and count pairing the organization query returns at a wider scope."
            }
          }
        },
        "tags": [
          "Analytics"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Reports how many tokens were consumed, for one workspace over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take."
        }
      }
    },
    "/v1/stable/analytics/query/token-usage/project/{projectID}": {
      "post": {
        "operationId": "StableAnalyticsController_queryTokenUsageByProject",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_analytics",
            "toolDescription": "The Analytics dashboard surface — pre-defined widgets for the assistant's objective metric (conversion rate or resolution rate), CSAT, deflection, total chats, total interactions, unique users, latency, credits usage, playbook usage, tool usage, Knowledge Base document usage, time/dollars saved. Read-only.\nPredecessor: select the project first.\nSuccessor: search transcripts to drill into the specific conversations behind a metric.",
            "operation": "query_project_token_usage",
            "operationDescription": "WHAT — Token usage for a project, grouped by model and bucketed by interval.\nUSE WHEN — Tracking a project's token spend trend, or seeing which model is driving usage over time."
          },
          "cli": {
            "command": "analytics query project-token-usage"
          }
        },
        "x-speakeasy-group": "analytics.query",
        "x-speakeasy-name-override": "project-token-usage",
        "summary": "Query project token usage",
        "description": "Reports how many tokens were consumed, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the project to operate on."
            },
            "description": "The ID of the project to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAnalyticsQueryProjectTokenUsageRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns project token counts split by model and by time interval, where the workspace and organization queries give a model split with no interval. The model field is nullable, so some rows report a count without naming a model.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAnalyticsQueryProjectTokenUsageResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns project token counts split by model and by time interval, where the workspace and organization queries give a model split with no interval. The model field is nullable, so some rows report a count without naming a model."
            }
          }
        },
        "tags": [
          "Analytics"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Reports how many tokens were consumed, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take."
        }
      }
    },
    "/v1/stable/analytics/query/hourly-token-usage/organization/{organizationID}": {
      "post": {
        "operationId": "StableAnalyticsController_queryHourlyTokenUsageByOrganization",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_analytics",
            "toolDescription": "The Analytics dashboard surface — pre-defined widgets for the assistant's objective metric (conversion rate or resolution rate), CSAT, deflection, total chats, total interactions, unique users, latency, credits usage, playbook usage, tool usage, Knowledge Base document usage, time/dollars saved. Read-only.\nPredecessor: select the project first.\nSuccessor: search transcripts to drill into the specific conversations behind a metric.",
            "operation": "query_hourly_organization_token_usage",
            "operationDescription": "WHAT — Aggregate token totals for an organization over an hourly window, with optional workspace/project filters. Returns a total-vs-filtered summary, not a per-hour breakdown.\nUSE WHEN — Checking overall vs. filtered token volume for a short recent window without needing a time series.\nDO NOT — Expect a per-hour breakdown despite the name — this returns a single summary. Use voiceflow_analytics.query_hourly_project_token_usage or voiceflow_analytics.query_daily_token_usage for an actual time series."
          },
          "cli": {
            "command": "analytics query hourly-organization-token-usage"
          }
        },
        "x-speakeasy-group": "analytics.query",
        "x-speakeasy-name-override": "hourly-organization-token-usage",
        "summary": "Query hourly organization token usage",
        "description": "Reports how many tokens were consumed, bucketed by hour, for one organization over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take.",
        "parameters": [
          {
            "name": "organizationID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the organization to operate on."
            },
            "description": "The ID of the organization to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAnalyticsQueryHourlyOrganizationTokenUsageRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns two numbers rather than a row per hour: a total token count for the organization, and a filtered count reflecting the optional workspace and project filters sent with the query.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAnalyticsQueryOrganizationHourlyTokenUsageResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns two numbers rather than a row per hour: a total token count for the organization, and a filtered count reflecting the optional workspace and project filters sent with the query."
            }
          }
        },
        "tags": [
          "Analytics"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Reports how many tokens were consumed, bucketed by hour, for one organization over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take."
        }
      }
    },
    "/v1/stable/analytics/query/hourly-token-usage/project/{projectID}": {
      "post": {
        "operationId": "StableAnalyticsController_queryHourlyTokenUsageByProject",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_analytics",
            "toolDescription": "The Analytics dashboard surface — pre-defined widgets for the assistant's objective metric (conversion rate or resolution rate), CSAT, deflection, total chats, total interactions, unique users, latency, credits usage, playbook usage, tool usage, Knowledge Base document usage, time/dollars saved. Read-only.\nPredecessor: select the project first.\nSuccessor: search transcripts to drill into the specific conversations behind a metric.",
            "operation": "query_hourly_project_token_usage",
            "operationDescription": "WHAT — Timezone-aware hourly token usage for a project, grouped by model and usage category.\nUSE WHEN — Diagnosing a token spend spike within a single day, or seeing which usage category (playbook, function, Knowledge Base, etc.) drove it."
          },
          "cli": {
            "command": "analytics query hourly-project-token-usage"
          }
        },
        "x-speakeasy-group": "analytics.query",
        "x-speakeasy-name-override": "hourly-project-token-usage",
        "summary": "Query hourly project token usage",
        "description": "Reports how many tokens were consumed, bucketed by hour, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the project to operate on."
            },
            "description": "The ID of the project to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAnalyticsQueryProjectHourlyTokenUsageRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns hourly token counts for the project, each row keyed by the hour's start timestamp and split by model and by usage category. Both the model and the category are nullable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAnalyticsQueryProjectHourlyTokenUsageResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns hourly token counts for the project, each row keyed by the hour's start timestamp and split by model and by usage category. Both the model and the category are nullable."
            }
          }
        },
        "tags": [
          "Analytics"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Reports how many tokens were consumed, bucketed by hour, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take."
        }
      }
    },
    "/v1/stable/analytics/query/daily-token-usage/organization/{organizationID}": {
      "post": {
        "operationId": "StableAnalyticsController_queryDailyTokenUsage",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_analytics",
            "toolDescription": "The Analytics dashboard surface — pre-defined widgets for the assistant's objective metric (conversion rate or resolution rate), CSAT, deflection, total chats, total interactions, unique users, latency, credits usage, playbook usage, tool usage, Knowledge Base document usage, time/dollars saved. Read-only.\nPredecessor: select the project first.\nSuccessor: search transcripts to drill into the specific conversations behind a metric.",
            "operation": "query_daily_token_usage",
            "operationDescription": "WHAT — Daily breakdown of organization token usage grouped by usage class, category, and model within a date range.\nUSE WHEN — Building a multi-day token trend view, or auditing spend by class/category across an organization.\nDO NOT — Ignore rows flagged as misclassified when reconciling totals — they represent usage the classifier couldn't confidently attribute to a category."
          },
          "cli": {
            "command": "analytics query daily-token-usage"
          }
        },
        "x-speakeasy-group": "analytics.query",
        "x-speakeasy-name-override": "daily-token-usage",
        "summary": "Query daily token usage",
        "description": "Reports how many tokens were consumed, bucketed by day, for one organization over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take.",
        "parameters": [
          {
            "name": "organizationID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the organization to operate on."
            },
            "description": "The ID of the organization to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAnalyticsQueryDailyTokenUsageRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns a token count per day for the organization, each row split by usage class, usage category, and model, and flagged with a misclassified boolean.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAnalyticsQueryDailyTokenUsageResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns a token count per day for the organization, each row split by usage class, usage category, and model, and flagged with a misclassified boolean."
            }
          }
        },
        "tags": [
          "Analytics"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Reports how many tokens were consumed, bucketed by day, for one organization over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take."
        }
      }
    },
    "/v1/stable/analytics/query/entity-token-usage/organization/{organizationID}": {
      "post": {
        "operationId": "StableAnalyticsController_queryTokenUsageByEntity",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_analytics",
            "toolDescription": "The Analytics dashboard surface — pre-defined widgets for the assistant's objective metric (conversion rate or resolution rate), CSAT, deflection, total chats, total interactions, unique users, latency, credits usage, playbook usage, tool usage, Knowledge Base document usage, time/dollars saved. Read-only.\nPredecessor: select the project first.\nSuccessor: search transcripts to drill into the specific conversations behind a metric.",
            "operation": "query_entity_token_usage",
            "operationDescription": "WHAT — Token totals for an organization, aggregated (not time-bucketed) per project and per workspace.\nUSE WHEN — Finding which projects or workspaces are the biggest token consumers in an organization, before drilling into one with voiceflow_analytics.query_project_token_usage."
          },
          "cli": {
            "command": "analytics query entity-token-usage"
          }
        },
        "x-speakeasy-group": "analytics.query",
        "x-speakeasy-name-override": "entity-token-usage",
        "summary": "Query entity token usage",
        "description": "Reports how many tokens each entity consumed, for one organization over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take.",
        "parameters": [
          {
            "name": "organizationID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the organization to operate on."
            },
            "description": "The ID of the organization to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAnalyticsQueryEntityTokenUsageRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns two parallel breakdowns of the organization's tokens, one array of workspaces and one of projects, each row pairing an ID with the tokens it used. Neither is split by model or by time.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAnalyticsQueryEntityTokenUsageResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns two parallel breakdowns of the organization's tokens, one array of workspaces and one of projects, each row pairing an ID with the tokens it used. Neither is split by model or by time."
            }
          }
        },
        "tags": [
          "Analytics"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Reports how many tokens each entity consumed, for one organization over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take."
        }
      }
    },
    "/v1/stable/analytics/query/category-token-usage/project/{projectID}": {
      "post": {
        "operationId": "StableAnalyticsController_queryTokenUsageByCategory",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_analytics",
            "toolDescription": "The Analytics dashboard surface — pre-defined widgets for the assistant's objective metric (conversion rate or resolution rate), CSAT, deflection, total chats, total interactions, unique users, latency, credits usage, playbook usage, tool usage, Knowledge Base document usage, time/dollars saved. Read-only.\nPredecessor: select the project first.\nSuccessor: search transcripts to drill into the specific conversations behind a metric.",
            "operation": "query_category_token_usage",
            "operationDescription": "WHAT — Timezone-aware token usage for a project, grouped by usage category and bucketed by interval.\nUSE WHEN — Seeing which category of work (playbook reasoning, function calls, Knowledge Base retrieval, etc.) is driving a project's token spend over time."
          },
          "cli": {
            "command": "analytics query category-token-usage"
          }
        },
        "x-speakeasy-group": "analytics.query",
        "x-speakeasy-name-override": "category-token-usage",
        "summary": "Query category token usage",
        "description": "Reports how many tokens each category consumed, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the project to operate on."
            },
            "description": "The ID of the project to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAnalyticsQueryCategoryTokenUsageRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns hourly token counts for the project grouped by usage category alone, without the model split the hourly project query carries. The category is nullable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAnalyticsQueryCategoryTokenUsageResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns hourly token counts for the project grouped by usage category alone, without the model split the hourly project query carries. The category is nullable."
            }
          }
        },
        "tags": [
          "Analytics"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Reports how many tokens each category consumed, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take."
        }
      }
    },
    "/v1/stable/analytics/query/playbook-usage/project/{projectID}": {
      "post": {
        "operationId": "StableAnalyticsController_queryPlaybookUsage",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_analytics",
            "toolDescription": "The Analytics dashboard surface — pre-defined widgets for the assistant's objective metric (conversion rate or resolution rate), CSAT, deflection, total chats, total interactions, unique users, latency, credits usage, playbook usage, tool usage, Knowledge Base document usage, time/dollars saved. Read-only.\nPredecessor: select the project first.\nSuccessor: search transcripts to drill into the specific conversations behind a metric.",
            "operation": "query_playbook_usage",
            "operationDescription": "WHAT — Per-playbook usage for a project, including success rate and average latency.\nUSE WHEN — Finding which playbooks get triggered most, or spotting one with a low success rate worth investigating.\nAFTER — voiceflow_transcript.search to find failing transcripts for a specific playbook."
          },
          "cli": {
            "command": "analytics query playbook-usage"
          }
        },
        "x-speakeasy-group": "analytics.query",
        "x-speakeasy-name-override": "playbook-usage",
        "summary": "Query playbook usage",
        "description": "Reports how often each playbook ran, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the project to operate on."
            },
            "description": "The ID of the project to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAnalyticsQueryPlaybookUsageRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns one row per playbook, keyed by playbook ID, with its usage count, how many of those runs succeeded, and the average latency in milliseconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAnalyticsQueryPlaybookUsageResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns one row per playbook, keyed by playbook ID, with its usage count, how many of those runs succeeded, and the average latency in milliseconds."
            }
          }
        },
        "tags": [
          "Analytics"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Reports how often each playbook ran, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take."
        }
      }
    },
    "/v1/stable/analytics/query/workflow-usage/project/{projectID}": {
      "post": {
        "operationId": "StableAnalyticsController_queryWorkflowUsage",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_analytics",
            "toolDescription": "The Analytics dashboard surface — pre-defined widgets for the assistant's objective metric (conversion rate or resolution rate), CSAT, deflection, total chats, total interactions, unique users, latency, credits usage, playbook usage, tool usage, Knowledge Base document usage, time/dollars saved. Read-only.\nPredecessor: select the project first.\nSuccessor: search transcripts to drill into the specific conversations behind a metric.",
            "operation": "query_workflow_usage",
            "operationDescription": "WHAT — Per-workflow usage for a project.\nUSE WHEN — Finding which workflows get triggered most, e.g. confirming a new workflow is actually being reached."
          },
          "cli": {
            "command": "analytics query workflow-usage"
          }
        },
        "x-speakeasy-group": "analytics.query",
        "x-speakeasy-name-override": "workflow-usage",
        "summary": "Query workflow usage",
        "description": "Reports how often each workflow ran, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the project to operate on."
            },
            "description": "The ID of the project to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAnalyticsQueryWorkflowUsageRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns a usage count for each workflow, keyed by workflow ID. Unlike the playbook and tool usage queries, the rows carry no success count and no latency figure.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAnalyticsQueryWorkflowUsageResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns a usage count for each workflow, keyed by workflow ID. Unlike the playbook and tool usage queries, the rows carry no success count and no latency figure."
            }
          }
        },
        "tags": [
          "Analytics"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Reports how often each workflow ran, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take."
        }
      }
    },
    "/v1/stable/analytics/query/prompt-usage/project/{projectID}": {
      "post": {
        "operationId": "StableAnalyticsController_queryPromptUsage",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_analytics",
            "toolDescription": "The Analytics dashboard surface — pre-defined widgets for the assistant's objective metric (conversion rate or resolution rate), CSAT, deflection, total chats, total interactions, unique users, latency, credits usage, playbook usage, tool usage, Knowledge Base document usage, time/dollars saved. Read-only.\nPredecessor: select the project first.\nSuccessor: search transcripts to drill into the specific conversations behind a metric.",
            "operation": "query_prompt_usage",
            "operationDescription": "WHAT — Per-prompt usage for a project, including success rate and average latency.\nUSE WHEN — Finding which prompts run most often, or spotting one with unusually high latency or a low success rate."
          },
          "cli": {
            "command": "analytics query prompt-usage"
          }
        },
        "x-speakeasy-group": "analytics.query",
        "x-speakeasy-name-override": "prompt-usage",
        "summary": "Query prompt usage",
        "description": "Reports how often each prompt was used, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the project to operate on."
            },
            "description": "The ID of the project to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAnalyticsQueryPromptUsageRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns per-prompt usage keyed by prompt ID, giving the number of uses, the successful subset of those, and the average latency in milliseconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAnalyticsQueryPromptUsageResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns per-prompt usage keyed by prompt ID, giving the number of uses, the successful subset of those, and the average latency in milliseconds."
            }
          }
        },
        "tags": [
          "Analytics"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Reports how often each prompt was used, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take."
        }
      }
    },
    "/v1/stable/analytics/query/intent-usage/project/{projectID}": {
      "post": {
        "operationId": "StableAnalyticsController_queryIntentUsage",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_analytics",
            "toolDescription": "The Analytics dashboard surface — pre-defined widgets for the assistant's objective metric (conversion rate or resolution rate), CSAT, deflection, total chats, total interactions, unique users, latency, credits usage, playbook usage, tool usage, Knowledge Base document usage, time/dollars saved. Read-only.\nPredecessor: select the project first.\nSuccessor: search transcripts to drill into the specific conversations behind a metric.",
            "operation": "query_intent_usage",
            "operationDescription": "WHAT — Per-intent usage for a project.\nUSE WHEN — Seeing which intents get matched most, e.g. to prioritize which intents need more training utterances."
          },
          "cli": {
            "command": "analytics query intent-usage"
          }
        },
        "x-speakeasy-group": "analytics.query",
        "x-speakeasy-name-override": "intent-usage",
        "summary": "Query intent usage",
        "description": "Reports how often each intent matched, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the project to operate on."
            },
            "description": "The ID of the project to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAnalyticsQueryIntentUsageRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns a usage count for each intent, keyed by intent ID. That count is the whole row: no success count and no latency accompany it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAnalyticsQueryIntentUsageResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns a usage count for each intent, keyed by intent ID. That count is the whole row: no success count and no latency accompany it."
            }
          }
        },
        "tags": [
          "Analytics"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Reports how often each intent matched, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take."
        }
      }
    },
    "/v1/stable/analytics/query/function-usage/project/{projectID}": {
      "post": {
        "operationId": "StableAnalyticsController_queryFunctionUsage",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_analytics",
            "toolDescription": "The Analytics dashboard surface — pre-defined widgets for the assistant's objective metric (conversion rate or resolution rate), CSAT, deflection, total chats, total interactions, unique users, latency, credits usage, playbook usage, tool usage, Knowledge Base document usage, time/dollars saved. Read-only.\nPredecessor: select the project first.\nSuccessor: search transcripts to drill into the specific conversations behind a metric.",
            "operation": "query_function_usage",
            "operationDescription": "WHAT — Per-function usage for a project, including success rate and average latency.\nUSE WHEN — Finding which functions run most, or spotting one with a low success rate (frequent throws/errors) worth debugging."
          },
          "cli": {
            "command": "analytics query function-usage"
          }
        },
        "x-speakeasy-group": "analytics.query",
        "x-speakeasy-name-override": "function-usage",
        "summary": "Query function usage",
        "description": "Reports how often each function ran, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the project to operate on."
            },
            "description": "The ID of the project to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAnalyticsQueryFunctionUsageRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns totals for each function keyed by function ID, separating overall uses from successful ones and adding the average latency in milliseconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAnalyticsQueryFunctionUsageResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns totals for each function keyed by function ID, separating overall uses from successful ones and adding the average latency in milliseconds."
            }
          }
        },
        "tags": [
          "Analytics"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Reports how often each function ran, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take."
        }
      }
    },
    "/v1/stable/analytics/query/api-tool-usage/project/{projectID}": {
      "post": {
        "operationId": "StableAnalyticsController_queryAPIToolUsage",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_analytics",
            "toolDescription": "The Analytics dashboard surface — pre-defined widgets for the assistant's objective metric (conversion rate or resolution rate), CSAT, deflection, total chats, total interactions, unique users, latency, credits usage, playbook usage, tool usage, Knowledge Base document usage, time/dollars saved. Read-only.\nPredecessor: select the project first.\nSuccessor: search transcripts to drill into the specific conversations behind a metric.",
            "operation": "query_api_tool_usage",
            "operationDescription": "WHAT — Per-API-tool usage for a project, including success rate and average latency.\nUSE WHEN — Finding which API tools get called most, or spotting one with a low success rate (failing calls, bad auth, timeouts)."
          },
          "cli": {
            "command": "analytics query api-tool-usage"
          }
        },
        "x-speakeasy-group": "analytics.query",
        "x-speakeasy-name-override": "api-tool-usage",
        "summary": "Query API tool usage",
        "description": "Reports how often each API tool was called, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the project to operate on."
            },
            "description": "The ID of the project to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAnalyticsQueryAPIToolUsageRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns usage for each saved API tool, keyed by API tool ID, with total and successful counts alongside the average latency in milliseconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAnalyticsQueryAPIToolUsageResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns usage for each saved API tool, keyed by API tool ID, with total and successful counts alongside the average latency in milliseconds."
            }
          }
        },
        "tags": [
          "Analytics"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Reports how often each API tool was called, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take."
        }
      }
    },
    "/v1/stable/analytics/query/mcp-tool-usage/project/{projectID}": {
      "post": {
        "operationId": "StableAnalyticsController_queryMCPToolUsage",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_analytics",
            "toolDescription": "The Analytics dashboard surface — pre-defined widgets for the assistant's objective metric (conversion rate or resolution rate), CSAT, deflection, total chats, total interactions, unique users, latency, credits usage, playbook usage, tool usage, Knowledge Base document usage, time/dollars saved. Read-only.\nPredecessor: select the project first.\nSuccessor: search transcripts to drill into the specific conversations behind a metric.",
            "operation": "query_mcp_tool_usage",
            "operationDescription": "WHAT — Per-MCP-tool usage for a project, keyed by tool name rather than ID, including success rate and average latency.\nUSE WHEN — Finding which upstream MCP tools get called most, or spotting one with a low success rate."
          },
          "cli": {
            "command": "analytics query mcp-tool-usage"
          }
        },
        "x-speakeasy-group": "analytics.query",
        "x-speakeasy-name-override": "mcp-tool-usage",
        "summary": "Query MCP tool usage",
        "description": "Reports how often each MCP tool was called, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the project to operate on."
            },
            "description": "The ID of the project to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAnalyticsQueryMCPToolUsageRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns usage for each MCP tool, keyed by the tool's name rather than an ID, with total and successful counts and the average latency in milliseconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAnalyticsQueryMCPToolUsageResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns usage for each MCP tool, keyed by the tool's name rather than an ID, with total and successful counts and the average latency in milliseconds."
            }
          }
        },
        "tags": [
          "Analytics"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Reports how often each MCP tool was called, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take."
        }
      }
    },
    "/v1/stable/analytics/query/knowledge-base-document-usage/project/{projectID}": {
      "post": {
        "operationId": "StableAnalyticsController_queryKnowledgeBaseDocumentUsage",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_analytics",
            "toolDescription": "The Analytics dashboard surface — pre-defined widgets for the assistant's objective metric (conversion rate or resolution rate), CSAT, deflection, total chats, total interactions, unique users, latency, credits usage, playbook usage, tool usage, Knowledge Base document usage, time/dollars saved. Read-only.\nPredecessor: select the project first.\nSuccessor: search transcripts to drill into the specific conversations behind a metric.",
            "operation": "query_knowledge_base_document_usage",
            "operationDescription": "WHAT — Per-document retrieval counts for a project's Knowledge Base.\nUSE WHEN — Finding which documents actually get retrieved, or spotting zero-hit documents that may be safe to prune."
          },
          "cli": {
            "command": "analytics query knowledge-base-document-usage"
          }
        },
        "x-speakeasy-group": "analytics.query",
        "x-speakeasy-name-override": "knowledge-base-document-usage",
        "summary": "Query knowledge base document usage",
        "description": "Reports how often each knowledge base document was retrieved, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the project to operate on."
            },
            "description": "The ID of the project to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAnalyticsQueryKnowledgeBaseDocumentUsageRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns a usage count for each knowledge base document, keyed by document ID. The row is a document ID and a count, nothing more.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAnalyticsQueryKnowledgeBaseDocumentUsageResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns a usage count for each knowledge base document, keyed by document ID. The row is a document ID and a count, nothing more."
            }
          }
        },
        "tags": [
          "Analytics"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Reports how often each knowledge base document was retrieved, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take."
        }
      }
    },
    "/v1/stable/analytics/query/integration-usage/project/{projectID}": {
      "post": {
        "operationId": "StableAnalyticsController_queryIntegrationUsage",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_analytics",
            "toolDescription": "The Analytics dashboard surface — pre-defined widgets for the assistant's objective metric (conversion rate or resolution rate), CSAT, deflection, total chats, total interactions, unique users, latency, credits usage, playbook usage, tool usage, Knowledge Base document usage, time/dollars saved. Read-only.\nPredecessor: select the project first.\nSuccessor: search transcripts to drill into the specific conversations behind a metric.",
            "operation": "query_integration_usage",
            "operationDescription": "WHAT — Per-integration usage for a project (Gmail, Salesforce, Zendesk, etc. — distinct from MCP tools), including success rate and average latency.\nUSE WHEN — Finding which built-in integrations get called most, or spotting one with a low success rate."
          },
          "cli": {
            "command": "analytics query integration-usage"
          }
        },
        "x-speakeasy-group": "analytics.query",
        "x-speakeasy-name-override": "integration-usage",
        "summary": "Query integration usage",
        "description": "Reports how often each integration ran, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the project to operate on."
            },
            "description": "The ID of the project to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAnalyticsQueryIntegrationUsageRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns usage for each integration, keyed by the integration tool's name, with total and successful counts and the average latency in milliseconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAnalyticsQueryIntegrationUsageResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns usage for each integration, keyed by the integration tool's name, with total and successful counts and the average latency in milliseconds."
            }
          }
        },
        "tags": [
          "Analytics"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Reports how often each integration ran, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take."
        }
      }
    },
    "/v1/stable/analytics/query/unique-user-count/project/{projectID}": {
      "post": {
        "operationId": "StableAnalyticsController_queryUniqueUserCount",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_analytics",
            "toolDescription": "The Analytics dashboard surface — pre-defined widgets for the assistant's objective metric (conversion rate or resolution rate), CSAT, deflection, total chats, total interactions, unique users, latency, credits usage, playbook usage, tool usage, Knowledge Base document usage, time/dollars saved. Read-only.\nPredecessor: select the project first.\nSuccessor: search transcripts to drill into the specific conversations behind a metric.",
            "operation": "query_unique_user_count",
            "operationDescription": "WHAT — Unique user counts for a project, bucketed by interval.\nUSE WHEN — Tracking distinct-user trends over a date range, separate from raw interaction/transcript volume."
          },
          "cli": {
            "command": "analytics query unique-user-count"
          }
        },
        "x-speakeasy-group": "analytics.query",
        "x-speakeasy-name-override": "unique-user-count",
        "summary": "Query unique user count",
        "description": "Reports how many distinct users held a conversation, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the project to operate on."
            },
            "description": "The ID of the project to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAnalyticsQueryUniqueUserCountRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns the number of unique users per time interval, one row for each interval with the timestamp it starts at.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAnalyticsQueryUniqueUsersResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the number of unique users per time interval, one row for each interval with the timestamp it starts at."
            }
          }
        },
        "tags": [
          "Analytics"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Reports how many distinct users held a conversation, for one project over a date range. The request body takes `startDate`, `endDate` and an `interval`, the same shape the other analytics measures take."
        }
      }
    },
    "/v1/stable/analytics/query/objective-metrics/project/{projectID}": {
      "post": {
        "operationId": "StableAnalyticsController_queryObjectiveMetrics",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_analytics",
            "toolDescription": "The Analytics dashboard surface — pre-defined widgets for the assistant's objective metric (conversion rate or resolution rate), CSAT, deflection, total chats, total interactions, unique users, latency, credits usage, playbook usage, tool usage, Knowledge Base document usage, time/dollars saved. Read-only.\nPredecessor: select the project first.\nSuccessor: search transcripts to drill into the specific conversations behind a metric.",
            "operation": "query_objective_metrics",
            "operationDescription": "WHAT — How the assistant performs against the objective it is configured for, over a date range. Returns a `conversion` branch when the objective is conversion, a `resolution` branch when it is resolution, and an empty object when the assistant measures neither. Each branch carries the rate, the matched and evaluated session counts behind it, and a per-bucket breakdown of those two counts.\nUSE WHEN — Asked how an assistant is performing, whether it is meeting its goal or objective, what its conversion or resolution rate is, how many conversations converted or resolved, or how any of those moved between two periods. When no date range is given, default to the last 7 days.\nDO NOT — Choose the metric: the assistant's configured objective decides which branch comes back, so never ask the user to pick one, and never call conversion data missing when `resolution` is returned. Do not report a null `rate` as 0% — null means nothing was evaluated, not that nothing converted or resolved. Do not read the `buckets` entries as percentages; they are counts, so divide `matchedSessions` by `evaluatedSessions` within a bucket to get that bucket's rate. Do not assume a bucket is a day — read `interval`, which widens to week or month on long ranges. On an empty response, say the assistant is not currently measuring a conversion or resolution objective rather than reporting zeros.\nSCOPE — Published production traffic only. Draft and test sessions are excluded and cannot be requested. Ranges longer than 366 days are rejected; compare two periods with two calls instead."
          },
          "cli": {
            "command": "analytics query objective-metrics"
          }
        },
        "x-speakeasy-group": "analytics.query",
        "x-speakeasy-name-override": "objective-metrics",
        "summary": "Query objective metrics",
        "description": "Reports how sessions performed against the agent's configured objective, conversion or resolution, for one project over a date range. The request body takes `startDate` and `endDate`, with optional timezone, channel and environment filters.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the project to operate on."
            },
            "description": "The ID of the project to operate on."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableAnalyticsQueryObjectiveMetricsRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns the objective's rate, its matched and evaluated session counts and a time series of buckets, under `conversion` or `resolution` depending on which objective the agent is configured with.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableAnalyticsQueryObjectiveMetricsResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the objective's rate, its matched and evaluated session counts and a time series of buckets, under `conversion` or `resolution` depending on which objective the agent is configured with."
            }
          }
        },
        "tags": [
          "Analytics"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Reports how sessions performed against the agent's configured objective, conversion or resolution, for one project over a date range. The request body takes `startDate` and `endDate`, with optional timezone, channel and environment filters."
        }
      }
    },
    "/v1/stable/test": {
      "get": {
        "operationId": "StableTestController_list",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_test",
            "toolDescription": "A saved, replayable conversation script for regression-testing an agent — build it once, rerun it after every change instead of manually re-checking the same scenario. A test is an ordered sequence of turns: user (a scripted message sent as-is), agent (asserts on how the agent responded, via one or more attached checks), or simulation (hands off to an LLM-driven persona conversation).\nChecks live on agent turns only and come in three flavors: response (judge the agent's reply text), routing (assert the agent did or didn't route to a specific playbook or workflow), tool (assert the agent did or didn't call a specific tool).\nPredecessor: select the project and environment first; build the playbooks, functions, and tools the test will exercise so there's real behavior to assert on.\nSuccessor: add turns, then checks on any agent turn, then trigger a run to see the checks pass or fail.",
            "operation": "list",
            "operationDescription": "WHAT — List all tests in the project.\nUSE WHEN — Discovering what tests exist, or finding a testID to inspect or extend."
          },
          "cli": {
            "command": "test list"
          }
        },
        "x-speakeasy-group": "test",
        "x-speakeasy-name-override": "list",
        "summary": "List tests",
        "description": "Returns every test in the environment. A test is a scripted conversation replayed against the agent. The call takes no paging parameters, so one request yields the whole set.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns every test defined on the project's environment, each with its launch settings and a `turnOrder` listing the IDs of its turns in execution order. The turns themselves are fetched separately.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableTestListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns every test defined on the project's environment, each with its launch settings and a `turnOrder` listing the IDs of its turns in execution order. The turns themselves are fetched separately."
            }
          }
        },
        "tags": [
          "Test"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns every test in the environment. A test is a scripted conversation replayed against the agent. The call takes no paging parameters, so one request yields the whole set."
        }
      },
      "post": {
        "operationId": "StableTestController_create",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_test",
            "toolDescription": "A saved, replayable conversation script for regression-testing an agent — build it once, rerun it after every change instead of manually re-checking the same scenario. A test is an ordered sequence of turns: user (a scripted message sent as-is), agent (asserts on how the agent responded, via one or more attached checks), or simulation (hands off to an LLM-driven persona conversation).\nChecks live on agent turns only and come in three flavors: response (judge the agent's reply text), routing (assert the agent did or didn't route to a specific playbook or workflow), tool (assert the agent did or didn't call a specific tool).\nPredecessor: select the project and environment first; build the playbooks, functions, and tools the test will exercise so there's real behavior to assert on.\nSuccessor: add turns, then checks on any agent turn, then trigger a run to see the checks pass or fail.",
            "operation": "create",
            "operationDescription": "WHAT — Create a new test. Turns are added separately.\nUSE WHEN — Starting a new regression scenario for a flow you want to protect against future breakage.\nAFTER — voiceflow_test.create_turn to add the turns that make up the scenario."
          },
          "cli": {
            "command": "test create"
          }
        },
        "x-speakeasy-group": "test",
        "x-speakeasy-name-override": "create",
        "summary": "Create test",
        "description": "Adds a test to the environment, a scripted conversation replayed against the agent. The response carries the ID that later calls address it by.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableTestCreateRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Creates the test and returns it with its assigned `id`. A test holds no conversation of its own, so use that `id` to create the turns that make it up.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableTestResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Creates the test and returns it with its assigned `id`. A test holds no conversation of its own, so use that `id` to create the turns that make it up."
            }
          }
        },
        "tags": [
          "Test"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds a test to the environment, a scripted conversation replayed against the agent. The response carries the ID that later calls address it by."
        }
      }
    },
    "/v1/stable/test/batch": {
      "post": {
        "operationId": "StableTestController_createMany",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_test",
            "toolDescription": "A saved, replayable conversation script for regression-testing an agent — build it once, rerun it after every change instead of manually re-checking the same scenario. A test is an ordered sequence of turns: user (a scripted message sent as-is), agent (asserts on how the agent responded, via one or more attached checks), or simulation (hands off to an LLM-driven persona conversation).\nChecks live on agent turns only and come in three flavors: response (judge the agent's reply text), routing (assert the agent did or didn't route to a specific playbook or workflow), tool (assert the agent did or didn't call a specific tool).\nPredecessor: select the project and environment first; build the playbooks, functions, and tools the test will exercise so there's real behavior to assert on.\nSuccessor: add turns, then checks on any agent turn, then trigger a run to see the checks pass or fail.",
            "operation": "create_many",
            "operationDescription": "WHAT — Create multiple tests in one call.\nUSE WHEN — Scaffolding several regression scenarios at once (e.g. one test per playbook when standing up a new agent's test suite)."
          },
          "cli": {
            "command": "test create-many"
          }
        },
        "x-speakeasy-group": "test",
        "x-speakeasy-name-override": "create-many",
        "x-speakeasy-ignore": true,
        "summary": "Create many tests",
        "description": "Adds several tests to the environment in one request, each taking the fields the single-create call takes. The response carries the created tests in the same shape the list call returns.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableTestCreateManyRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Creates one test per entry in the request body and returns them all with their assigned IDs. Turns are attached afterwards, and a turn batch targets one test at a time.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableTestListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Creates one test per entry in the request body and returns them all with their assigned IDs. Turns are attached afterwards, and a turn batch targets one test at a time."
            }
          }
        },
        "tags": [
          "Test"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds several tests to the environment in one request, each taking the fields the single-create call takes. The response carries the created tests in the same shape the list call returns."
        }
      }
    },
    "/v1/stable/test/{testID}": {
      "get": {
        "operationId": "StableTestController_get",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_test",
            "toolDescription": "A saved, replayable conversation script for regression-testing an agent — build it once, rerun it after every change instead of manually re-checking the same scenario. A test is an ordered sequence of turns: user (a scripted message sent as-is), agent (asserts on how the agent responded, via one or more attached checks), or simulation (hands off to an LLM-driven persona conversation).\nChecks live on agent turns only and come in three flavors: response (judge the agent's reply text), routing (assert the agent did or didn't route to a specific playbook or workflow), tool (assert the agent did or didn't call a specific tool).\nPredecessor: select the project and environment first; build the playbooks, functions, and tools the test will exercise so there's real behavior to assert on.\nSuccessor: add turns, then checks on any agent turn, then trigger a run to see the checks pass or fail.",
            "operation": "get",
            "operationDescription": "WHAT — Fetch a single test by ID.\nUSE WHEN — Before editing it.\nAFTER — voiceflow_test.list_turns to see its turns."
          },
          "cli": {
            "command": "test get"
          }
        },
        "x-speakeasy-group": "test",
        "x-speakeasy-name-override": "get",
        "summary": "Get test",
        "description": "Returns a single test by ID, with the fields that define it. A test is a scripted conversation replayed against the agent.",
        "parameters": [
          {
            "name": "testID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the test to operate on."
            },
            "description": "The ID of the test to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns one test's name, launch settings, and `turnOrder`, which is the IDs of its turns in the order they run. Fetch the turns themselves by test ID, and their checks by turn ID.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableTestResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns one test's name, launch settings, and `turnOrder`, which is the IDs of its turns in the order they run. Fetch the turns themselves by test ID, and their checks by turn ID."
            }
          }
        },
        "tags": [
          "Test"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns a single test by ID, with the fields that define it. A test is a scripted conversation replayed against the agent."
        }
      },
      "patch": {
        "operationId": "StableTestController_update",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_test",
            "toolDescription": "A saved, replayable conversation script for regression-testing an agent — build it once, rerun it after every change instead of manually re-checking the same scenario. A test is an ordered sequence of turns: user (a scripted message sent as-is), agent (asserts on how the agent responded, via one or more attached checks), or simulation (hands off to an LLM-driven persona conversation).\nChecks live on agent turns only and come in three flavors: response (judge the agent's reply text), routing (assert the agent did or didn't route to a specific playbook or workflow), tool (assert the agent did or didn't call a specific tool).\nPredecessor: select the project and environment first; build the playbooks, functions, and tools the test will exercise so there's real behavior to assert on.\nSuccessor: add turns, then checks on any agent turn, then trigger a run to see the checks pass or fail.",
            "operation": "update",
            "operationDescription": "WHAT — Update a test.\nUSE WHEN — Renaming a test, adjusting its defaults, or reordering its turns.\nDO NOT — Try to add or remove a turn through this endpoint — turn membership is managed via voiceflow_test.create_turn and voiceflow_test.delete_turn; this endpoint only reorders turns that already exist."
          },
          "cli": {
            "command": "test update"
          }
        },
        "x-speakeasy-group": "test",
        "x-speakeasy-name-override": "update",
        "summary": "Update test",
        "description": "Changes an existing test in place. The response carries only a confirmation message, so refetch the test to read its new values.",
        "parameters": [
          {
            "name": "testID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the test to operate on."
            },
            "description": "The ID of the test to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/StableTestUpdateRequest"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confirms the test's name, launch settings, or `turnOrder` were updated. The body is a message only, and `turnOrder` is where a conversation's sequence lives, since turns carry no position of their own.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableUpdateResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the test's name, launch settings, or `turnOrder` were updated. The body is a message only, and `turnOrder` is where a conversation's sequence lives, since turns carry no position of their own."
            }
          }
        },
        "tags": [
          "Test"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Changes an existing test in place. The response carries only a confirmation message, so refetch the test to read its new values."
        }
      },
      "delete": {
        "operationId": "StableTestController_delete",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_test",
            "toolDescription": "A saved, replayable conversation script for regression-testing an agent — build it once, rerun it after every change instead of manually re-checking the same scenario. A test is an ordered sequence of turns: user (a scripted message sent as-is), agent (asserts on how the agent responded, via one or more attached checks), or simulation (hands off to an LLM-driven persona conversation).\nChecks live on agent turns only and come in three flavors: response (judge the agent's reply text), routing (assert the agent did or didn't route to a specific playbook or workflow), tool (assert the agent did or didn't call a specific tool).\nPredecessor: select the project and environment first; build the playbooks, functions, and tools the test will exercise so there's real behavior to assert on.\nSuccessor: add turns, then checks on any agent turn, then trigger a run to see the checks pass or fail.",
            "operation": "delete",
            "operationDescription": "WHAT — Remove a test, along with all of its turns and checks.\nUSE WHEN — Retiring a regression scenario that's no longer relevant."
          },
          "cli": {
            "command": "test delete"
          }
        },
        "x-speakeasy-group": "test",
        "x-speakeasy-name-override": "delete",
        "summary": "Delete test",
        "description": "Deletes a single test by ID. A test is a scripted conversation replayed against the agent. The response carries only a confirmation message, so refetch the tests to see what is left.",
        "parameters": [
          {
            "name": "testID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the test to operate on."
            },
            "description": "The ID of the test to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Confirms the test was deleted. The body is a message only and reports nothing about the test's turns, checks, or past runs, which are separate resources.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableDeleteResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the test was deleted. The body is a message only and reports nothing about the test's turns, checks, or past runs, which are separate resources."
            }
          }
        },
        "tags": [
          "Test"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Deletes a single test by ID. A test is a scripted conversation replayed against the agent. The response carries only a confirmation message, so refetch the tests to see what is left."
        }
      }
    },
    "/v1/stable/test-turn": {
      "get": {
        "operationId": "StableTestTurnController_list",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_test",
            "toolDescription": "A saved, replayable conversation script for regression-testing an agent — build it once, rerun it after every change instead of manually re-checking the same scenario. A test is an ordered sequence of turns: user (a scripted message sent as-is), agent (asserts on how the agent responded, via one or more attached checks), or simulation (hands off to an LLM-driven persona conversation).\nChecks live on agent turns only and come in three flavors: response (judge the agent's reply text), routing (assert the agent did or didn't route to a specific playbook or workflow), tool (assert the agent did or didn't call a specific tool).\nPredecessor: select the project and environment first; build the playbooks, functions, and tools the test will exercise so there's real behavior to assert on.\nSuccessor: add turns, then checks on any agent turn, then trigger a run to see the checks pass or fail.",
            "operation": "list_turns",
            "operationDescription": "WHAT — List all turns by test ID.\nUSE WHEN — Reading a test's full script, or finding a turnID to inspect, patch, or attach checks to."
          },
          "cli": {
            "command": "test turn list"
          }
        },
        "x-speakeasy-group": "test.turn",
        "x-speakeasy-name-override": "list",
        "summary": "List turns",
        "description": "Returns every test turn in its test. A test turn is one side of a scripted conversation, either what the user says or the agent reply the checks assert on. The call takes no paging parameters, so one request yields the whole set.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          },
          {
            "name": "testID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the test whose turns to list."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns every turn belonging to the test named in `testID`. A turn is a scripted user message, an agent turn whose checks assert on what the agent did, or a simulation where an LLM plays the user across a stretch of the conversation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableTestTurnListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns every turn belonging to the test named in `testID`. A turn is a scripted user message, an agent turn whose checks assert on what the agent did, or a simulation where an LLM plays the user across a stretch of the conversation."
            }
          }
        },
        "tags": [
          "Test Turn"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns every test turn in its test. A test turn is one side of a scripted conversation, either what the user says or the agent reply the checks assert on. The call takes no paging parameters, so one request yields the whole set."
        }
      },
      "post": {
        "operationId": "StableTestTurnController_create",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_test",
            "toolDescription": "A saved, replayable conversation script for regression-testing an agent — build it once, rerun it after every change instead of manually re-checking the same scenario. A test is an ordered sequence of turns: user (a scripted message sent as-is), agent (asserts on how the agent responded, via one or more attached checks), or simulation (hands off to an LLM-driven persona conversation).\nChecks live on agent turns only and come in three flavors: response (judge the agent's reply text), routing (assert the agent did or didn't route to a specific playbook or workflow), tool (assert the agent did or didn't call a specific tool).\nPredecessor: select the project and environment first; build the playbooks, functions, and tools the test will exercise so there's real behavior to assert on.\nSuccessor: add turns, then checks on any agent turn, then trigger a run to see the checks pass or fail.",
            "operation": "create_turn",
            "operationDescription": "WHAT — Add a new turn to a test.\nUSE WHEN — Building out a test's script one step at a time.\nAFTER — For an agent turn, attach checks via voiceflow_test.create_check — an agent turn with no checks asserts nothing."
          },
          "cli": {
            "command": "test turn create"
          }
        },
        "x-speakeasy-group": "test.turn",
        "x-speakeasy-name-override": "create",
        "summary": "Create turn",
        "description": "Adds a test turn to its test, one side of a scripted conversation, either what the user says or the agent reply the checks assert on. The response carries the ID that later calls address it by.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableTestTurnCreateRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Creates one turn on the test named in the body and returns it with its assigned `id`. Where the turn sits in the conversation is held by the test's `turnOrder`, not by the turn.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableTestTurnResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Creates one turn on the test named in the body and returns it with its assigned `id`. Where the turn sits in the conversation is held by the test's `turnOrder`, not by the turn."
            }
          }
        },
        "tags": [
          "Test Turn"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds a test turn to its test, one side of a scripted conversation, either what the user says or the agent reply the checks assert on. The response carries the ID that later calls address it by."
        }
      }
    },
    "/v1/stable/test-turn/batch": {
      "post": {
        "operationId": "StableTestTurnController_createMany",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_test",
            "toolDescription": "A saved, replayable conversation script for regression-testing an agent — build it once, rerun it after every change instead of manually re-checking the same scenario. A test is an ordered sequence of turns: user (a scripted message sent as-is), agent (asserts on how the agent responded, via one or more attached checks), or simulation (hands off to an LLM-driven persona conversation).\nChecks live on agent turns only and come in three flavors: response (judge the agent's reply text), routing (assert the agent did or didn't route to a specific playbook or workflow), tool (assert the agent did or didn't call a specific tool).\nPredecessor: select the project and environment first; build the playbooks, functions, and tools the test will exercise so there's real behavior to assert on.\nSuccessor: add turns, then checks on any agent turn, then trigger a run to see the checks pass or fail.",
            "operation": "create_many_turns",
            "operationDescription": "WHAT — Add multiple turns to the same test in one call, in the order given.\nUSE WHEN — Scaffolding a whole test script at once instead of one create call per turn."
          },
          "cli": {
            "command": "test turn create-many"
          }
        },
        "x-speakeasy-group": "test.turn",
        "x-speakeasy-name-override": "create-many",
        "x-speakeasy-ignore": true,
        "summary": "Create many turns",
        "description": "Adds several test turns to its test in one request, each taking the fields the single-create call takes. The response carries the created test turns in the same shape the list call returns.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableTestTurnCreateManyRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Creates every turn in the request body against the single test named there and returns them with their assigned IDs. Checks are not part of this call: create them separately against an agent turn's `id`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableTestTurnListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Creates every turn in the request body against the single test named there and returns them with their assigned IDs. Checks are not part of this call: create them separately against an agent turn's `id`."
            }
          }
        },
        "tags": [
          "Test Turn"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds several test turns to its test in one request, each taking the fields the single-create call takes. The response carries the created test turns in the same shape the list call returns."
        }
      }
    },
    "/v1/stable/test-turn/{turnID}": {
      "get": {
        "operationId": "StableTestTurnController_get",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_test",
            "toolDescription": "A saved, replayable conversation script for regression-testing an agent — build it once, rerun it after every change instead of manually re-checking the same scenario. A test is an ordered sequence of turns: user (a scripted message sent as-is), agent (asserts on how the agent responded, via one or more attached checks), or simulation (hands off to an LLM-driven persona conversation).\nChecks live on agent turns only and come in three flavors: response (judge the agent's reply text), routing (assert the agent did or didn't route to a specific playbook or workflow), tool (assert the agent did or didn't call a specific tool).\nPredecessor: select the project and environment first; build the playbooks, functions, and tools the test will exercise so there's real behavior to assert on.\nSuccessor: add turns, then checks on any agent turn, then trigger a run to see the checks pass or fail.",
            "operation": "get_turn",
            "operationDescription": "WHAT — Fetch a single turn by ID.\nUSE WHEN — Before editing it."
          },
          "cli": {
            "command": "test turn get"
          }
        },
        "x-speakeasy-group": "test.turn",
        "x-speakeasy-name-override": "get",
        "summary": "Get turn",
        "description": "Returns a single test turn by ID, with the fields that define it. A test turn is one side of a scripted conversation, either what the user says or the agent reply the checks assert on.",
        "parameters": [
          {
            "name": "turnID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the test turn to operate on."
            },
            "description": "The ID of the test turn to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns one turn: the `testID` it belongs to, the payload for its type, and, on an agent turn, the `checkOrder` naming the checks that run against it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableTestTurnResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns one turn: the `testID` it belongs to, the payload for its type, and, on an agent turn, the `checkOrder` naming the checks that run against it."
            }
          }
        },
        "tags": [
          "Test Turn"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns a single test turn by ID, with the fields that define it. A test turn is one side of a scripted conversation, either what the user says or the agent reply the checks assert on."
        }
      },
      "patch": {
        "operationId": "StableTestTurnController_update",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_test",
            "toolDescription": "A saved, replayable conversation script for regression-testing an agent — build it once, rerun it after every change instead of manually re-checking the same scenario. A test is an ordered sequence of turns: user (a scripted message sent as-is), agent (asserts on how the agent responded, via one or more attached checks), or simulation (hands off to an LLM-driven persona conversation).\nChecks live on agent turns only and come in three flavors: response (judge the agent's reply text), routing (assert the agent did or didn't route to a specific playbook or workflow), tool (assert the agent did or didn't call a specific tool).\nPredecessor: select the project and environment first; build the playbooks, functions, and tools the test will exercise so there's real behavior to assert on.\nSuccessor: add turns, then checks on any agent turn, then trigger a run to see the checks pass or fail.",
            "operation": "update_turn",
            "operationDescription": "WHAT — Update a turn.\nUSE WHEN — Editing a turn's content, or reordering its checks.\nDO NOT — Try to change what kind of turn this is through an update — the request is rejected if the new data doesn't match the turn's existing kind. Delete it and create a new turn instead."
          },
          "cli": {
            "command": "test turn update"
          }
        },
        "x-speakeasy-group": "test.turn",
        "x-speakeasy-name-override": "update",
        "summary": "Update turn",
        "description": "Changes an existing test turn in place. The response carries only a confirmation message, so refetch the test turn to read its new values.",
        "parameters": [
          {
            "name": "turnID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the test turn to operate on."
            },
            "description": "The ID of the test turn to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableTestTurnUpdateRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confirms the turn's payload was updated, along with its `checkOrder` on an agent turn. The body is a message only, not the revised turn.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableUpdateResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the turn's payload was updated, along with its `checkOrder` on an agent turn. The body is a message only, not the revised turn."
            }
          }
        },
        "tags": [
          "Test Turn"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Changes an existing test turn in place. The response carries only a confirmation message, so refetch the test turn to read its new values."
        }
      },
      "delete": {
        "operationId": "StableTestTurnController_delete",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_test",
            "toolDescription": "A saved, replayable conversation script for regression-testing an agent — build it once, rerun it after every change instead of manually re-checking the same scenario. A test is an ordered sequence of turns: user (a scripted message sent as-is), agent (asserts on how the agent responded, via one or more attached checks), or simulation (hands off to an LLM-driven persona conversation).\nChecks live on agent turns only and come in three flavors: response (judge the agent's reply text), routing (assert the agent did or didn't route to a specific playbook or workflow), tool (assert the agent did or didn't call a specific tool).\nPredecessor: select the project and environment first; build the playbooks, functions, and tools the test will exercise so there's real behavior to assert on.\nSuccessor: add turns, then checks on any agent turn, then trigger a run to see the checks pass or fail.",
            "operation": "delete_turn",
            "operationDescription": "WHAT — Remove a turn from its test, along with any checks attached to it.\nUSE WHEN — Cutting a step out of a test's script."
          },
          "cli": {
            "command": "test turn delete"
          }
        },
        "x-speakeasy-group": "test.turn",
        "x-speakeasy-name-override": "delete",
        "summary": "Delete turn",
        "description": "Deletes a single test turn by ID. A test turn is one side of a scripted conversation, either what the user says or the agent reply the checks assert on. The response carries only a confirmation message, so refetch the test turns to see what is left.",
        "parameters": [
          {
            "name": "turnID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the test turn to operate on."
            },
            "description": "The ID of the test turn to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Confirms the turn was deleted. The body is a message only, so refetch the parent test if you need its current `turnOrder`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableDeleteResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the turn was deleted. The body is a message only, so refetch the parent test if you need its current `turnOrder`."
            }
          }
        },
        "tags": [
          "Test Turn"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Deletes a single test turn by ID. A test turn is one side of a scripted conversation, either what the user says or the agent reply the checks assert on. The response carries only a confirmation message, so refetch the test turns to see what is left."
        }
      }
    },
    "/v1/stable/test-check": {
      "get": {
        "operationId": "StableTestCheckController_list",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_test",
            "toolDescription": "A saved, replayable conversation script for regression-testing an agent — build it once, rerun it after every change instead of manually re-checking the same scenario. A test is an ordered sequence of turns: user (a scripted message sent as-is), agent (asserts on how the agent responded, via one or more attached checks), or simulation (hands off to an LLM-driven persona conversation).\nChecks live on agent turns only and come in three flavors: response (judge the agent's reply text), routing (assert the agent did or didn't route to a specific playbook or workflow), tool (assert the agent did or didn't call a specific tool).\nPredecessor: select the project and environment first; build the playbooks, functions, and tools the test will exercise so there's real behavior to assert on.\nSuccessor: add turns, then checks on any agent turn, then trigger a run to see the checks pass or fail.",
            "operation": "list_checks",
            "operationDescription": "WHAT — List all checks by turn ID.\nUSE WHEN — Reading what an agent turn currently asserts, or finding a checkID to edit."
          },
          "cli": {
            "command": "test check list"
          }
        },
        "x-speakeasy-group": "test.check",
        "x-speakeasy-name-override": "list",
        "summary": "List checks",
        "description": "Returns every test check in its turn. A test check is one assertion about an agent turn, comparing the reply or the behaviour behind it. The call takes no paging parameters, so one request yields the whole set.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          },
          {
            "name": "turnID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the turn whose checks to list."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns every check attached to the turn named in `turnID`. Each one asserts on the agent's response text, on whether it routed to a given playbook or workflow, or on whether it called a given tool.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableTestCheckListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns every check attached to the turn named in `turnID`. Each one asserts on the agent's response text, on whether it routed to a given playbook or workflow, or on whether it called a given tool."
            }
          }
        },
        "tags": [
          "Test Check"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns every test check in its turn. A test check is one assertion about an agent turn, comparing the reply or the behaviour behind it. The call takes no paging parameters, so one request yields the whole set."
        }
      },
      "post": {
        "operationId": "StableTestCheckController_create",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_test",
            "toolDescription": "A saved, replayable conversation script for regression-testing an agent — build it once, rerun it after every change instead of manually re-checking the same scenario. A test is an ordered sequence of turns: user (a scripted message sent as-is), agent (asserts on how the agent responded, via one or more attached checks), or simulation (hands off to an LLM-driven persona conversation).\nChecks live on agent turns only and come in three flavors: response (judge the agent's reply text), routing (assert the agent did or didn't route to a specific playbook or workflow), tool (assert the agent did or didn't call a specific tool).\nPredecessor: select the project and environment first; build the playbooks, functions, and tools the test will exercise so there's real behavior to assert on.\nSuccessor: add turns, then checks on any agent turn, then trigger a run to see the checks pass or fail.",
            "operation": "create_check",
            "operationDescription": "WHAT — Attach a new check to a turn.\nUSE WHEN — Adding an assertion to an agent turn so the test actually verifies something.\nDO NOT — Attach a check to a user or simulation turn — checks only make sense on agent turns."
          },
          "cli": {
            "command": "test check create"
          }
        },
        "x-speakeasy-group": "test.check",
        "x-speakeasy-name-override": "create",
        "summary": "Create check",
        "description": "Adds a test check to its turn, one assertion about an agent turn, comparing the reply or the behaviour behind it. The response carries the ID that later calls address it by.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableTestCheckCreateRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Creates one check on the turn named in the body and returns it with its assigned `id`. Checks hang off agent turns, which are the turns that carry a `checkOrder`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableTestCheckResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Creates one check on the turn named in the body and returns it with its assigned `id`. Checks hang off agent turns, which are the turns that carry a `checkOrder`."
            }
          }
        },
        "tags": [
          "Test Check"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds a test check to its turn, one assertion about an agent turn, comparing the reply or the behaviour behind it. The response carries the ID that later calls address it by."
        }
      }
    },
    "/v1/stable/test-check/batch": {
      "post": {
        "operationId": "StableTestCheckController_createMany",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_test",
            "toolDescription": "A saved, replayable conversation script for regression-testing an agent — build it once, rerun it after every change instead of manually re-checking the same scenario. A test is an ordered sequence of turns: user (a scripted message sent as-is), agent (asserts on how the agent responded, via one or more attached checks), or simulation (hands off to an LLM-driven persona conversation).\nChecks live on agent turns only and come in three flavors: response (judge the agent's reply text), routing (assert the agent did or didn't route to a specific playbook or workflow), tool (assert the agent did or didn't call a specific tool).\nPredecessor: select the project and environment first; build the playbooks, functions, and tools the test will exercise so there's real behavior to assert on.\nSuccessor: add turns, then checks on any agent turn, then trigger a run to see the checks pass or fail.",
            "operation": "create_many_checks",
            "operationDescription": "WHAT — Attach multiple checks to the same turn in one call, in the order given.\nUSE WHEN — An agent turn needs several assertions at once (e.g. checking both the response text and that a tool fired)."
          },
          "cli": {
            "command": "test check create-many"
          }
        },
        "x-speakeasy-group": "test.check",
        "x-speakeasy-name-override": "create-many",
        "x-speakeasy-ignore": true,
        "summary": "Create many checks",
        "description": "Adds several test checks to its turn in one request, each taking the fields the single-create call takes. The response carries the created test checks in the same shape the list call returns.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableTestCheckCreateManyRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Creates every check in the request body against the single turn named there and returns them with their assigned IDs. Types can be mixed in one batch, so a response, a routing, and a tool check can all land on the same turn.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableTestCheckListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Creates every check in the request body against the single turn named there and returns them with their assigned IDs. Types can be mixed in one batch, so a response, a routing, and a tool check can all land on the same turn."
            }
          }
        },
        "tags": [
          "Test Check"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds several test checks to its turn in one request, each taking the fields the single-create call takes. The response carries the created test checks in the same shape the list call returns."
        }
      }
    },
    "/v1/stable/test-check/{checkID}": {
      "get": {
        "operationId": "StableTestCheckController_get",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_test",
            "toolDescription": "A saved, replayable conversation script for regression-testing an agent — build it once, rerun it after every change instead of manually re-checking the same scenario. A test is an ordered sequence of turns: user (a scripted message sent as-is), agent (asserts on how the agent responded, via one or more attached checks), or simulation (hands off to an LLM-driven persona conversation).\nChecks live on agent turns only and come in three flavors: response (judge the agent's reply text), routing (assert the agent did or didn't route to a specific playbook or workflow), tool (assert the agent did or didn't call a specific tool).\nPredecessor: select the project and environment first; build the playbooks, functions, and tools the test will exercise so there's real behavior to assert on.\nSuccessor: add turns, then checks on any agent turn, then trigger a run to see the checks pass or fail.",
            "operation": "get_check",
            "operationDescription": "WHAT — Fetch a single check's detail.\nUSE WHEN — Before editing it."
          },
          "cli": {
            "command": "test check get"
          }
        },
        "x-speakeasy-group": "test.check",
        "x-speakeasy-name-override": "get",
        "summary": "Get check",
        "description": "Returns a single test check by ID, with the fields that define it. A test check is one assertion about an agent turn, comparing the reply or the behaviour behind it.",
        "parameters": [
          {
            "name": "checkID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the test check to operate on."
            },
            "description": "The ID of the test check to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns one check with the `turnID` it belongs to and the payload for its type: the expected string or judge prompt for a response check, the routing target and whether it should be reached, or the tool and whether it should be called.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableTestCheckResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns one check with the `turnID` it belongs to and the payload for its type: the expected string or judge prompt for a response check, the routing target and whether it should be reached, or the tool and whether it should be called."
            }
          }
        },
        "tags": [
          "Test Check"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns a single test check by ID, with the fields that define it. A test check is one assertion about an agent turn, comparing the reply or the behaviour behind it."
        }
      },
      "patch": {
        "operationId": "StableTestCheckController_update",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_test",
            "toolDescription": "A saved, replayable conversation script for regression-testing an agent — build it once, rerun it after every change instead of manually re-checking the same scenario. A test is an ordered sequence of turns: user (a scripted message sent as-is), agent (asserts on how the agent responded, via one or more attached checks), or simulation (hands off to an LLM-driven persona conversation).\nChecks live on agent turns only and come in three flavors: response (judge the agent's reply text), routing (assert the agent did or didn't route to a specific playbook or workflow), tool (assert the agent did or didn't call a specific tool).\nPredecessor: select the project and environment first; build the playbooks, functions, and tools the test will exercise so there's real behavior to assert on.\nSuccessor: add turns, then checks on any agent turn, then trigger a run to see the checks pass or fail.",
            "operation": "update_check",
            "operationDescription": "WHAT — Update a check.\nUSE WHEN — Correcting what a check asserts.\nDO NOT — Try to change what kind of check this is through an update — the request is rejected if the new data doesn't match the check's existing kind. Delete it and create a new check instead."
          },
          "cli": {
            "command": "test check update"
          }
        },
        "x-speakeasy-group": "test.check",
        "x-speakeasy-name-override": "update",
        "summary": "Update check",
        "description": "Changes an existing test check in place. The response carries only a confirmation message, so refetch the test check to read its new values.",
        "parameters": [
          {
            "name": "checkID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the test check to operate on."
            },
            "description": "The ID of the test check to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableTestCheckUpdateRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confirms the check's payload was updated, such as a new judge prompt or a different routing target. The body carries a message only, so read the check back to see what was stored.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableUpdateResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms the check's payload was updated, such as a new judge prompt or a different routing target. The body carries a message only, so read the check back to see what was stored."
            }
          }
        },
        "tags": [
          "Test Check"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Changes an existing test check in place. The response carries only a confirmation message, so refetch the test check to read its new values."
        }
      },
      "delete": {
        "operationId": "StableTestCheckController_delete",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_test",
            "toolDescription": "A saved, replayable conversation script for regression-testing an agent — build it once, rerun it after every change instead of manually re-checking the same scenario. A test is an ordered sequence of turns: user (a scripted message sent as-is), agent (asserts on how the agent responded, via one or more attached checks), or simulation (hands off to an LLM-driven persona conversation).\nChecks live on agent turns only and come in three flavors: response (judge the agent's reply text), routing (assert the agent did or didn't route to a specific playbook or workflow), tool (assert the agent did or didn't call a specific tool).\nPredecessor: select the project and environment first; build the playbooks, functions, and tools the test will exercise so there's real behavior to assert on.\nSuccessor: add turns, then checks on any agent turn, then trigger a run to see the checks pass or fail.",
            "operation": "delete_check",
            "operationDescription": "WHAT — Remove a check from its turn.\nUSE WHEN — The assertion is no longer relevant, or being replaced by a differently-typed check."
          },
          "cli": {
            "command": "test check delete"
          }
        },
        "x-speakeasy-group": "test.check",
        "x-speakeasy-name-override": "delete",
        "summary": "Delete check",
        "description": "Deletes a single test check by ID. A test check is one assertion about an agent turn, comparing the reply or the behaviour behind it. The response carries only a confirmation message, so refetch the test checks to see what is left.",
        "parameters": [
          {
            "name": "checkID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the test check to operate on."
            },
            "description": "The ID of the test check to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Confirms one assertion was removed from its turn. The body carries a message only, not the turn's remaining checks.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableDeleteResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Confirms one assertion was removed from its turn. The body carries a message only, not the turn's remaining checks."
            }
          }
        },
        "tags": [
          "Test Check"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Deletes a single test check by ID. A test check is one assertion about an agent turn, comparing the reply or the behaviour behind it. The response carries only a confirmation message, so refetch the test checks to see what is left."
        }
      }
    },
    "/v1/stable/test-run/search": {
      "post": {
        "operationId": "StableTestRunController_search",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_test",
            "toolDescription": "A saved, replayable conversation script for regression-testing an agent — build it once, rerun it after every change instead of manually re-checking the same scenario. A test is an ordered sequence of turns: user (a scripted message sent as-is), agent (asserts on how the agent responded, via one or more attached checks), or simulation (hands off to an LLM-driven persona conversation).\nChecks live on agent turns only and come in three flavors: response (judge the agent's reply text), routing (assert the agent did or didn't route to a specific playbook or workflow), tool (assert the agent did or didn't call a specific tool).\nPredecessor: select the project and environment first; build the playbooks, functions, and tools the test will exercise so there's real behavior to assert on.\nSuccessor: add turns, then checks on any agent turn, then trigger a run to see the checks pass or fail.",
            "operation": "search_runs",
            "operationDescription": "WHAT — Search runs in the project, optionally scoped to a single test.\nUSE WHEN — Reviewing run history, checking whether a test's most recent run passed, or finding a runID to inspect further."
          },
          "cli": {
            "command": "test run search"
          }
        },
        "x-speakeasy-group": "test.run",
        "x-speakeasy-name-override": "search",
        "summary": "Search runs",
        "description": "Finds past runs of a test, each carrying how many of its checks passed. The body takes `take` and `skip`, so results arrive a page at a time rather than all at once.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableTestRunSearchRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns the runs matching the search body, each carrying the `testID` it belongs to, its `status`, its check tallies, and the credits it consumed. Set `testID` in the body to narrow to one test's history, or omit it to search every test in the environment.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableTestRunListResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns the runs matching the search body, each carrying the `testID` it belongs to, its `status`, its check tallies, and the credits it consumed. Set `testID` in the body to narrow to one test's history, or omit it to search every test in the environment."
            }
          }
        },
        "tags": [
          "Test Run"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Finds past runs of a test, each carrying how many of its checks passed. The body takes `take` and `skip`, so results arrive a page at a time rather than all at once."
        }
      }
    },
    "/v1/stable/test-run": {
      "post": {
        "operationId": "StableTestRunController_create",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_test",
            "toolDescription": "A saved, replayable conversation script for regression-testing an agent — build it once, rerun it after every change instead of manually re-checking the same scenario. A test is an ordered sequence of turns: user (a scripted message sent as-is), agent (asserts on how the agent responded, via one or more attached checks), or simulation (hands off to an LLM-driven persona conversation).\nChecks live on agent turns only and come in three flavors: response (judge the agent's reply text), routing (assert the agent did or didn't route to a specific playbook or workflow), tool (assert the agent did or didn't call a specific tool).\nPredecessor: select the project and environment first; build the playbooks, functions, and tools the test will exercise so there's real behavior to assert on.\nSuccessor: add turns, then checks on any agent turn, then trigger a run to see the checks pass or fail.",
            "operation": "create_run",
            "operationDescription": "WHAT — Trigger a new run of a test. Execution is asynchronous — the run starts queued and moves through its lifecycle in the background.\nUSE WHEN — Verifying a test after building or editing its turns and checks, or confirming a fix actually resolved a prior failure.\nAFTER — voiceflow_test.get_run to poll for the outcome."
          },
          "cli": {
            "command": "test run create"
          }
        },
        "x-speakeasy-group": "test.run",
        "x-speakeasy-name-override": "create",
        "summary": "Create run",
        "description": "Adds a test run to the environment, one execution of a test, carrying how many of its checks passed. The response carries the ID that later calls address it by.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableTestRunCreateRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Creates a run of the test named in the body and returns it, possibly still queued: `startedAt` is null until execution begins and `passedChecks` is null until the run finishes. Read the run back by `id` to follow it through to `passed`, `failed`, or `canceled`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableTestRunResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Creates a run of the test named in the body and returns it, possibly still queued: `startedAt` is null until execution begins and `passedChecks` is null until the run finishes. Read the run back by `id` to follow it through to `passed`, `failed`, or `canceled`."
            }
          }
        },
        "tags": [
          "Test Run"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds a test run to the environment, one execution of a test, carrying how many of its checks passed. The response carries the ID that later calls address it by."
        }
      }
    },
    "/v1/stable/test-run/batch": {
      "post": {
        "operationId": "StableTestRunController_createMany",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_test",
            "toolDescription": "A saved, replayable conversation script for regression-testing an agent — build it once, rerun it after every change instead of manually re-checking the same scenario. A test is an ordered sequence of turns: user (a scripted message sent as-is), agent (asserts on how the agent responded, via one or more attached checks), or simulation (hands off to an LLM-driven persona conversation).\nChecks live on agent turns only and come in three flavors: response (judge the agent's reply text), routing (assert the agent did or didn't route to a specific playbook or workflow), tool (assert the agent did or didn't call a specific tool).\nPredecessor: select the project and environment first; build the playbooks, functions, and tools the test will exercise so there's real behavior to assert on.\nSuccessor: add turns, then checks on any agent turn, then trigger a run to see the checks pass or fail.",
            "operation": "create_many_runs",
            "operationDescription": "WHAT — Trigger a run for each of several tests in one call.\nUSE WHEN — Running a full regression suite at once (e.g. before publishing) instead of triggering each test individually.\nAFTER — voiceflow_test.get_run on the returned runs to track their progress."
          },
          "cli": {
            "command": "test run create-many"
          }
        },
        "x-speakeasy-group": "test.run",
        "x-speakeasy-name-override": "create-many",
        "x-speakeasy-ignore": true,
        "summary": "Create many runs",
        "description": "Adds several test runs to the environment in one request, each taking the fields the single-create call takes. The response carries the created test runs in the same shape the list call returns.",
        "parameters": [
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StableTestRunCreateManyRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Creates one run for each test ID in the request body and returns them all under a shared `bulkID` identifying the batch. Each run comes back in the same shape as a single run, with its own `status`, check tallies, and logs.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableTestRunCreateManyResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Creates one run for each test ID in the request body and returns them all under a shared `bulkID` identifying the batch. Each run comes back in the same shape as a single run, with its own `status`, check tallies, and logs."
            }
          }
        },
        "tags": [
          "Test Run"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Adds several test runs to the environment in one request, each taking the fields the single-create call takes. The response carries the created test runs in the same shape the list call returns."
        }
      }
    },
    "/v1/stable/test-run/{runID}": {
      "get": {
        "operationId": "StableTestRunController_get",
        "x-vf": {
          "mcp": {
            "tool": "voiceflow_test",
            "toolDescription": "A saved, replayable conversation script for regression-testing an agent — build it once, rerun it after every change instead of manually re-checking the same scenario. A test is an ordered sequence of turns: user (a scripted message sent as-is), agent (asserts on how the agent responded, via one or more attached checks), or simulation (hands off to an LLM-driven persona conversation).\nChecks live on agent turns only and come in three flavors: response (judge the agent's reply text), routing (assert the agent did or didn't route to a specific playbook or workflow), tool (assert the agent did or didn't call a specific tool).\nPredecessor: select the project and environment first; build the playbooks, functions, and tools the test will exercise so there's real behavior to assert on.\nSuccessor: add turns, then checks on any agent turn, then trigger a run to see the checks pass or fail.",
            "operation": "get_run",
            "operationDescription": "WHAT — Fetch a single run by ID.\nUSE WHEN — Polling for a run's outcome, or inspecting what happened during execution after a test fails."
          },
          "cli": {
            "command": "test run get"
          }
        },
        "x-speakeasy-group": "test.run",
        "x-speakeasy-name-override": "get",
        "summary": "Get run",
        "description": "Returns a single test run by ID, with the fields that define it. A test run is one execution of a test, carrying how many of its checks passed.",
        "parameters": [
          {
            "name": "runID",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            },
            "x-vf-doc": {
              "description": "The ID of the test run to operate on."
            },
            "description": "The ID of the test run to operate on."
          },
          {
            "name": "projectID",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The ID of the project to operate on."
            }
          },
          {
            "name": "environmentAlias",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "description": "The alias of the environment to operate on (e.g. `main`)."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns one run's outcome: its `status`, how many checks it evaluated and how many passed, the credits it consumed, and the trace and tool-call events recorded as the agent worked through the conversation. `passedChecks` and `finishedAt` are null until the run finishes, and `failReason` is null unless it finished in a failed state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StableTestRunResponse"
                }
              }
            },
            "x-vf-doc": {
              "description": "Returns one run's outcome: its `status`, how many checks it evaluated and how many passed, the credits it consumed, and the trace and tool-call events recorded as the agent worked through the conversation. `passedChecks` and `finishedAt` are null until the run finishes, and `failReason` is null unless it finished in a failed state."
            }
          }
        },
        "tags": [
          "Test Run"
        ],
        "security": [
          {
            "token": []
          }
        ],
        "x-vf-doc": {
          "description": "Returns a single test run by ID, with the fields that define it. A test run is one execution of a test, carrying how many of its checks passed."
        }
      }
    }
  },
  "info": {
    "title": "Realtime",
    "description": "Realtime gateway API service",
    "version": "1.0.0",
    "contact": {}
  },
  "tags": [],
  "servers": [
    {
      "url": "https://realtime-api.voiceflow.com"
    }
  ],
  "components": {
    "securitySchemes": {
      "auth": {
        "type": "apiKey",
        "in": "header",
        "name": "authorization",
        "description": "Voiceflow API key"
      },
      "token": {
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "type": "http",
        "description": "Voiceflow bearer token"
      }
    },
    "schemas": {
      "AnyTrace": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/AudioTrace"
          },
          {
            "$ref": "#/components/schemas/SpeakTrace"
          },
          {
            "$ref": "#/components/schemas/StreamTrace"
          },
          {
            "$ref": "#/components/schemas/BlockTrace"
          },
          {
            "$ref": "#/components/schemas/CardTrace"
          },
          {
            "$ref": "#/components/schemas/CarouselTrace"
          },
          {
            "$ref": "#/components/schemas/ChannelActionTrace"
          },
          {
            "$ref": "#/components/schemas/ChoiceTrace"
          },
          {
            "$ref": "#/components/schemas/CompletionTrace"
          },
          {
            "$ref": "#/components/schemas/DebugTrace"
          },
          {
            "$ref": "#/components/schemas/DTMFTrace"
          },
          {
            "$ref": "#/components/schemas/EntityFillingTrace"
          },
          {
            "$ref": "#/components/schemas/ExitTrace"
          },
          {
            "$ref": "#/components/schemas/FlowTrace"
          },
          {
            "$ref": "#/components/schemas/GoToTrace"
          },
          {
            "$ref": "#/components/schemas/LogTrace"
          },
          {
            "$ref": "#/components/schemas/NoReplyTrace"
          },
          {
            "$ref": "#/components/schemas/PathTrace"
          },
          {
            "$ref": "#/components/schemas/TextTrace"
          },
          {
            "$ref": "#/components/schemas/ReasoningTrace"
          },
          {
            "$ref": "#/components/schemas/VisualTrace"
          },
          {
            "$ref": "#/components/schemas/KnowledgeBaseTrace"
          },
          {
            "$ref": "#/components/schemas/CallForwardTrace"
          },
          {
            "$ref": "#/components/schemas/RealtimeAgentTrace"
          },
          {
            "$ref": "#/components/schemas/LiveAgentHandoffTrace"
          },
          {
            "$ref": "#/components/schemas/ToolCallTrace"
          }
        ]
      },
      "AudioTrace": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "audio"
            ],
            "x-enumNames": [
              "AUDIO"
            ]
          },
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TracePath"
            }
          },
          "defaultPath": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "turnID": {
            "type": "string"
          },
          "handleID": {
            "type": "string"
          },
          "payload": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "state": {
                    "type": "string",
                    "enum": [
                      "start"
                    ],
                    "x-enumNames": [
                      "START"
                    ]
                  },
                  "messageID": {
                    "type": "string"
                  },
                  "delay": {
                    "type": "number"
                  }
                },
                "required": [
                  "state",
                  "messageID"
                ]
              },
              {
                "type": "object",
                "properties": {
                  "state": {
                    "type": "string",
                    "enum": [
                      "content"
                    ],
                    "x-enumNames": [
                      "CONTENT"
                    ]
                  },
                  "content": {
                    "type": "string"
                  },
                  "encoding": {
                    "$ref": "#/components/schemas/AudioEncoding"
                  },
                  "duration": {
                    "type": "number"
                  }
                },
                "required": [
                  "state",
                  "content",
                  "encoding"
                ]
              },
              {
                "type": "object",
                "properties": {
                  "state": {
                    "type": "string",
                    "enum": [
                      "end"
                    ],
                    "x-enumNames": [
                      "END"
                    ]
                  }
                },
                "required": [
                  "state"
                ]
              }
            ]
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "x-vf-doc": {
          "description": "An audio response event. The payload's `state` field selects the shape: `start` announces a `messageID`, `content` carries the audio in `content` with its `encoding`, and `end` carries the state alone."
        },
        "description": "An audio response event. The payload's `state` field selects the shape: `start` announces a `messageID`, `content` carries the audio in `content` with its `encoding`, and `end` carries the state alone."
      },
      "TracePath": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string"
          },
          "event": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BaseRequest"
              }
            ]
          }
        }
      },
      "BaseRequest": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "payload": {},
          "diagramID": {
            "type": "string"
          },
          "time": {
            "type": "number"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "type"
        ]
      },
      "AudioEncoding": {
        "type": "string",
        "enum": [
          "audio/mp3",
          "audio/x-mulaw",
          "audio/pcm"
        ],
        "x-enumNames": [
          "MP_3",
          "MULAW",
          "PCM"
        ]
      },
      "SpeakTrace": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "speak"
            ],
            "x-enumNames": [
              "SPEAK"
            ]
          },
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TracePath"
            }
          },
          "defaultPath": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "turnID": {
            "type": "string"
          },
          "handleID": {
            "type": "string"
          },
          "payload": {
            "type": "object",
            "properties": {
              "ai": {
                "type": "boolean"
              },
              "message": {
                "type": "string"
              },
              "type": {
                "$ref": "#/components/schemas/TraceSpeakType"
              },
              "src": {
                "nullable": true,
                "type": "string"
              },
              "voice": {
                "type": "string"
              },
              "isPrompt": {
                "type": "boolean"
              }
            },
            "required": [
              "message",
              "type"
            ]
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "x-vf-doc": {
          "description": "A spoken response for voice channels, carrying the message text and optionally a synthesized audio source and voice name."
        },
        "description": "A spoken response for voice channels, carrying the message text and optionally a synthesized audio source and voice name."
      },
      "TraceSpeakType": {
        "type": "string",
        "enum": [
          "audio",
          "message"
        ],
        "x-enumNames": [
          "AUDIO",
          "MESSAGE"
        ]
      },
      "StreamTrace": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "stream"
            ],
            "x-enumNames": [
              "STREAM"
            ]
          },
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TracePath"
            }
          },
          "defaultPath": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "turnID": {
            "type": "string"
          },
          "handleID": {
            "type": "string"
          },
          "payload": {
            "type": "object",
            "properties": {
              "src": {
                "type": "string"
              },
              "token": {
                "type": "string"
              },
              "action": {
                "$ref": "#/components/schemas/TraceStreamAction"
              },
              "loop": {
                "type": "boolean"
              },
              "title": {
                "type": "string"
              },
              "iconImage": {
                "type": "string"
              },
              "description": {
                "type": "string"
              },
              "backgroundImage": {
                "type": "string"
              }
            },
            "required": [
              "src",
              "token",
              "action"
            ]
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "x-vf-doc": {
          "description": "An audio stream event. The payload carries the source in `src`, a `token`, and an `action` of `LOOP`, `PLAY`, `PAUSE`, or `END`; `title`, `description`, `iconImage`, `backgroundImage`, and `loop` are optional."
        },
        "description": "An audio stream event. The payload carries the source in `src`, a `token`, and an `action` of `LOOP`, `PLAY`, `PAUSE`, or `END`; `title`, `description`, `iconImage`, `backgroundImage`, and `loop` are optional."
      },
      "TraceStreamAction": {
        "type": "string",
        "enum": [
          "LOOP",
          "PLAY",
          "PAUSE",
          "END"
        ],
        "x-enumNames": [
          "LOOP",
          "PLAY",
          "PAUSE",
          "END"
        ]
      },
      "BlockTrace": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "block"
            ],
            "x-enumNames": [
              "BLOCK"
            ]
          },
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TracePath"
            }
          },
          "defaultPath": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "turnID": {
            "type": "string"
          },
          "handleID": {
            "type": "string"
          },
          "payload": {
            "type": "object",
            "properties": {
              "blockID": {
                "type": "string"
              }
            },
            "required": [
              "blockID"
            ]
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "x-vf-doc": {
          "description": "Marks the conversation entering a block, identified by its block ID."
        },
        "description": "Marks the conversation entering a block, identified by its block ID."
      },
      "CardTrace": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "cardV2"
            ],
            "x-enumNames": [
              "CARD_V_2"
            ]
          },
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TracePath"
            }
          },
          "defaultPath": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "turnID": {
            "type": "string"
          },
          "handleID": {
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/CardTraceCard"
          }
        },
        "required": [
          "type",
          "payload"
        ]
      },
      "CardTraceCard": {
        "type": "object",
        "properties": {
          "ref": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DebugTraceRef"
              }
            ]
          },
          "title": {
            "type": "string"
          },
          "buttons": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Button"
            }
          },
          "imageUrl": {
            "nullable": true,
            "type": "string"
          },
          "messageID": {
            "type": "string"
          },
          "description": {
            "type": "object",
            "properties": {
              "text": {
                "type": "string"
              },
              "slate": {
                "type": "array",
                "items": {}
              }
            },
            "required": [
              "text"
            ]
          }
        },
        "required": [
          "title",
          "buttons",
          "imageUrl",
          "description"
        ]
      },
      "DebugTraceRef": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/DebugTraceNodeRef"
          },
          {
            "$ref": "#/components/schemas/DebugTraceAgentRef"
          },
          {
            "$ref": "#/components/schemas/DebugTracePromptRef"
          },
          {
            "$ref": "#/components/schemas/DebugTraceAPIToolRef"
          },
          {
            "$ref": "#/components/schemas/DebugTraceFunctionRef"
          },
          {
            "$ref": "#/components/schemas/DebugTraceIntegrationToolRef"
          },
          {
            "$ref": "#/components/schemas/DebugTraceMcpIntegrationToolRef"
          }
        ]
      },
      "DebugTraceNodeRef": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "node"
            ],
            "x-enumNames": [
              "NODE"
            ]
          },
          "nodeID": {
            "type": "string"
          },
          "nodeType": {
            "type": "string"
          },
          "diagramID": {
            "type": "string"
          },
          "diagramName": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "nodeID",
          "nodeType",
          "diagramID"
        ]
      },
      "DebugTraceAgentRef": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "agent"
            ],
            "x-enumNames": [
              "AGENT"
            ]
          },
          "nodeID": {
            "type": "string"
          },
          "agentID": {
            "type": "string"
          },
          "diagramID": {
            "type": "string"
          },
          "agentName": {
            "type": "string"
          },
          "diagramName": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "nodeID",
          "agentID",
          "diagramID"
        ]
      },
      "DebugTracePromptRef": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "prompt"
            ],
            "x-enumNames": [
              "PROMPT"
            ]
          },
          "nodeID": {
            "type": "string"
          },
          "promptID": {
            "type": "string"
          },
          "diagramID": {
            "type": "string"
          },
          "diagramName": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "nodeID",
          "promptID",
          "diagramID"
        ]
      },
      "DebugTraceAPIToolRef": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "api-tool"
            ],
            "x-enumNames": [
              "API_TOOL"
            ]
          },
          "nodeID": {
            "type": "string"
          },
          "diagramID": {
            "type": "string"
          },
          "apiToolID": {
            "type": "string"
          },
          "apiToolName": {
            "type": "string"
          },
          "diagramName": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "nodeID",
          "diagramID",
          "apiToolID"
        ]
      },
      "DebugTraceFunctionRef": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "function"
            ],
            "x-enumNames": [
              "FUNCTION"
            ]
          },
          "nodeID": {
            "type": "string"
          },
          "diagramID": {
            "type": "string"
          },
          "functionID": {
            "type": "string"
          },
          "functionName": {
            "type": "string"
          },
          "diagramName": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "nodeID",
          "diagramID",
          "functionID"
        ]
      },
      "DebugTraceIntegrationToolRef": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "integration-tool"
            ],
            "x-enumNames": [
              "INTEGRATION_TOOL"
            ]
          },
          "nodeID": {
            "type": "string"
          },
          "diagramID": {
            "type": "string"
          },
          "diagramName": {
            "type": "string"
          },
          "integrationToolName": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "nodeID",
          "diagramID",
          "integrationToolName"
        ]
      },
      "DebugTraceMcpIntegrationToolRef": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "mcp-integration-tool"
            ],
            "x-enumNames": [
              "MCP_INTEGRATION_TOOL"
            ]
          },
          "nodeID": {
            "type": "string"
          },
          "diagramID": {
            "type": "string"
          },
          "mcpToolName": {
            "type": "string"
          },
          "diagramName": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "nodeID",
          "diagramID",
          "mcpToolName"
        ]
      },
      "Button": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "request": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BaseRequest"
              }
            ]
          }
        },
        "required": [
          "name"
        ]
      },
      "CarouselTrace": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "carousel"
            ],
            "x-enumNames": [
              "CAROUSEL"
            ]
          },
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TracePath"
            }
          },
          "defaultPath": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "turnID": {
            "type": "string"
          },
          "handleID": {
            "type": "string"
          },
          "payload": {
            "type": "object",
            "properties": {
              "ref": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/DebugTraceRef"
                  }
                ]
              },
              "cards": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/TraceCarouselCard"
                }
              },
              "layout": {
                "$ref": "#/components/schemas/CarouselLayout"
              },
              "messageID": {
                "type": "string"
              }
            },
            "required": [
              "cards",
              "layout"
            ]
          }
        },
        "required": [
          "type",
          "payload"
        ]
      },
      "TraceCarouselCard": {
        "type": "object",
        "properties": {
          "ref": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DebugTraceRef"
              }
            ]
          },
          "title": {
            "type": "string"
          },
          "buttons": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Button"
            }
          },
          "imageUrl": {
            "nullable": true,
            "type": "string"
          },
          "messageID": {
            "type": "string"
          },
          "description": {
            "type": "object",
            "properties": {
              "text": {
                "type": "string"
              },
              "slate": {
                "type": "array",
                "items": {}
              }
            },
            "required": [
              "text"
            ]
          },
          "id": {
            "type": "string"
          }
        },
        "required": [
          "title",
          "buttons",
          "imageUrl",
          "description"
        ]
      },
      "CarouselLayout": {
        "type": "string",
        "enum": [
          "List",
          "Carousel"
        ],
        "x-enumNames": [
          "LIST",
          "CAROUSEL"
        ]
      },
      "ChannelActionTrace": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "channel-action"
            ],
            "x-enumNames": [
              "CHANNEL_ACTION"
            ]
          },
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TracePath"
            }
          },
          "defaultPath": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "turnID": {
            "type": "string"
          },
          "handleID": {
            "type": "string"
          },
          "payload": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "payload": {
                "type": "object",
                "additionalProperties": {}
              }
            },
            "required": [
              "name",
              "payload"
            ]
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "x-vf-doc": {
          "description": "A channel-specific action, named by the channel integration, with an action-defined payload."
        },
        "description": "A channel-specific action, named by the channel integration, with an action-defined payload."
      },
      "ChoiceTrace": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "choice"
            ],
            "x-enumNames": [
              "CHOICE"
            ]
          },
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TracePath"
            }
          },
          "defaultPath": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "turnID": {
            "type": "string"
          },
          "handleID": {
            "type": "string"
          },
          "payload": {
            "type": "object",
            "properties": {
              "ref": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/DebugTraceRef"
                  }
                ]
              },
              "buttons": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/Button"
                }
              },
              "messageID": {
                "type": "string"
              }
            },
            "required": [
              "buttons"
            ]
          }
        },
        "required": [
          "type",
          "payload"
        ]
      },
      "CompletionTrace": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "completion"
            ],
            "x-enumNames": [
              "COMPLETION"
            ]
          },
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TracePath"
            }
          },
          "defaultPath": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "turnID": {
            "type": "string"
          },
          "handleID": {
            "type": "string"
          },
          "payload": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "state": {
                    "type": "string",
                    "enum": [
                      "start"
                    ],
                    "x-enumNames": [
                      "START"
                    ]
                  },
                  "ai": {
                    "type": "boolean"
                  },
                  "sourceUrls": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "url": {
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "url"
                      ]
                    }
                  },
                  "delay": {
                    "type": "number"
                  },
                  "messageID": {
                    "type": "string"
                  },
                  "ref": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/DebugTraceRef"
                      }
                    ]
                  }
                },
                "required": [
                  "state",
                  "messageID"
                ]
              },
              {
                "type": "object",
                "properties": {
                  "state": {
                    "type": "string",
                    "enum": [
                      "content"
                    ],
                    "x-enumNames": [
                      "CONTENT"
                    ]
                  },
                  "content": {
                    "type": "string"
                  },
                  "messageID": {
                    "type": "string"
                  }
                },
                "required": [
                  "state",
                  "content"
                ]
              },
              {
                "type": "object",
                "properties": {
                  "state": {
                    "type": "string",
                    "enum": [
                      "end"
                    ],
                    "x-enumNames": [
                      "END"
                    ]
                  },
                  "ref": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/DebugTraceRef"
                      }
                    ]
                  },
                  "messageID": {
                    "type": "string"
                  }
                },
                "required": [
                  "state"
                ]
              }
            ]
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "x-vf-doc": {
          "description": "Marks a model completion event during the turn. Streaming clients receive the completion lifecycle described under completion event traces."
        },
        "description": "Marks a model completion event during the turn. Streaming clients receive the completion lifecycle described under completion event traces."
      },
      "DebugTrace": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "debug"
            ],
            "x-enumNames": [
              "DEBUG"
            ]
          },
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TracePath"
            }
          },
          "defaultPath": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "turnID": {
            "type": "string"
          },
          "handleID": {
            "type": "string"
          },
          "payload": {
            "type": "object",
            "properties": {
              "ref": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/DebugTraceRef"
                  }
                ]
              },
              "type": {
                "type": "string"
              },
              "level": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/DebugTraceLevel"
                  }
                ]
              },
              "message": {
                "type": "string"
              },
              "context": {
                "type": "string"
              },
              "metadata": {
                "type": "object",
                "additionalProperties": {}
              }
            },
            "required": [
              "message"
            ]
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "x-vf-doc": {
          "description": "Debug output for the turn, with a message and optional level, context, and metadata. Surfaced in agent logs rather than to end users."
        },
        "description": "Debug output for the turn, with a message and optional level, context, and metadata. Surfaced in agent logs rather than to end users."
      },
      "DebugTraceLevel": {
        "type": "string",
        "enum": [
          "fatal",
          "error",
          "warn",
          "info",
          "debug"
        ],
        "x-enumNames": [
          "FATAL",
          "ERROR",
          "WARN",
          "INFO",
          "DEBUG"
        ]
      },
      "DTMFTrace": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "dtmf"
            ],
            "x-enumNames": [
              "DTMF"
            ]
          },
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TracePath"
            }
          },
          "defaultPath": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "turnID": {
            "type": "string"
          },
          "handleID": {
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/DTMFTracePayload"
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "x-vf-doc": {
          "description": "Configures keypad (DTMF) input collection on a call: whether it is enabled, the timeout, the ending delimiter, and the digit cap."
        },
        "description": "Configures keypad (DTMF) input collection on a call: whether it is enabled, the timeout, the ending delimiter, and the digit cap."
      },
      "DTMFTracePayload": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean",
            "description": "Enables the new DTMF collection and configuration"
          },
          "timeoutInSeconds": {
            "type": "number",
            "minimum": 0,
            "maximum": 10,
            "description": "How long to wait before processing the DTMF input. Set to 0 to process only after a delimiter is provided."
          },
          "delimiter": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DTMFDelimiter"
            },
            "description": "Which key to use to end DTMF input. Defaults to '#'"
          },
          "maxDigits": {
            "type": "number",
            "minimum": 1,
            "maximum": 20,
            "description": "The maximum number of digits before we finish their input"
          }
        },
        "required": [
          "enabled",
          "timeoutInSeconds",
          "delimiter",
          "maxDigits"
        ]
      },
      "DTMFDelimiter": {
        "type": "string",
        "enum": [
          "#",
          "*"
        ],
        "x-enumNames": [
          "#",
          "*"
        ]
      },
      "EntityFillingTrace": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "entity-filling"
            ],
            "x-enumNames": [
              "ENTITY_FILLING"
            ]
          },
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TracePath"
            }
          },
          "defaultPath": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "turnID": {
            "type": "string"
          },
          "handleID": {
            "type": "string"
          },
          "payload": {
            "type": "object",
            "properties": {
              "entityToFill": {
                "type": "string"
              },
              "intent": {
                "$ref": "#/components/schemas/IntentRequest"
              }
            },
            "required": [
              "entityToFill",
              "intent"
            ]
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "x-vf-doc": {
          "description": "Requests a value for a named entity, wrapping the intent request being filled."
        },
        "description": "Requests a value for a named entity, wrapping the intent request being filled."
      },
      "IntentRequest": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "intent"
            ],
            "x-enumNames": [
              "INTENT"
            ]
          },
          "payload": {
            "$ref": "#/components/schemas/IntentRequestPayload"
          },
          "diagramID": {
            "type": "string"
          },
          "time": {
            "type": "number"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "description": "Trigger a specific intent from your conversation model."
      },
      "IntentRequestPayload": {
        "type": "object",
        "properties": {
          "actions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BaseAction"
            }
          },
          "label": {
            "type": "string"
          },
          "data": {
            "type": "object",
            "additionalProperties": {}
          },
          "query": {
            "default": "",
            "type": "string"
          },
          "intent": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              }
            },
            "required": [
              "name"
            ],
            "additionalProperties": {}
          },
          "entities": {
            "default": [],
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IntentRequestEntity"
            }
          },
          "confidence": {
            "type": "number"
          }
        },
        "required": [
          "intent"
        ]
      },
      "BaseAction": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "payload": {}
        },
        "required": [
          "type",
          "payload"
        ]
      },
      "IntentRequestEntity": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "value": {
            "type": "string"
          },
          "query": {
            "type": "string"
          },
          "verboseValue": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VerboseValue"
            }
          }
        },
        "required": [
          "name",
          "value"
        ]
      },
      "VerboseValue": {
        "type": "object",
        "properties": {
          "rawText": {
            "type": "string"
          },
          "canonicalText": {
            "type": "string"
          },
          "startIndex": {
            "type": "number"
          }
        },
        "required": [
          "rawText",
          "canonicalText",
          "startIndex"
        ]
      },
      "ExitTrace": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "end"
            ],
            "x-enumNames": [
              "END"
            ]
          },
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TracePath"
            }
          },
          "defaultPath": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "turnID": {
            "type": "string"
          },
          "handleID": {
            "type": "string"
          },
          "payload": {}
        },
        "required": [
          "type"
        ]
      },
      "FlowTrace": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "flow"
            ],
            "x-enumNames": [
              "FLOW"
            ]
          },
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TracePath"
            }
          },
          "defaultPath": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "turnID": {
            "type": "string"
          },
          "handleID": {
            "type": "string"
          },
          "payload": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "diagramID": {
                "type": "string"
              }
            },
            "required": [
              "diagramID"
            ]
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "x-vf-doc": {
          "description": "Marks the conversation entering a flow, identified by its diagram ID."
        },
        "description": "Marks the conversation entering a flow, identified by its diagram ID."
      },
      "GoToTrace": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "goto"
            ],
            "x-enumNames": [
              "GOTO"
            ]
          },
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TracePath"
            }
          },
          "defaultPath": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "turnID": {
            "type": "string"
          },
          "handleID": {
            "type": "string"
          },
          "payload": {
            "type": "object",
            "properties": {
              "request": {
                "$ref": "#/components/schemas/BaseRequest"
              }
            },
            "required": [
              "request"
            ]
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "x-vf-doc": {
          "description": "Instructs the client to re-send the wrapped request on the next turn."
        },
        "description": "Instructs the client to re-send the wrapped request on the next turn."
      },
      "LogTrace": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "log"
            ],
            "x-enumNames": [
              "LOG"
            ]
          },
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TracePath"
            }
          },
          "defaultPath": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "turnID": {
            "type": "string"
          },
          "handleID": {
            "type": "string"
          },
          "payload": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "x-vf-doc": {
          "description": "Diagnostic log output attached to the turn. The `payload` is always present and is a free-form object: the spec declares no named fields on it and permits any."
        },
        "description": "Diagnostic log output attached to the turn. The `payload` is always present and is a free-form object: the spec declares no named fields on it and permits any."
      },
      "NoReplyTrace": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "no-reply"
            ],
            "x-enumNames": [
              "NO_REPLY"
            ]
          },
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TracePath"
            }
          },
          "defaultPath": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "turnID": {
            "type": "string"
          },
          "handleID": {
            "type": "string"
          },
          "payload": {
            "type": "object",
            "properties": {
              "timeout": {
                "type": "number"
              }
            },
            "required": [
              "timeout"
            ]
          }
        },
        "required": [
          "type",
          "payload"
        ]
      },
      "PathTrace": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "path"
            ],
            "x-enumNames": [
              "PATH"
            ]
          },
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TracePath"
            }
          },
          "defaultPath": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "turnID": {
            "type": "string"
          },
          "handleID": {
            "type": "string"
          },
          "payload": {
            "type": "object",
            "properties": {
              "path": {
                "type": "string"
              }
            },
            "required": [
              "path"
            ]
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "x-vf-doc": {
          "description": "Reports which path the conversation took out of a step."
        },
        "description": "Reports which path the conversation took out of a step."
      },
      "TextTrace": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "text"
            ],
            "x-enumNames": [
              "TEXT"
            ]
          },
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TracePath"
            }
          },
          "defaultPath": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "turnID": {
            "type": "string"
          },
          "handleID": {
            "type": "string"
          },
          "payload": {
            "type": "object",
            "properties": {
              "ai": {
                "type": "boolean"
              },
              "message": {
                "type": "string"
              },
              "ref": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/DebugTraceRef"
                  }
                ]
              },
              "slate": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "content": {
                    "type": "array",
                    "items": {}
                  }
                },
                "required": [
                  "id",
                  "content"
                ]
              },
              "delay": {
                "type": "number"
              },
              "voice": {
                "type": "string"
              },
              "audio": {
                "type": "object",
                "properties": {
                  "src": {
                    "type": "string"
                  }
                },
                "required": [
                  "src"
                ]
              },
              "messageID": {
                "type": "string"
              },
              "sourceUrls": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "url": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "url"
                  ]
                }
              }
            },
            "required": [
              "message",
              "slate",
              "messageID"
            ]
          }
        },
        "required": [
          "type",
          "payload"
        ]
      },
      "ReasoningTrace": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "reasoning"
            ],
            "x-enumNames": [
              "REASONING"
            ]
          },
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TracePath"
            }
          },
          "defaultPath": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "turnID": {
            "type": "string"
          },
          "handleID": {
            "type": "string"
          },
          "payload": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "state": {
                    "type": "string",
                    "enum": [
                      "start"
                    ],
                    "x-enumNames": [
                      "START"
                    ]
                  }
                },
                "required": [
                  "state"
                ]
              },
              {
                "type": "object",
                "properties": {
                  "state": {
                    "type": "string",
                    "enum": [
                      "content"
                    ],
                    "x-enumNames": [
                      "CONTENT"
                    ]
                  },
                  "content": {
                    "type": "string"
                  }
                },
                "required": [
                  "state",
                  "content"
                ]
              },
              {
                "type": "object",
                "properties": {
                  "state": {
                    "type": "string",
                    "enum": [
                      "end"
                    ],
                    "x-enumNames": [
                      "END"
                    ]
                  }
                },
                "required": [
                  "state"
                ]
              },
              {
                "type": "object",
                "properties": {
                  "state": {
                    "type": "string",
                    "enum": [
                      "final"
                    ],
                    "x-enumNames": [
                      "FINAL"
                    ]
                  },
                  "message": {
                    "type": "string"
                  }
                },
                "required": [
                  "state",
                  "message"
                ]
              }
            ]
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "x-vf-doc": {
          "description": "Marks model reasoning activity during the turn. The payload's `state` field selects the shape: `content` carries a `content` string, `final` carries a `message`, and `start` and `end` carry the state alone."
        },
        "description": "Marks model reasoning activity during the turn. The payload's `state` field selects the shape: `content` carries a `content` string, `final` carries a `message`, and `start` and `end` carry the state alone."
      },
      "VisualTrace": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "visual"
            ],
            "x-enumNames": [
              "VISUAL"
            ]
          },
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TracePath"
            }
          },
          "defaultPath": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "turnID": {
            "type": "string"
          },
          "handleID": {
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/VisualTraceImage"
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "x-vf-doc": {
          "description": "Displays an image, with optional device sizing and layout options."
        },
        "description": "Displays an image, with optional device sizing and layout options."
      },
      "VisualTraceImage": {
        "type": "object",
        "properties": {
          "visualType": {
            "type": "string",
            "enum": [
              "image"
            ],
            "x-enumNames": [
              "IMAGE"
            ]
          },
          "image": {
            "nullable": true,
            "type": "string"
          },
          "device": {
            "nullable": true,
            "type": "string"
          },
          "options": {
            "type": "object",
            "properties": {
              "loop": {
                "type": "boolean"
              }
            }
          },
          "frameType": {
            "type": "string"
          },
          "dimensions": {
            "nullable": true,
            "type": "object",
            "properties": {
              "width": {
                "type": "number"
              },
              "height": {
                "type": "number"
              }
            },
            "required": [
              "width",
              "height"
            ]
          },
          "canvasVisibility": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CanvasVisibility"
              }
            ]
          }
        },
        "required": [
          "image"
        ]
      },
      "CanvasVisibility": {
        "type": "string",
        "enum": [
          "full",
          "hidden",
          "cropped"
        ],
        "x-enumNames": [
          "FULL",
          "HIDDEN",
          "CROPPED"
        ]
      },
      "KnowledgeBaseTrace": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "knowledgeBase"
            ],
            "x-enumNames": [
              "KNOWLEDGE_BASE"
            ]
          },
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TracePath"
            }
          },
          "defaultPath": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "turnID": {
            "type": "string"
          },
          "handleID": {
            "type": "string"
          },
          "payload": {
            "type": "object",
            "properties": {
              "chunks": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "score": {
                      "type": "number"
                    },
                    "documentID": {
                      "type": "string"
                    },
                    "documentData": {}
                  },
                  "required": [
                    "score",
                    "documentID",
                    "documentData"
                  ]
                }
              },
              "query": {
                "type": "object",
                "properties": {
                  "messages": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "role": {
                          "type": "string"
                        },
                        "content": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "role",
                        "content"
                      ]
                    }
                  },
                  "output": {
                    "nullable": true,
                    "type": "string"
                  }
                },
                "required": [
                  "messages",
                  "output"
                ]
              }
            },
            "required": [
              "chunks"
            ]
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "x-vf-doc": {
          "description": "Reports a knowledge base retrieval: the chunks returned and the query that produced them."
        },
        "description": "Reports a knowledge base retrieval: the chunks returned and the query that produced them."
      },
      "CallForwardTrace": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "call-forward"
            ],
            "x-enumNames": [
              "CALL_FORWARD"
            ]
          },
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TracePath"
            }
          },
          "defaultPath": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "turnID": {
            "type": "string"
          },
          "handleID": {
            "type": "string"
          },
          "payload": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CallForwardPhone"
              },
              {
                "$ref": "#/components/schemas/CallForwardSIP"
              }
            ]
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "x-vf-doc": {
          "description": "Signals that the call is being forwarded. The payload always carries the destination in `address` and its kind in `addressType`; a `phone` forward may also carry an `extension` and a `callerIDPassthrough` flag. See the call forward step for configuration."
        },
        "description": "Signals that the call is being forwarded. The payload always carries the destination in `address` and its kind in `addressType`; a `phone` forward may also carry an `extension` and a `callerIDPassthrough` flag. See the call forward step for configuration."
      },
      "CallForwardPhone": {
        "type": "object",
        "properties": {
          "addressType": {
            "type": "string",
            "enum": [
              "phone"
            ],
            "x-enumNames": [
              "PHONE"
            ]
          },
          "address": {
            "type": "string"
          },
          "extension": {
            "type": "string"
          },
          "callerIDPassthrough": {
            "type": "boolean"
          }
        },
        "required": [
          "addressType",
          "address"
        ]
      },
      "CallForwardSIP": {
        "type": "object",
        "properties": {
          "addressType": {
            "type": "string",
            "enum": [
              "sip"
            ],
            "x-enumNames": [
              "SIP"
            ]
          },
          "address": {
            "type": "string"
          }
        },
        "required": [
          "addressType",
          "address"
        ]
      },
      "RealtimeAgentTrace": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "realtime-agent"
            ],
            "x-enumNames": [
              "REALTIME_AGENT"
            ]
          },
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TracePath"
            }
          },
          "defaultPath": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "turnID": {
            "type": "string"
          },
          "handleID": {
            "type": "string"
          },
          "payload": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "action": {
                    "type": "string",
                    "enum": [
                      "START"
                    ],
                    "x-enumNames": [
                      "START"
                    ]
                  },
                  "input": {
                    "type": "object",
                    "properties": {
                      "encoding": {
                        "$ref": "#/components/schemas/AudioEncoding"
                      },
                      "sampleRate": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "encoding"
                    ]
                  },
                  "output": {
                    "type": "object",
                    "properties": {
                      "encoding": {
                        "$ref": "#/components/schemas/AudioEncoding"
                      },
                      "sampleRate": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "encoding"
                    ]
                  }
                },
                "required": [
                  "action",
                  "input",
                  "output"
                ]
              },
              {
                "type": "object",
                "properties": {
                  "action": {
                    "type": "string",
                    "enum": [
                      "END"
                    ],
                    "x-enumNames": [
                      "END"
                    ]
                  }
                },
                "required": [
                  "action"
                ]
              },
              {
                "type": "object",
                "properties": {
                  "action": {
                    "type": "string",
                    "enum": [
                      "INTERRUPTED"
                    ],
                    "x-enumNames": [
                      "INTERRUPTED"
                    ]
                  }
                },
                "required": [
                  "action"
                ]
              }
            ]
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "x-vf-doc": {
          "description": "Marks realtime agent activity on the turn. The payload's `action` field selects the shape: `START` carries `input` and `output`, while `END` and `INTERRUPTED` carry the action alone."
        },
        "description": "Marks realtime agent activity on the turn. The payload's `action` field selects the shape: `START` carries `input` and `output`, while `END` and `INTERRUPTED` carry the action alone."
      },
      "LiveAgentHandoffTrace": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "live-agent-handoff"
            ],
            "x-enumNames": [
              "LIVE_AGENT_HANDOFF"
            ]
          },
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TracePath"
            }
          },
          "defaultPath": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "turnID": {
            "type": "string"
          },
          "handleID": {
            "type": "string"
          },
          "payload": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "conversationID": {
                    "type": "string",
                    "minLength": 1
                  },
                  "message": {
                    "type": "string"
                  },
                  "translationKey": {
                    "type": "string"
                  },
                  "translationParams": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    }
                  },
                  "agent": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string",
                        "minLength": 1
                      },
                      "imageUrl": {
                        "type": "string",
                        "format": "uri"
                      }
                    },
                    "required": [
                      "name"
                    ]
                  },
                  "event": {
                    "type": "string",
                    "enum": [
                      "chat_started"
                    ],
                    "x-enumNames": [
                      "CHAT_STARTED"
                    ]
                  },
                  "provider": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/LiveAgentHandoffProvider"
                      }
                    ]
                  },
                  "config": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/LiveAgentHandoffWidgetConfig"
                      }
                    ]
                  }
                },
                "required": [
                  "conversationID",
                  "message",
                  "event"
                ]
              },
              {
                "type": "object",
                "properties": {
                  "conversationID": {
                    "type": "string",
                    "minLength": 1
                  },
                  "message": {
                    "type": "string"
                  },
                  "translationKey": {
                    "type": "string"
                  },
                  "translationParams": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    }
                  },
                  "agent": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string",
                        "minLength": 1
                      },
                      "imageUrl": {
                        "type": "string",
                        "format": "uri"
                      }
                    },
                    "required": [
                      "name"
                    ]
                  },
                  "event": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "chat_ended"
                        ],
                        "x-enumNames": [
                          "CHAT_ENDED"
                        ]
                      },
                      {
                        "type": "string",
                        "enum": [
                          "chat_dismissed"
                        ],
                        "x-enumNames": [
                          "CHAT_DISMISSED"
                        ]
                      }
                    ]
                  },
                  "downloadMessage": {
                    "type": "string"
                  },
                  "continueMessage": {
                    "type": "string"
                  },
                  "newConversationMessage": {
                    "type": "string"
                  }
                },
                "required": [
                  "conversationID",
                  "message",
                  "event"
                ]
              },
              {
                "type": "object",
                "properties": {
                  "conversationID": {
                    "type": "string",
                    "minLength": 1
                  },
                  "message": {
                    "type": "string"
                  },
                  "translationKey": {
                    "type": "string"
                  },
                  "translationParams": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    }
                  },
                  "agent": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string",
                        "minLength": 1
                      },
                      "imageUrl": {
                        "type": "string",
                        "format": "uri"
                      }
                    },
                    "required": [
                      "name"
                    ]
                  },
                  "event": {
                    "type": "string",
                    "enum": [
                      "file_received"
                    ],
                    "x-enumNames": [
                      "FILE_RECEIVED"
                    ]
                  },
                  "file": {
                    "type": "object",
                    "properties": {
                      "url": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      },
                      "type": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "url",
                      "name"
                    ]
                  }
                },
                "required": [
                  "conversationID",
                  "message",
                  "event",
                  "file"
                ]
              },
              {
                "type": "object",
                "properties": {
                  "conversationID": {
                    "type": "string",
                    "minLength": 1
                  },
                  "message": {
                    "type": "string"
                  },
                  "translationKey": {
                    "type": "string"
                  },
                  "translationParams": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    }
                  },
                  "agent": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string",
                        "minLength": 1
                      },
                      "imageUrl": {
                        "type": "string",
                        "format": "uri"
                      }
                    },
                    "required": [
                      "name"
                    ]
                  },
                  "event": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "participant_joined"
                        ],
                        "x-enumNames": [
                          "PARTICIPANT_JOINED"
                        ]
                      },
                      {
                        "type": "string",
                        "enum": [
                          "message_received"
                        ],
                        "x-enumNames": [
                          "MESSAGE_RECEIVED"
                        ]
                      },
                      {
                        "type": "string",
                        "enum": [
                          "event"
                        ],
                        "x-enumNames": [
                          "EVENT"
                        ]
                      },
                      {
                        "type": "string",
                        "enum": [
                          "wait_time"
                        ],
                        "x-enumNames": [
                          "WAIT_TIME"
                        ]
                      },
                      {
                        "type": "string",
                        "enum": [
                          "chat_dismissal_warning"
                        ],
                        "x-enumNames": [
                          "CHAT_DISMISSAL_WARNING"
                        ]
                      },
                      {
                        "type": "string",
                        "enum": [
                          "agent_typing"
                        ],
                        "x-enumNames": [
                          "AGENT_TYPING"
                        ]
                      }
                    ]
                  }
                },
                "required": [
                  "conversationID",
                  "message",
                  "event"
                ]
              }
            ]
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "x-vf-doc": {
          "description": "Signals a handoff of the conversation to a live agent platform. Every shape of the payload carries `conversationID`, `message`, and `event`; the remaining fields vary by shape, and some carry a `provider` naming the platform."
        },
        "description": "Signals a handoff of the conversation to a live agent platform. Every shape of the payload carries `conversationID`, `message`, and `event`; the remaining fields vary by shape, and some carry a `provider` naming the platform."
      },
      "LiveAgentHandoffProvider": {
        "type": "string",
        "enum": [
          "ujet",
          "genesys",
          "kustomer",
          "dixa",
          "sunshine"
        ],
        "x-enumNames": [
          "UJET",
          "GENESYS",
          "KUSTOMER",
          "DIXA",
          "SUNSHINE"
        ]
      },
      "LiveAgentHandoffWidgetConfig": {
        "type": "object",
        "properties": {
          "returnToAI": {
            "type": "boolean"
          },
          "disableFileUpload": {
            "type": "boolean"
          }
        }
      },
      "ToolCallTrace": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "tool-call"
            ],
            "x-enumNames": [
              "TOOL_CALL"
            ]
          },
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TracePath"
            }
          },
          "defaultPath": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "turnID": {
            "type": "string"
          },
          "handleID": {
            "type": "string"
          },
          "payload": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "callID": {
                    "type": "string"
                  },
                  "sound": {
                    "type": "object",
                    "properties": {
                      "ref": {
                        "type": "string"
                      },
                      "volume": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1
                      }
                    },
                    "required": [
                      "ref"
                    ]
                  },
                  "state": {
                    "type": "string",
                    "enum": [
                      "start"
                    ],
                    "x-enumNames": [
                      "START"
                    ]
                  }
                },
                "required": [
                  "callID",
                  "state"
                ]
              },
              {
                "type": "object",
                "properties": {
                  "state": {
                    "type": "string",
                    "enum": [
                      "end"
                    ],
                    "x-enumNames": [
                      "END"
                    ]
                  },
                  "callID": {
                    "type": "string"
                  }
                },
                "required": [
                  "state",
                  "callID"
                ]
              }
            ]
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "x-vf-doc": {
          "description": "Marks a tool call made by the agent during the turn. The payload always carries the `callID` and a `state` of `start` or `end`; a `start` may also carry a `sound`."
        },
        "description": "Marks a tool call made by the agent during the turn. The payload always carries the `callID` and a `state` of `start` or `end`; a `start` may also carry a `sound`."
      },
      "StableConversationSendResponse": {
        "type": "object",
        "properties": {
          "traces": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AnyTrace"
            }
          }
        },
        "required": [
          "traces"
        ]
      },
      "AnyRequest": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/LaunchRequest"
          },
          {
            "$ref": "#/components/schemas/TextRequest"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "file"
                ],
                "x-enumNames": [
                  "FILE"
                ]
              },
              "payload": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string"
                  },
                  "files": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "mimeType": {
                          "type": "string"
                        },
                        "filename": {
                          "type": "string"
                        },
                        "size": {
                          "type": "number"
                        },
                        "s3Key": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "mimeType"
                      ],
                      "additionalProperties": {}
                    }
                  }
                },
                "required": [
                  "files"
                ],
                "additionalProperties": {}
              },
              "diagramID": {
                "type": "string"
              },
              "time": {
                "type": "number"
              },
              "metadata": {
                "type": "object",
                "additionalProperties": {}
              }
            },
            "required": [
              "type",
              "payload"
            ],
            "additionalProperties": {},
            "description": "Send one or more file attachments, with an optional text message."
          },
          {
            "$ref": "#/components/schemas/ActionRequest"
          },
          {
            "$ref": "#/components/schemas/IntentRequest"
          },
          {
            "$ref": "#/components/schemas/EventRequest"
          },
          {
            "$ref": "#/components/schemas/PathRequest"
          },
          {
            "$ref": "#/components/schemas/NoReplyRequest"
          },
          {
            "$ref": "#/components/schemas/MessageRequest"
          },
          {
            "$ref": "#/components/schemas/EndRequest"
          },
          {
            "$ref": "#/components/schemas/DTMFRequest"
          },
          {
            "$ref": "#/components/schemas/LiveAgentHandoffRequest"
          },
          {
            "$ref": "#/components/schemas/GeneralRequest"
          },
          {
            "$ref": "#/components/schemas/AlexaIntentRequest"
          },
          {
            "$ref": "#/components/schemas/LegacyIntentRequest"
          }
        ]
      },
      "LaunchRequest": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "launch"
            ],
            "x-enumNames": [
              "LAUNCH"
            ]
          },
          "payload": {
            "type": "object",
            "properties": {
              "persona": {
                "type": "string"
              }
            },
            "additionalProperties": {}
          },
          "diagramID": {
            "type": "string"
          },
          "time": {
            "type": "number"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "type"
        ],
        "additionalProperties": {},
        "description": "Send a launch request to start a new conversation."
      },
      "TextRequest": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "text"
            ],
            "x-enumNames": [
              "TEXT"
            ]
          },
          "payload": {
            "type": "string"
          },
          "diagramID": {
            "type": "string"
          },
          "time": {
            "type": "number"
          },
          "metadata": {
            "type": "object",
            "properties": {
              "source": {
                "type": "string"
              }
            }
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "additionalProperties": {},
        "description": "Send the user response as a raw text payload."
      },
      "ActionRequest": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "action"
            ],
            "x-enumNames": [
              "ACTION"
            ]
          },
          "payload": {
            "type": "object",
            "properties": {
              "actions": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/BaseAction"
                }
              },
              "label": {
                "type": "string"
              }
            },
            "additionalProperties": {}
          },
          "diagramID": {
            "type": "string"
          },
          "time": {
            "type": "number"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "type"
        ],
        "additionalProperties": {},
        "description": "Actions are self-describing operations with an associated payload."
      },
      "EventRequest": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "event"
            ],
            "x-enumNames": [
              "EVENT"
            ]
          },
          "payload": {
            "$ref": "#/components/schemas/EventRequestPayload"
          },
          "diagramID": {
            "type": "string"
          },
          "time": {
            "type": "number"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "description": "Events are triggers with an associated payload."
      },
      "EventRequestPayload": {
        "type": "object",
        "properties": {
          "actions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BaseAction"
            }
          },
          "label": {
            "type": "string"
          },
          "event": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              }
            },
            "required": [
              "name"
            ],
            "additionalProperties": {}
          }
        },
        "required": [
          "event"
        ]
      },
      "PathRequest": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "payload": {
            "type": "object",
            "properties": {
              "actions": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/BaseAction"
                }
              },
              "label": {
                "type": "string"
              }
            },
            "required": [
              "label"
            ],
            "additionalProperties": {}
          },
          "diagramID": {
            "type": "string"
          },
          "time": {
            "type": "number"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "additionalProperties": {},
        "description": "Continue the conversation by traveling down the specified path."
      },
      "NoReplyRequest": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "no-reply"
            ],
            "x-enumNames": [
              "NO_REPLY"
            ]
          },
          "diagramID": {
            "type": "string"
          },
          "time": {
            "type": "number"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "type"
        ],
        "additionalProperties": {},
        "description": "Represents the user failing to reply, typically sent after a reasonable timeout."
      },
      "MessageRequest": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "message"
            ],
            "x-enumNames": [
              "MESSAGE"
            ]
          },
          "payload": {
            "type": "object",
            "properties": {
              "message": {
                "type": "string"
              }
            },
            "required": [
              "message"
            ],
            "additionalProperties": {}
          },
          "diagramID": {
            "type": "string"
          },
          "time": {
            "type": "number"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "additionalProperties": {},
        "description": "Similar to the `text` action."
      },
      "EndRequest": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "end"
            ],
            "x-enumNames": [
              "END"
            ]
          },
          "payload": {
            "type": "object",
            "properties": {
              "reason": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            },
            "required": [
              "reason"
            ],
            "additionalProperties": {}
          },
          "diagramID": {
            "type": "string"
          },
          "time": {
            "type": "number"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "type"
        ],
        "additionalProperties": {},
        "description": "Sent to indicate the conversation has been ended."
      },
      "DTMFRequest": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "dtmf"
            ],
            "x-enumNames": [
              "DTMF"
            ]
          },
          "payload": {
            "type": "string"
          },
          "diagramID": {
            "type": "string"
          },
          "time": {
            "type": "number"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "additionalProperties": {},
        "description": "Represents the result of a dial-tone input, used for phone calls."
      },
      "LiveAgentHandoffRequest": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "live-agent-handoff"
            ],
            "x-enumNames": [
              "LIVE_AGENT_HANDOFF"
            ]
          },
          "payload": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/LiveAgentHandoffMessagePayload"
              },
              {
                "$ref": "#/components/schemas/LiveAgentHandoffFileUploadPayload"
              },
              {
                "$ref": "#/components/schemas/LiveAgentHandoffContinueConversationPayload"
              },
              {
                "$ref": "#/components/schemas/LiveAgentHandoffReturnToVoiceflowPayload"
              }
            ]
          },
          "diagramID": {
            "type": "string"
          },
          "time": {
            "type": "number"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "additionalProperties": {},
        "description": "Sent to interact with a connected live agent."
      },
      "LiveAgentHandoffMessagePayload": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "message"
            ],
            "x-enumNames": [
              "MESSAGE"
            ]
          },
          "message": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "message"
        ]
      },
      "LiveAgentHandoffFileUploadPayload": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "file_upload"
            ],
            "x-enumNames": [
              "FILE_UPLOAD"
            ]
          },
          "files": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "minLength": 1
                },
                "name": {
                  "type": "string"
                },
                "size": {
                  "type": "number"
                },
                "type": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "uploaded",
                    "failed"
                  ],
                  "x-enumNames": [
                    "UPLOADED",
                    "FAILED"
                  ]
                },
                "metadata": {
                  "type": "object",
                  "additionalProperties": {}
                }
              },
              "required": [
                "id",
                "name",
                "size",
                "type"
              ]
            }
          }
        },
        "required": [
          "type",
          "files"
        ]
      },
      "LiveAgentHandoffContinueConversationPayload": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "continue_conversation"
            ],
            "x-enumNames": [
              "CONTINUE_CONVERSATION"
            ]
          }
        },
        "required": [
          "type"
        ]
      },
      "LiveAgentHandoffReturnToVoiceflowPayload": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "return_to_voiceflow"
            ],
            "x-enumNames": [
              "RETURN_TO_VOICEFLOW"
            ]
          }
        },
        "required": [
          "type"
        ]
      },
      "GeneralRequest": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "payload": {
            "type": "object",
            "properties": {
              "actions": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/BaseAction"
                }
              },
              "label": {
                "type": "string"
              }
            },
            "additionalProperties": {}
          },
          "diagramID": {
            "type": "string"
          },
          "time": {
            "type": "number"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "type"
        ],
        "additionalProperties": {},
        "description": "Represents an non-system-defined action."
      },
      "AlexaIntentRequest": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "intent"
            ],
            "x-enumNames": [
              "INTENT"
            ]
          },
          "payload": {
            "type": "object",
            "properties": {
              "actions": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/BaseAction"
                }
              },
              "label": {
                "type": "string"
              },
              "data": {
                "type": "object",
                "additionalProperties": {}
              },
              "query": {
                "default": "",
                "type": "string"
              },
              "intent": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  }
                },
                "required": [
                  "name"
                ],
                "additionalProperties": {}
              },
              "entities": {
                "default": [],
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/IntentRequestEntity"
                }
              },
              "confidence": {
                "type": "number"
              }
            },
            "required": [
              "data",
              "intent",
              "entities"
            ]
          },
          "diagramID": {
            "type": "string"
          },
          "time": {
            "type": "number"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "additionalProperties": {},
        "description": "Legacy intent request type that `general-runtime` expects Alexa to send"
      },
      "LegacyIntentRequest": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "intent"
            ],
            "x-enumNames": [
              "INTENT"
            ]
          },
          "payload": {
            "type": "object",
            "properties": {
              "actions": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/BaseAction"
                }
              },
              "label": {
                "type": "string"
              },
              "query": {
                "default": "",
                "type": "string"
              },
              "intent": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  }
                },
                "required": [
                  "name"
                ],
                "additionalProperties": {}
              },
              "entities": {
                "default": [],
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/IntentRequestEntity"
                }
              },
              "confidence": {
                "type": "number"
              }
            },
            "required": [
              "intent",
              "entities"
            ]
          },
          "diagramID": {
            "type": "string"
          },
          "time": {
            "type": "number"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "type",
          "payload"
        ],
        "additionalProperties": {},
        "description": "The legacy intent request type that `general-runtime` expects from its clients."
      },
      "StableConversationSendConfig": {
        "type": "object",
        "properties": {
          "excludeTypes": {
            "description": "Trace types to drop from the response. Opt-in — when omitted, every trace is returned.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TraceType"
            }
          }
        }
      },
      "TraceType": {
        "type": "string",
        "enum": [
          "log",
          "end",
          "text",
          "path",
          "flow",
          "goto",
          "speak",
          "block",
          "debug",
          "choice",
          "stream",
          "visual",
          "cardV2",
          "carousel",
          "no-reply",
          "reasoning",
          "completion",
          "audio",
          "call-forward",
          "live-agent-handoff",
          "entity-filling",
          "channel-action",
          "knowledgeBase",
          "realtime-agent",
          "dtmf",
          "tool-call",
          "simulation-test-result"
        ],
        "x-enumNames": [
          "LOG",
          "END",
          "TEXT",
          "PATH",
          "FLOW",
          "GOTO",
          "SPEAK",
          "BLOCK",
          "DEBUG",
          "CHOICE",
          "STREAM",
          "VISUAL",
          "CARD_V_2",
          "CAROUSEL",
          "NO_REPLY",
          "REASONING",
          "COMPLETION",
          "AUDIO",
          "CALL_FORWARD",
          "LIVE_AGENT_HANDOFF",
          "ENTITY_FILLING",
          "CHANNEL_ACTION",
          "KNOWLEDGE_BASE",
          "REALTIME_AGENT",
          "DTMF",
          "TOOL_CALL",
          "SIMULATION_TEST_RESULT"
        ]
      },
      "StableConversationSendRequest": {
        "type": "object",
        "properties": {
          "action": {
            "$ref": "#/components/schemas/AnyRequest"
          },
          "version": {
            "type": "string",
            "enum": [
              "draft",
              "published"
            ],
            "description": "Whether to run the conversation against the draft or published version of the environment.",
            "x-enumNames": [
              "DRAFT",
              "PUBLISHED"
            ]
          },
          "sessionID": {
            "description": "The unique ID of the conversation session to continue.",
            "type": "string"
          },
          "config": {
            "description": "Options controlling how the response is shaped.",
            "allOf": [
              {
                "$ref": "#/components/schemas/StableConversationSendConfig"
              }
            ]
          }
        },
        "required": [
          "action",
          "version"
        ]
      },
      "AgentAPITool": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "apiToolID": {
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "inputVariables": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/ToolNodeDataAPIInputVariable"
            }
          },
          "captureResponse": {
            "default": null,
            "nullable": true,
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/ToolNodeDataAPICaptureResponse"
            }
          },
          "toolSound": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ToolNodeDataToolSound"
              }
            ]
          },
          "agentID": {
            "type": "string"
          },
          "messages": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentToolMessages"
              }
            ]
          },
          "asyncExecution": {
            "default": false,
            "type": "boolean"
          },
          "captureInputVariables": {
            "default": null,
            "nullable": true,
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/AgentToolCaptureInputVariable"
            }
          }
        },
        "required": [
          "id",
          "createdAt",
          "apiToolID",
          "description",
          "inputVariables",
          "agentID"
        ]
      },
      "ToolNodeDataAPIInputVariable": {
        "type": "object",
        "properties": {
          "description": {
            "default": null,
            "nullable": true,
            "type": "string"
          },
          "defaultValue": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/Markup"
              }
            ]
          },
          "shouldFulfill": {
            "description": "If true, then LLM will never ask user to fulfill an input variable. If false, then LLM will decide for itself whether user needs to provide a value for the input variable.",
            "type": "boolean"
          },
          "apiToolInputVariableID": {
            "type": "string"
          },
          "captureType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ToolNodeCaptureType"
              }
            ]
          }
        },
        "required": [
          "apiToolInputVariableID"
        ]
      },
      "Markup": {
        "type": "array",
        "items": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/components/schemas/MarkupSpan"
            },
            {
              "$ref": "#/components/schemas/MarkupToolReference"
            },
            {
              "$ref": "#/components/schemas/MarkupSecretReference"
            },
            {
              "$ref": "#/components/schemas/MarkupEntityReference"
            },
            {
              "$ref": "#/components/schemas/MarkupVariableReference"
            }
          ]
        }
      },
      "MarkupSpan": {
        "type": "object",
        "properties": {
          "text": {
            "$ref": "#/components/schemas/Markup"
          },
          "attributes": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "text"
        ]
      },
      "MarkupToolReference": {
        "type": "object",
        "properties": {
          "resourceID": {
            "type": "string"
          },
          "referenceType": {
            "$ref": "#/components/schemas/MarkupToolReferenceType"
          }
        },
        "required": [
          "resourceID",
          "referenceType"
        ]
      },
      "MarkupToolReferenceType": {
        "type": "string",
        "enum": [
          "function",
          "api-call",
          "integration",
          "mcp-integration",
          "flow",
          "agent",
          "path-tool",
          "system-tool"
        ],
        "x-enumNames": [
          "FUNCTION",
          "API_CALL",
          "INTEGRATION",
          "MCP_INTEGRATION",
          "FLOW",
          "AGENT",
          "PATH_TOOL",
          "SYSTEM_TOOL"
        ]
      },
      "MarkupSecretReference": {
        "type": "object",
        "properties": {
          "secretID": {
            "type": "string"
          }
        },
        "required": [
          "secretID"
        ]
      },
      "MarkupEntityReference": {
        "type": "object",
        "properties": {
          "entityID": {
            "type": "string"
          }
        },
        "required": [
          "entityID"
        ]
      },
      "MarkupVariableReference": {
        "type": "object",
        "properties": {
          "variableID": {
            "type": "string"
          },
          "path": {
            "type": "string"
          }
        },
        "required": [
          "variableID"
        ]
      },
      "ToolNodeCaptureType": {
        "type": "string",
        "enum": [
          "variable",
          "property"
        ],
        "x-enumNames": [
          "VARIABLE",
          "PROPERTY"
        ]
      },
      "ToolNodeDataAPICaptureResponse": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string"
          },
          "variableOrEntityID": {
            "nullable": true,
            "type": "string"
          },
          "captureType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ToolNodeCaptureType"
              }
            ]
          }
        },
        "required": [
          "path",
          "variableOrEntityID"
        ]
      },
      "ToolNodeDataToolSound": {
        "type": "object",
        "properties": {
          "ref": {
            "nullable": true,
            "type": "string"
          },
          "volume": {
            "default": 0.75,
            "type": "number",
            "minimum": 0,
            "maximum": 1
          }
        },
        "required": [
          "ref"
        ]
      },
      "AgentToolMessages": {
        "type": "object",
        "properties": {
          "generative": {
            "type": "object",
            "properties": {
              "delay": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ToolMessageGenerative"
                  }
                ]
              },
              "failure": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ToolMessageGenerative"
                  }
                ]
              },
              "execution": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ToolMessageGenerative"
                  }
                ]
              },
              "completion": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ToolMessageGenerative"
                  }
                ]
              }
            }
          },
          "delayMessageID": {
            "nullable": true,
            "type": "string"
          },
          "failureMessageID": {
            "nullable": true,
            "type": "string"
          },
          "executionMessageID": {
            "nullable": true,
            "type": "string"
          },
          "completionMessageID": {
            "nullable": true,
            "type": "string"
          },
          "delayMessageSeconds": {
            "nullable": true,
            "type": "number"
          }
        },
        "required": [
          "delayMessageID",
          "failureMessageID",
          "executionMessageID",
          "completionMessageID",
          "delayMessageSeconds"
        ]
      },
      "ToolMessageGenerative": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "examples": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Markup"
            }
          }
        },
        "required": [
          "enabled"
        ]
      },
      "AgentToolCaptureInputVariable": {
        "type": "object",
        "properties": {
          "variableOrEntityID": {
            "nullable": true,
            "type": "string"
          },
          "captureType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ToolNodeCaptureType"
              }
            ]
          }
        },
        "required": [
          "variableOrEntityID"
        ]
      },
      "APIToolInputVariable": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "maxLength": 255
          },
          "apiToolID": {
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "id",
          "createdAt",
          "name",
          "apiToolID",
          "description"
        ]
      },
      "APITool": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "maxLength": 255
          },
          "folderID": {
            "nullable": true,
            "type": "string"
          },
          "createdByID": {
            "type": "number"
          },
          "url": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/Markup"
              }
            ]
          },
          "body": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/APIToolBody"
              }
            ]
          },
          "image": {
            "nullable": true,
            "type": "string"
          },
          "headers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/APIToolKeyValue"
            }
          },
          "httpMethod": {
            "$ref": "#/components/schemas/APIToolHTTPMethodType"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "queryParameters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/APIToolKeyValue"
            }
          },
          "settings": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/APIToolSettings"
              }
            ]
          }
        },
        "required": [
          "id",
          "createdAt",
          "updatedAt",
          "updatedByID",
          "name",
          "folderID",
          "createdByID",
          "url",
          "body",
          "image",
          "headers",
          "httpMethod",
          "description",
          "queryParameters"
        ]
      },
      "APIToolBody": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/APIToolRawBody"
          },
          {
            "$ref": "#/components/schemas/APIToolFormDataBody"
          },
          {
            "$ref": "#/components/schemas/APIToolURLEncodedBody"
          }
        ]
      },
      "APIToolRawBody": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "raw-input"
            ],
            "x-enumNames": [
              "RAW_INPUT"
            ]
          },
          "contentType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/APIToolContentType"
              }
            ]
          },
          "content": {
            "$ref": "#/components/schemas/CodeText"
          }
        },
        "required": [
          "type",
          "content"
        ]
      },
      "APIToolContentType": {
        "type": "string",
        "enum": [
          "text",
          "json",
          "xml"
        ],
        "x-enumNames": [
          "TEXT",
          "JSON",
          "XML"
        ]
      },
      "CodeText": {
        "type": "array",
        "items": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/components/schemas/MarkupVariableReference"
            },
            {
              "$ref": "#/components/schemas/MarkupEntityReference"
            }
          ]
        }
      },
      "APIToolFormDataBody": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "form-data"
            ],
            "x-enumNames": [
              "FORM_DATA"
            ]
          },
          "formData": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/APIToolKeyValue"
            }
          }
        },
        "required": [
          "type",
          "formData"
        ]
      },
      "APIToolKeyValue": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "key": {
            "nullable": true,
            "type": "string"
          },
          "value": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/Markup"
              }
            ]
          }
        },
        "required": [
          "id",
          "key",
          "value"
        ]
      },
      "APIToolURLEncodedBody": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "url-encoded"
            ],
            "x-enumNames": [
              "URL_ENCODED"
            ]
          },
          "params": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/APIToolKeyValue"
            }
          }
        },
        "required": [
          "type",
          "params"
        ]
      },
      "APIToolHTTPMethodType": {
        "type": "string",
        "enum": [
          "get",
          "put",
          "post",
          "patch",
          "delete"
        ],
        "x-enumNames": [
          "GET",
          "PUT",
          "POST",
          "PATCH",
          "DELETE"
        ]
      },
      "APIToolSettings": {
        "type": "object",
        "properties": {
          "timeoutMs": {
            "type": "integer",
            "minimum": 0,
            "exclusiveMinimum": true,
            "maximum": 600000
          }
        }
      },
      "Variable": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "folderID": {
            "nullable": true,
            "type": "string"
          },
          "createdByID": {
            "type": "number"
          },
          "color": {
            "type": "string"
          },
          "isArray": {
            "type": "boolean"
          },
          "isSystem": {
            "type": "boolean"
          },
          "datatype": {
            "$ref": "#/components/schemas/VariableDatatype"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "defaultValue": {
            "nullable": true,
            "type": "string"
          },
          "resetAfter": {
            "default": "never",
            "type": "string",
            "enum": [
              "never",
              "session"
            ],
            "x-enumNames": [
              "NEVER",
              "EACH_SESSION"
            ]
          }
        },
        "required": [
          "id",
          "createdAt",
          "updatedAt",
          "updatedByID",
          "name",
          "folderID",
          "createdByID",
          "color",
          "isArray",
          "isSystem",
          "datatype",
          "description",
          "defaultValue"
        ]
      },
      "VariableDatatype": {
        "type": "string",
        "enum": [
          "any",
          "text",
          "date",
          "image",
          "number",
          "boolean",
          "string"
        ],
        "x-enumNames": [
          "ANY",
          "TEXT",
          "DATE",
          "IMAGE",
          "NUMBER",
          "BOOLEAN",
          "STRING"
        ]
      },
      "Response": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "folderID": {
            "nullable": true,
            "type": "string"
          },
          "createdByID": {
            "type": "number"
          },
          "name": {
            "type": "string",
            "maxLength": 255
          },
          "type": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ResponseType"
              }
            ]
          },
          "draft": {
            "default": null,
            "nullable": true,
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "createdAt",
          "updatedAt",
          "updatedByID",
          "folderID",
          "createdByID",
          "name"
        ]
      },
      "ResponseType": {
        "type": "string",
        "enum": [
          "prompt",
          "message"
        ],
        "x-enumNames": [
          "PROMPT",
          "MESSAGE"
        ]
      },
      "ResponseMessage": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "text": {
            "$ref": "#/components/schemas/Markup"
          },
          "delay": {
            "nullable": true,
            "type": "number"
          },
          "condition": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AnyCondition"
              }
            ]
          },
          "discriminatorID": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "createdAt",
          "text",
          "delay",
          "condition",
          "discriminatorID"
        ]
      },
      "AnyCondition": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/ScriptCondition"
          },
          {
            "$ref": "#/components/schemas/PromptCondition"
          },
          {
            "$ref": "#/components/schemas/ExpressionCondition"
          }
        ]
      },
      "ScriptCondition": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "script"
            ],
            "x-enumNames": [
              "SCRIPT"
            ]
          },
          "code": {
            "$ref": "#/components/schemas/CodeText"
          }
        },
        "required": [
          "type",
          "code"
        ]
      },
      "PromptCondition": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "prompt"
            ],
            "x-enumNames": [
              "PROMPT"
            ]
          },
          "matchAll": {
            "type": "boolean"
          },
          "promptID": {
            "type": "string"
          },
          "assertions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ConditionPromptAssertion"
            }
          }
        },
        "required": [
          "type",
          "matchAll",
          "assertions"
        ]
      },
      "ConditionPromptAssertion": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string"
          },
          "lhs": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PromptConditionAssertionLhs"
              }
            ]
          },
          "rhs": {
            "$ref": "#/components/schemas/Markup"
          },
          "operation": {
            "default": "is",
            "allOf": [
              {
                "$ref": "#/components/schemas/ConditionOperation"
              }
            ]
          }
        },
        "required": [
          "key",
          "rhs"
        ]
      },
      "PromptConditionAssertionLhs": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string"
          }
        }
      },
      "ConditionOperation": {
        "type": "string",
        "enum": [
          "is",
          "is_not",
          "greater_than",
          "greater_or_equal",
          "less_than",
          "less_or_equal",
          "contains",
          "not_contains",
          "starts_with",
          "ends_with",
          "is_empty",
          "is_not_empty"
        ],
        "x-enumNames": [
          "IS",
          "IS_NOT",
          "GREATER_THAN",
          "GREATER_OR_EQUAL",
          "LESS_THAN",
          "LESS_OR_EQUAL",
          "CONTAINS",
          "NOT_CONTAINS",
          "STARTS_WITH",
          "ENDS_WITH",
          "IS_EMPTY",
          "IS_NOT_EMPTY"
        ]
      },
      "ExpressionCondition": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "value-variable"
            ],
            "x-enumNames": [
              "VALUE_VARIABLE"
            ]
          },
          "matchAll": {
            "type": "boolean"
          },
          "assertions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ConditionAssertion"
            }
          }
        },
        "required": [
          "type",
          "matchAll",
          "assertions"
        ]
      },
      "ConditionAssertion": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string"
          },
          "lhs": {
            "$ref": "#/components/schemas/ConditionAssertionLhs"
          },
          "rhs": {
            "$ref": "#/components/schemas/Markup"
          },
          "operation": {
            "default": "is",
            "allOf": [
              {
                "$ref": "#/components/schemas/ConditionOperation"
              }
            ]
          }
        },
        "required": [
          "key",
          "lhs",
          "rhs"
        ]
      },
      "ConditionAssertionLhs": {
        "type": "object",
        "properties": {
          "variableID": {
            "nullable": true,
            "type": "string"
          },
          "path": {
            "type": "string"
          }
        },
        "required": [
          "variableID"
        ]
      },
      "ResponseDiscriminator": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "channel": {
            "$ref": "#/components/schemas/Channel"
          },
          "language": {
            "$ref": "#/components/schemas/Language"
          },
          "responseID": {
            "type": "string"
          },
          "variantOrder": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "id",
          "createdAt",
          "channel",
          "language",
          "responseID",
          "variantOrder"
        ]
      },
      "Channel": {
        "type": "string",
        "enum": [
          "default"
        ],
        "x-enumNames": [
          "DEFAULT"
        ]
      },
      "Language": {
        "type": "string",
        "enum": [
          "en-us"
        ],
        "x-enumNames": [
          "ENGLISH_US"
        ]
      },
      "Entity": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "folderID": {
            "nullable": true,
            "type": "string"
          },
          "createdByID": {
            "type": "number"
          },
          "color": {
            "type": "string"
          },
          "isArray": {
            "type": "boolean"
          },
          "classifier": {
            "nullable": true,
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "id",
          "createdAt",
          "updatedAt",
          "updatedByID",
          "name",
          "folderID",
          "createdByID",
          "color",
          "isArray",
          "classifier",
          "description"
        ]
      },
      "EntityVariant": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "value": {
            "type": "string"
          },
          "language": {
            "$ref": "#/components/schemas/Language"
          },
          "synonyms": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "entityID": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "createdAt",
          "value",
          "language",
          "synonyms",
          "entityID"
        ]
      },
      "AgentFunctionTool": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "functionID": {
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "inputVariables": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/ToolNodeDataFunctionInputVariable"
            }
          },
          "captureResponse": {
            "default": null,
            "nullable": true,
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/ToolNodeDataFunctionCaptureResponse"
            }
          },
          "toolSound": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ToolNodeDataToolSound"
              }
            ]
          },
          "agentID": {
            "type": "string"
          },
          "messages": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentToolMessages"
              }
            ]
          },
          "asyncExecution": {
            "default": false,
            "type": "boolean"
          },
          "captureInputVariables": {
            "default": null,
            "nullable": true,
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/AgentToolCaptureInputVariable"
            }
          }
        },
        "required": [
          "id",
          "createdAt",
          "functionID",
          "description",
          "inputVariables",
          "agentID"
        ]
      },
      "ToolNodeDataFunctionInputVariable": {
        "type": "object",
        "properties": {
          "description": {
            "default": null,
            "nullable": true,
            "type": "string"
          },
          "defaultValue": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/Markup"
              }
            ]
          },
          "shouldFulfill": {
            "description": "If true, then LLM will never ask user to fulfill an input variable. If false, then LLM will decide for itself whether user needs to provide a value for the input variable.",
            "type": "boolean"
          },
          "functionInputVariableID": {
            "type": "string"
          },
          "captureType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ToolNodeCaptureType"
              }
            ]
          }
        },
        "required": [
          "functionInputVariableID"
        ]
      },
      "ToolNodeDataFunctionCaptureResponse": {
        "type": "object",
        "properties": {
          "variableOrEntityID": {
            "nullable": true,
            "type": "string"
          },
          "functionOutputVariableID": {
            "type": "string"
          },
          "captureType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ToolNodeCaptureType"
              }
            ]
          }
        },
        "required": [
          "variableOrEntityID",
          "functionOutputVariableID"
        ]
      },
      "FunctionPath": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "maxLength": 255
          },
          "label": {
            "nullable": true,
            "type": "string"
          },
          "functionID": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "createdAt",
          "name",
          "label",
          "functionID"
        ]
      },
      "Function": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "maxLength": 255
          },
          "folderID": {
            "nullable": true,
            "type": "string"
          },
          "createdByID": {
            "type": "number"
          },
          "code": {
            "type": "string"
          },
          "image": {
            "nullable": true,
            "type": "string"
          },
          "pathOrder": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "settings": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/FunctionSettings"
              }
            ]
          }
        },
        "required": [
          "id",
          "createdAt",
          "updatedAt",
          "updatedByID",
          "name",
          "folderID",
          "createdByID",
          "code",
          "image",
          "pathOrder",
          "description"
        ]
      },
      "FunctionSettings": {
        "type": "object",
        "properties": {
          "timeoutMs": {
            "type": "integer",
            "minimum": 0,
            "exclusiveMinimum": true,
            "maximum": 600000
          }
        }
      },
      "FunctionVariable": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "maxLength": 255
          },
          "type": {
            "$ref": "#/components/schemas/FunctionVariableKind"
          },
          "functionID": {
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "id",
          "createdAt",
          "name",
          "type",
          "functionID",
          "description"
        ]
      },
      "FunctionVariableKind": {
        "type": "string",
        "enum": [
          "input",
          "output"
        ],
        "x-enumNames": [
          "INPUT",
          "OUTPUT"
        ]
      },
      "AgentIntegrationTool": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "inputVariables": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/ToolNodeDataIntegrationInputVariable"
            }
          },
          "captureResponse": {
            "default": null,
            "nullable": true,
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/ToolNodeDataIntegrationCaptureResponse"
            }
          },
          "integrationToolID": {
            "type": "string"
          },
          "toolSound": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ToolNodeDataToolSound"
              }
            ]
          },
          "agentID": {
            "type": "string"
          },
          "messages": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentToolMessages"
              }
            ]
          },
          "captureInputVariables": {
            "default": null,
            "nullable": true,
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/AgentToolCaptureInputVariable"
            }
          },
          "extendedInputVariables": {
            "nullable": true,
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/ToolExtendedInputVariable"
            }
          },
          "extendedInputSchema": {
            "nullable": true,
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "id",
          "createdAt",
          "description",
          "inputVariables",
          "integrationToolID",
          "agentID"
        ]
      },
      "ToolNodeDataIntegrationInputVariable": {
        "type": "object",
        "properties": {
          "description": {
            "default": null,
            "nullable": true,
            "type": "string"
          },
          "defaultValue": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/Markup"
              }
            ]
          },
          "shouldFulfill": {
            "description": "If true, then LLM will never ask user to fulfill an input variable. If false, then LLM will decide for itself whether user needs to provide a value for the input variable.",
            "type": "boolean"
          },
          "integrationToolVariableName": {
            "type": "string"
          },
          "captureType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ToolNodeCaptureType"
              }
            ]
          }
        },
        "required": [
          "integrationToolVariableName"
        ]
      },
      "ToolNodeDataIntegrationCaptureResponse": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string"
          },
          "variableOrEntityID": {
            "nullable": true,
            "type": "string"
          },
          "captureType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ToolNodeCaptureType"
              }
            ]
          }
        },
        "required": [
          "path",
          "variableOrEntityID"
        ]
      },
      "ToolExtendedInputVariable": {
        "type": "object",
        "properties": {
          "schema": {},
          "metadata": {
            "type": "object",
            "additionalProperties": {}
          }
        }
      },
      "IntegrationTool": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "maxLength": 255
          },
          "folderID": {
            "nullable": true,
            "type": "string"
          },
          "createdByID": {
            "type": "number"
          },
          "toolName": {
            "$ref": "#/components/schemas/IntegrationToolName"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "toolProvider": {
            "$ref": "#/components/schemas/IntegrationToolProvider"
          }
        },
        "required": [
          "id",
          "createdAt",
          "updatedAt",
          "updatedByID",
          "name",
          "folderID",
          "createdByID",
          "toolName",
          "description",
          "toolProvider"
        ]
      },
      "IntegrationToolName": {
        "type": "string",
        "enum": [
          "example_dynamic_schema",
          "zendesk_find_user",
          "zendesk_find_group",
          "zendesk_find_ticket",
          "zendesk_create_ticket",
          "zendesk_update_ticket",
          "zendesk_add_ticket_comment",
          "zendesk_update_organization",
          "zendesk_find_latest_comment",
          "salesforce_create_lead",
          "salesforce_update_lead",
          "salesforce_create_contact",
          "salesforce_update_contact",
          "salesforce_create_case",
          "salesforce_update_case",
          "salesforce_add_comment_to_case",
          "shopify_get_products",
          "shopify_get_order",
          "shopify_cancel_order",
          "shopify_update_order",
          "google_sheets_create_spreadsheet",
          "google_sheets_update_spreadsheet",
          "google_sheets_read_spreadsheet",
          "google_sheets_append_spreadsheet",
          "google_sheets_read_row",
          "google_gmail_send_email",
          "airtable_create_records",
          "airtable_delete_records",
          "airtable_get_record",
          "airtable_list_records",
          "airtable_update_records",
          "make_run_scenario",
          "twilio_send_sms",
          "hubspot_create_contact",
          "hubspot_create_lead",
          "hubspot_create_ticket"
        ],
        "x-enumNames": [
          "EXAMPLE_DYNAMIC_SCHEMA",
          "ZENDESK_FIND_USER",
          "ZENDESK_FIND_GROUP",
          "ZENDESK_FIND_TICKET",
          "ZENDESK_CREATE_TICKET",
          "ZENDESK_UPDATE_TICKET",
          "ZENDESK_ADD_TICKET_COMMENT",
          "ZENDESK_UPDATE_ORGANIZATION",
          "ZENDESK_FIND_LATEST_TICKET_COMMENT",
          "SALESFORCE_CREATE_LEAD",
          "SALESFORCE_UPDATE_LEAD",
          "SALESFORCE_CREATE_CONTACT",
          "SALESFORCE_UPDATE_CONTACT",
          "SALESFORCE_CREATE_CASE",
          "SALESFORCE_UPDATE_CASE",
          "SALESFORCE_ADD_COMMENT_TO_CASE",
          "SHOPIFY_GET_PRODUCTS",
          "SHOPIFY_GET_ORDER",
          "SHOPIFY_CANCEL_ORDER",
          "SHOPIFY_UPDATE_ORDER",
          "GOOGLE_SHEETS_CREATE_SPREADSHEET",
          "GOOGLE_SHEETS_UPDATE_SPREADSHEET",
          "GOOGLE_SHEETS_READ_SPREADSHEET",
          "GOOGLE_SHEETS_APPEND_SPREADSHEET",
          "GOOGLE_SHEETS_READ_ROW",
          "GOOGLE_GMAIL_SEND_EMAIL",
          "AIRTABLE_CREATE_RECORDS",
          "AIRTABLE_DELETE_RECORDS",
          "AIRTABLE_GET_RECORD",
          "AIRTABLE_LIST_RECORDS",
          "AIRTABLE_UPDATE_RECORDS",
          "MAKE_RUN_SCENARIO",
          "TWILIO_SEND_SMS",
          "HUBSPOT_CREATE_CONTACT",
          "HUBSPOT_CREATE_LEAD",
          "HUBSPOT_CREATE_TICKET"
        ]
      },
      "IntegrationToolProvider": {
        "type": "string",
        "enum": [
          "make",
          "zendesk",
          "shopify",
          "airtable",
          "salesforce",
          "hubspot",
          "google_gmail",
          "google_sheets",
          "twilio",
          "ujet",
          "genesys",
          "kustomer",
          "dixa",
          "sunshine",
          "example"
        ],
        "x-enumNames": [
          "MAKE",
          "ZENDESK",
          "SHOPIFY",
          "AIRTABLE",
          "SALESFORCE",
          "HUBSPOT",
          "GOOGLE_GMAIL",
          "GOOGLE_SHEETS",
          "TWILIO",
          "UJET",
          "GENESYS",
          "KUSTOMER",
          "DIXA",
          "SUNSHINE",
          "EXAMPLE"
        ]
      },
      "McpIntegrationTool": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "maxLength": 255
          },
          "folderID": {
            "nullable": true,
            "type": "string"
          },
          "createdByID": {
            "type": "number"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "mcpServerToolID": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "createdAt",
          "updatedAt",
          "updatedByID",
          "name",
          "folderID",
          "createdByID",
          "description",
          "mcpServerToolID"
        ]
      },
      "AgentFlowTool": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "flowID": {
            "type": "string"
          },
          "agentID": {
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "id",
          "createdAt",
          "flowID",
          "agentID",
          "description"
        ]
      },
      "Agent": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "maxLength": 255
          },
          "folderID": {
            "nullable": true,
            "type": "string"
          },
          "createdByID": {
            "type": "number"
          },
          "endTool": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentEndTool"
              }
            ]
          },
          "settings": {
            "$ref": "#/components/schemas/AgentSettings"
          },
          "cardTool": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentCardTool"
              }
            ]
          },
          "isOperator": {
            "default": false,
            "type": "boolean"
          },
          "buttonTool": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentButtonTool"
              }
            ]
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "instructions": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/Markup"
              }
            ]
          },
          "skipTurnTool": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentSkipTurnTool"
              }
            ]
          },
          "carouselTool": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentCardTool"
              }
            ]
          },
          "pathToolOrder": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "webSearchTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentWebSearchTool"
              }
            ]
          },
          "callForwardTool": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentCallForwardTool"
              }
            ]
          },
          "knowledgeBaseTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentKnowledgeBaseTool"
              }
            ]
          }
        },
        "required": [
          "id",
          "createdAt",
          "updatedAt",
          "updatedByID",
          "name",
          "folderID",
          "createdByID",
          "settings",
          "description",
          "instructions",
          "pathToolOrder",
          "webSearchTool",
          "knowledgeBaseTool"
        ]
      },
      "AgentEndTool": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "messages": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentToolMessages"
              }
            ]
          },
          "toolSound": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ToolNodeDataToolSound"
              }
            ]
          },
          "description": {
            "type": "string"
          }
        },
        "required": [
          "enabled",
          "description"
        ]
      },
      "AgentSettings": {
        "type": "object",
        "properties": {
          "model": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AIModel"
              }
            ]
          },
          "realtime": {
            "type": "object",
            "properties": {
              "voice": {
                "type": "string"
              },
              "eagerness": {
                "type": "string"
              }
            }
          },
          "maxTokens": {
            "type": "number"
          },
          "temperature": {
            "type": "number"
          },
          "reasoningEffort": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AIReasoningEffort"
              }
            ]
          }
        }
      },
      "AIModel": {
        "type": "string",
        "enum": [
          "gpt-3.5-turbo-1106",
          "gpt-3.5-turbo",
          "gpt-4",
          "gpt-4o",
          "gpt-4o-mini",
          "gpt-4.1-2025-04-14",
          "gpt-4.1-mini-2025-04-14",
          "gpt-4.1-nano-2025-04-14",
          "gpt-o3-mini",
          "o3-2025-04-16",
          "o4-mini-2025-04-16",
          "gpt-5",
          "gpt-5-mini",
          "gpt-5-nano",
          "gpt-5.2",
          "gpt-5.4",
          "gpt-5.4-mini",
          "gpt-5.5",
          "gpt-5.6-sol",
          "gpt-5.6-terra",
          "gpt-5.6-luna",
          "gpt-realtime",
          "gpt-live-1",
          "claude-4-opus",
          "claude-4-sonnet",
          "claude-4.5-sonnet",
          "claude-4.6-sonnet",
          "claude-4.5-haiku",
          "claude-4.5-opus",
          "claude-4.7-opus",
          "bedrock-claude-4-sonnet",
          "bedrock-claude-4.5-sonnet",
          "bedrock-claude-4.6-sonnet",
          "bedrock-claude-5-sonnet",
          "bedrock-claude-4.5-haiku",
          "bedrock-claude-4.5-opus",
          "bedrock-claude-4.7-opus",
          "bedrock-claude-4.8-opus",
          "voiceflow-core-4.0",
          "voiceflow-core-4.2",
          "voiceflow-flash-4.2",
          "kimi-k3",
          "gemini-2.5-pro",
          "gemini-2.5-flash",
          "gemini-live-2.5-flash",
          "gemini-3-flash",
          "gemini-3.5-flash",
          "gemini-3.1-pro",
          "gpt-oss-20b",
          "gpt-oss-120b",
          "llama-guard-4",
          "llama-3.1-instant",
          "llama-3.3-versatile",
          "qwen3.6-27b",
          "grok-4.6",
          "voiceflow-core-4.1",
          "voiceflow-flash-4.1",
          "gemini-flash-2",
          "gpt-4-turbo",
          "claude-3.5-haiku",
          "claude-3-opus",
          "claude-3.7-sonnet",
          "claude-v2",
          "llama-3.2-1b-preview",
          "gemini-pro-1.5",
          "claude-3-haiku",
          "claude-3-sonnet",
          "text-davinci-003",
          "claude-v1",
          "claude-instant-v1",
          "deep-seek-r1-distill-llama-70B",
          "claude-3.5-sonnet"
        ],
        "x-enumNames": [
          "GPT_3_5_TURBO_1106",
          "GPT_3_5_TURBO",
          "GPT_4",
          "GPT_4_O",
          "GPT_4_O_MINI",
          "GPT_4_1",
          "GPT_4_1_MINI",
          "GPT_4_1_NANO",
          "GPT_O_3_MINI",
          "GPT_O_3",
          "GPT_O_4_MINI",
          "GPT_5",
          "GPT_5_MINI",
          "GPT_5_NANO",
          "GPT_5_2",
          "GPT_5_4",
          "GPT_5_4_MINI",
          "GPT_5_5",
          "GPT_5_6_SOL",
          "GPT_5_6_TERRA",
          "GPT_5_6_LUNA",
          "GPT_REALTIME",
          "GPT_LIVE_1",
          "CLAUDE_4_OPUS",
          "CLAUDE_4_SONNET",
          "CLAUDE_4_5_SONNET",
          "CLAUDE_4_6_SONNET",
          "CLAUDE_4_5_HAIKU",
          "CLAUDE_4_5_OPUS",
          "CLAUDE_4_7_OPUS",
          "BEDROCK_CLAUDE_4_SONNET",
          "BEDROCK_CLAUDE_4_5_SONNET",
          "BEDROCK_CLAUDE_4_6_SONNET",
          "BEDROCK_CLAUDE_5_SONNET",
          "BEDROCK_CLAUDE_4_5_HAIKU",
          "BEDROCK_CLAUDE_4_5_OPUS",
          "BEDROCK_CLAUDE_4_7_OPUS",
          "BEDROCK_CLAUDE_4_8_OPUS",
          "VOICEFLOW_CORE_4_0",
          "VOICEFLOW_CORE_4_2",
          "VOICEFLOW_FLASH_4_2",
          "KIMI_K_3",
          "GEMINI_2_5_PRO",
          "GEMINI_2_5_FLASH",
          "GEMINI_LIVE_2_5_FLASH",
          "GEMINI_3_FLASH",
          "GEMINI_3_5_FLASH",
          "GEMINI_3_1_PRO",
          "GPT_OSS_20_B",
          "GPT_OSS_120_B",
          "LLAMA_GUARD_4",
          "LLAMA_3_1_INSTANT",
          "LLAMA_3_3_VERSATILE",
          "QWEN_3_6_27_B",
          "GROK_4_6",
          "VOICEFLOW_CORE_4_1",
          "VOICEFLOW_FLASH_4_1",
          "GEMINI_FLASH_2",
          "GPT_4_TURBO",
          "CLAUDE_3_5_HAIKU",
          "CLAUDE_3_OPUS",
          "CLAUDE_3_7_SONNET",
          "CLAUDE_V_2",
          "LLAMA_3_2_1_B_PREVIEW",
          "GEMINI_PRO_1_5",
          "CLAUDE_3_HAIKU",
          "CLAUDE_3_SONNET",
          "DA_VINCI_003",
          "CLAUDE_V_1",
          "CLAUDE_INSTANT_V_1",
          "DEEP_SEEK_R_1_DISTILL_LLAMA_70_B",
          "CLAUDE_3_5_SONNET"
        ]
      },
      "AIReasoningEffort": {
        "type": "string",
        "enum": [
          "off",
          "adaptive",
          "minimal",
          "low",
          "medium",
          "high"
        ],
        "x-enumNames": [
          "OFF",
          "ADAPTIVE",
          "MINIMAL",
          "LOW",
          "MEDIUM",
          "HIGH"
        ]
      },
      "AgentCardTool": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "messages": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentToolMessages"
              }
            ]
          },
          "description": {
            "type": "string"
          }
        },
        "required": [
          "enabled",
          "description"
        ]
      },
      "AgentButtonTool": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "messages": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentToolMessages"
              }
            ]
          },
          "description": {
            "type": "string"
          }
        },
        "required": [
          "enabled",
          "description"
        ]
      },
      "AgentSkipTurnTool": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "description": {
            "type": "string"
          }
        },
        "required": [
          "enabled",
          "description"
        ]
      },
      "AgentWebSearchTool": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "messages": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentToolMessages"
              }
            ]
          },
          "toolSound": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ToolNodeDataToolSound"
              }
            ]
          },
          "description": {
            "type": "string"
          },
          "allowedDomains": {
            "nullable": true,
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sourceUrlsCount": {
            "nullable": true,
            "type": "number",
            "minimum": 1,
            "maximum": 5
          }
        },
        "required": [
          "enabled"
        ]
      },
      "AgentCallForwardTool": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "address": {
            "$ref": "#/components/schemas/Markup"
          },
          "messages": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentToolMessages"
              }
            ]
          },
          "extension": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Markup"
              }
            ]
          },
          "toolSound": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ToolNodeDataToolSound"
              }
            ]
          },
          "description": {
            "type": "string"
          },
          "addressType": {
            "$ref": "#/components/schemas/CallForwardAddressType"
          },
          "callerIDPassthrough": {
            "type": "boolean"
          }
        },
        "required": [
          "enabled",
          "address",
          "description",
          "addressType"
        ]
      },
      "CallForwardAddressType": {
        "type": "string",
        "enum": [
          "phone",
          "sip"
        ],
        "x-enumNames": [
          "PHONE",
          "SIP"
        ]
      },
      "AgentKnowledgeBaseTool": {
        "type": "object",
        "properties": {
          "query": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/Markup"
              }
            ]
          },
          "enabled": {
            "type": "boolean"
          },
          "filters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AgentKnowledgeBaseMetadataKeyFilter"
            }
          },
          "messages": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentToolMessages"
              }
            ]
          },
          "toolSound": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ToolNodeDataToolSound"
              }
            ]
          },
          "chunkLimit": {
            "nullable": true,
            "type": "number"
          },
          "description": {
            "type": "string"
          },
          "queryMode": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentKnowledgeBaseToolQueryMode"
              }
            ]
          },
          "sourceUrlsCount": {
            "nullable": true,
            "type": "number",
            "minimum": 1,
            "maximum": 5
          }
        },
        "required": [
          "enabled",
          "description"
        ]
      },
      "AgentKnowledgeBaseMetadataKeyFilter": {
        "type": "object",
        "properties": {
          "description": {
            "default": null,
            "nullable": true,
            "type": "string"
          },
          "defaultValue": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/Markup"
              }
            ]
          },
          "key": {
            "type": "string"
          }
        },
        "required": [
          "key"
        ]
      },
      "AgentKnowledgeBaseToolQueryMode": {
        "type": "string",
        "enum": [
          "custom",
          "rewriting"
        ],
        "x-enumNames": [
          "CUSTOM",
          "REWRITING"
        ]
      },
      "AgentPathTool": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "maxLength": 255
          },
          "agentID": {
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "variableOrder": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "messages": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentToolMessages"
              }
            ]
          }
        },
        "required": [
          "id",
          "createdAt",
          "name",
          "agentID",
          "description",
          "variableOrder"
        ]
      },
      "AgentFlowToolVariable": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "kind": {
            "$ref": "#/components/schemas/AgentToolVariableKind"
          },
          "entityID": {
            "nullable": true,
            "type": "string"
          },
          "variableID": {
            "nullable": true,
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "agentFlowToolID": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "createdAt",
          "kind",
          "entityID",
          "variableID",
          "description",
          "agentFlowToolID"
        ]
      },
      "AgentToolVariableKind": {
        "type": "string",
        "enum": [
          "entity",
          "variable"
        ],
        "x-enumNames": [
          "ENTITY",
          "VARIABLE"
        ]
      },
      "AgentPathToolVariable": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "kind": {
            "$ref": "#/components/schemas/AgentToolVariableKind"
          },
          "entityID": {
            "nullable": true,
            "type": "string"
          },
          "variableID": {
            "nullable": true,
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "agentPathToolID": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "createdAt",
          "kind",
          "entityID",
          "variableID",
          "description",
          "agentPathToolID"
        ]
      },
      "AgentMcpIntegrationTool": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "inputVariables": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/ToolNodeDataMcpIntegrationInputVariable"
            }
          },
          "captureResponse": {
            "default": null,
            "nullable": true,
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/ToolNodeDataMcpIntegrationCaptureResponse"
            }
          },
          "mcpIntegrationToolID": {
            "type": "string"
          },
          "toolSound": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ToolNodeDataToolSound"
              }
            ]
          },
          "agentID": {
            "type": "string"
          },
          "messages": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentToolMessages"
              }
            ]
          },
          "captureInputVariables": {
            "nullable": true,
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/AgentToolCaptureInputVariable"
            }
          }
        },
        "required": [
          "id",
          "createdAt",
          "description",
          "inputVariables",
          "mcpIntegrationToolID",
          "agentID",
          "captureInputVariables"
        ]
      },
      "ToolNodeDataMcpIntegrationInputVariable": {
        "type": "object",
        "properties": {
          "description": {
            "default": null,
            "nullable": true,
            "type": "string"
          },
          "defaultValue": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/Markup"
              }
            ]
          },
          "shouldFulfill": {
            "description": "If true, then LLM will never ask user to fulfill an input variable. If false, then LLM will decide for itself whether user needs to provide a value for the input variable.",
            "type": "boolean"
          },
          "mcpIntegrationVariableName": {
            "type": "string"
          },
          "captureType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ToolNodeCaptureType"
              }
            ]
          }
        },
        "required": [
          "mcpIntegrationVariableName"
        ]
      },
      "ToolNodeDataMcpIntegrationCaptureResponse": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string"
          },
          "variableOrEntityID": {
            "nullable": true,
            "type": "string"
          },
          "captureType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ToolNodeCaptureType"
              }
            ]
          }
        },
        "required": [
          "path",
          "variableOrEntityID"
        ]
      },
      "Prompt": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "maxLength": 255
          },
          "folderID": {
            "nullable": true,
            "type": "string"
          },
          "createdByID": {
            "type": "number"
          },
          "draft": {
            "default": null,
            "nullable": true,
            "type": "boolean"
          },
          "settings": {
            "$ref": "#/components/schemas/PromptSettings"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "messageOrder": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "id",
          "createdAt",
          "updatedAt",
          "updatedByID",
          "name",
          "folderID",
          "createdByID",
          "settings",
          "description",
          "messageOrder"
        ]
      },
      "PromptSettings": {
        "type": "object",
        "properties": {
          "model": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AIModel"
              }
            ]
          },
          "maxTokens": {
            "type": "number"
          },
          "temperature": {
            "type": "number"
          },
          "responseFormat": {
            "type": "string"
          },
          "reasoningEffort": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AIReasoningEffort"
              }
            ]
          },
          "useStructuredOutput": {
            "type": "boolean"
          }
        }
      },
      "PromptMessage": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/PromptMessageType"
          },
          "data": {
            "$ref": "#/components/schemas/PromptMessageData"
          },
          "pairID": {
            "nullable": true,
            "type": "string"
          },
          "promptID": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "createdAt",
          "type",
          "data",
          "pairID",
          "promptID"
        ]
      },
      "PromptMessageType": {
        "type": "string",
        "enum": [
          "role",
          "variable"
        ],
        "x-enumNames": [
          "ROLE",
          "VARIABLE"
        ]
      },
      "PromptMessageData": {
        "type": "object",
        "properties": {
          "role": {
            "$ref": "#/components/schemas/PromptMessageRole"
          },
          "content": {
            "$ref": "#/components/schemas/Markup"
          }
        },
        "required": [
          "role",
          "content"
        ]
      },
      "PromptMessageRole": {
        "type": "string",
        "enum": [
          "system",
          "agent",
          "user"
        ],
        "x-enumNames": [
          "SYSTEM",
          "AGENT",
          "USER"
        ]
      },
      "Flow": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "folderID": {
            "nullable": true,
            "type": "string"
          },
          "createdByID": {
            "type": "number"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255
          },
          "diagramID": {
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "id",
          "createdAt",
          "updatedAt",
          "updatedByID",
          "folderID",
          "createdByID",
          "name",
          "diagramID",
          "description"
        ]
      },
      "KBDocumentUrlData": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "url"
            ],
            "x-enumNames": [
              "URL"
            ]
          },
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "refreshRate": {
            "allOf": [
              {
                "$ref": "#/components/schemas/KnowledgeBaseDocumentRefreshRate"
              }
            ]
          },
          "lastSuccessUpdate": {
            "type": "string"
          },
          "accessTokenID": {
            "type": "number"
          },
          "integrationExternalID": {
            "type": "string"
          },
          "source": {
            "allOf": [
              {
                "$ref": "#/components/schemas/KnowledgeBaseDocumentIntegrationType"
              }
            ]
          }
        },
        "required": [
          "type",
          "name",
          "url"
        ]
      },
      "KnowledgeBaseDocumentRefreshRate": {
        "type": "string",
        "enum": [
          "daily",
          "weekly",
          "monthly",
          "never"
        ],
        "x-enumNames": [
          "DAILY",
          "WEEKLY",
          "MONTHLY",
          "NEVER"
        ]
      },
      "KnowledgeBaseDocumentIntegrationType": {
        "type": "string",
        "enum": [
          "zendesk",
          "shopify"
        ],
        "x-enumNames": [
          "ZENDESK",
          "SHOPIFY"
        ]
      },
      "KBDocumentStatus": {
        "type": "object",
        "properties": {
          "type": {
            "$ref": "#/components/schemas/KnowledgeBaseDocumentStatus"
          },
          "data": {}
        },
        "required": [
          "type"
        ]
      },
      "KnowledgeBaseDocumentStatus": {
        "type": "string",
        "enum": [
          "ERROR",
          "PENDING",
          "SUCCESS",
          "INITIALIZED"
        ],
        "x-enumNames": [
          "ERROR",
          "PENDING",
          "SUCCESS",
          "INITIALIZED"
        ]
      },
      "KBDocumentDocxData": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "docx"
            ],
            "x-enumNames": [
              "DOCX"
            ]
          },
          "name": {
            "type": "string"
          },
          "url": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "type",
          "name"
        ]
      },
      "KBDocumentPDFData": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "pdf"
            ],
            "x-enumNames": [
              "PDF"
            ]
          },
          "name": {
            "type": "string"
          },
          "url": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "type",
          "name"
        ]
      },
      "KBDocumentTextData": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "text"
            ],
            "x-enumNames": [
              "TEXT"
            ]
          },
          "name": {
            "type": "string"
          },
          "canEdit": {
            "type": "boolean"
          },
          "url": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "type",
          "name"
        ]
      },
      "KBDocumentMarkdownData": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "md"
            ],
            "x-enumNames": [
              "MD"
            ]
          },
          "name": {
            "type": "string"
          },
          "url": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "type",
          "name"
        ]
      },
      "KBDocumentCSVData": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "csv"
            ],
            "x-enumNames": [
              "CSV"
            ]
          },
          "name": {
            "type": "string"
          },
          "rowsCount": {
            "type": "number"
          },
          "url": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "type",
          "name"
        ]
      },
      "KBDocumentXLSXData": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "xlsx"
            ],
            "x-enumNames": [
              "XLSX"
            ]
          },
          "name": {
            "type": "string"
          },
          "rowsCount": {
            "type": "number"
          },
          "url": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "type",
          "name"
        ]
      },
      "KBDocumentChunk": {
        "type": "object",
        "properties": {
          "chunkID": {
            "type": "string"
          },
          "content": {
            "type": "string"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "chunkID",
          "content"
        ]
      },
      "KBDocumentData": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/KBDocumentUrlData"
          },
          {
            "$ref": "#/components/schemas/KBDocumentDocxData"
          },
          {
            "$ref": "#/components/schemas/KBDocumentPDFData"
          },
          {
            "$ref": "#/components/schemas/KBDocumentTextData"
          },
          {
            "$ref": "#/components/schemas/KBDocumentMarkdownData"
          },
          {
            "$ref": "#/components/schemas/KBDocumentCSVData"
          },
          {
            "$ref": "#/components/schemas/KBDocumentXLSXData"
          },
          {
            "$ref": "#/components/schemas/KBDocumentTableData"
          }
        ]
      },
      "KBDocumentTableData": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "table"
            ],
            "x-enumNames": [
              "TABLE"
            ]
          },
          "name": {
            "type": "string"
          },
          "rowsCount": {
            "type": "number"
          },
          "url": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "type",
          "name",
          "rowsCount"
        ]
      },
      "KBDocumentChunkSmartChunking": {
        "type": "object",
        "properties": {
          "markdownConversion": {
            "type": "boolean"
          },
          "llmBasedChunks": {
            "type": "boolean"
          },
          "llmGeneratedQ": {
            "type": "boolean"
          },
          "llmContentSummarization": {
            "type": "boolean"
          },
          "llmPrependContext": {
            "type": "boolean"
          }
        }
      },
      "DocumentMetadataEntry": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string"
          },
          "values": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DocumentMetadataValue"
            }
          }
        },
        "required": [
          "key",
          "values"
        ]
      },
      "DocumentMetadataValue": {
        "type": "object",
        "properties": {
          "value": {
            "type": "string"
          },
          "id": {
            "type": "string"
          }
        },
        "required": [
          "value",
          "id"
        ]
      },
      "KnowledgeBaseDocument": {
        "type": "object",
        "properties": {
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "creatorID": {
            "type": "number"
          },
          "documentID": {
            "type": "string"
          },
          "s3ObjectRef": {
            "type": "string"
          },
          "version": {
            "type": "number"
          },
          "status": {
            "$ref": "#/components/schemas/KBDocumentStatus"
          },
          "folderID": {
            "nullable": true,
            "type": "string"
          },
          "data": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/KBDocumentData"
              }
            ]
          },
          "chunks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KBDocumentChunk"
            }
          },
          "smartChunking": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/KBDocumentChunkSmartChunking"
              }
            ]
          },
          "metadata": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DocumentMetadataEntry"
            }
          }
        },
        "required": [
          "creatorID",
          "documentID",
          "status",
          "data"
        ]
      },
      "KnowledgeBaseSummarization": {
        "type": "object",
        "properties": {
          "model": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AIModel"
              }
            ]
          },
          "system": {
            "type": "string"
          },
          "maxTokens": {
            "type": "number"
          },
          "temperature": {
            "type": "number"
          },
          "reasoningEffort": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AIReasoningEffort"
              }
            ]
          },
          "mode": {
            "$ref": "#/components/schemas/KBSettingsPromptMode"
          },
          "prompt": {
            "type": "string"
          }
        },
        "required": [
          "mode",
          "prompt"
        ]
      },
      "KBSettingsPromptMode": {
        "type": "string",
        "enum": [
          "prompt",
          "memory",
          "memory_prompt"
        ],
        "x-enumNames": [
          "PROMPT",
          "MEMORY",
          "MEMORY_PROMPT"
        ]
      },
      "KnowledgeBaseChunkStrategy": {
        "type": "object",
        "properties": {
          "type": {
            "$ref": "#/components/schemas/KBSettingsChunkStrategy"
          },
          "size": {
            "type": "number"
          },
          "overlap": {
            "type": "number"
          }
        },
        "required": [
          "type",
          "size",
          "overlap"
        ]
      },
      "KBSettingsChunkStrategy": {
        "type": "string",
        "enum": [
          "recursive_text_splitter"
        ],
        "x-enumNames": [
          "RECURSIVE_TEXT_SPLITTER"
        ]
      },
      "KnowledgeBaseSearch": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "number"
          },
          "metric": {
            "type": "string"
          }
        },
        "required": [
          "limit",
          "metric"
        ]
      },
      "KnowledgeBaseEmbeddingModel": {
        "type": "object",
        "properties": {
          "model": {
            "type": "string"
          },
          "size": {
            "type": "number"
          }
        },
        "required": [
          "model",
          "size"
        ]
      },
      "KnowledgeBaseSettings": {
        "type": "object",
        "properties": {
          "summarization": {
            "$ref": "#/components/schemas/KnowledgeBaseSummarization"
          },
          "chunkStrategy": {
            "$ref": "#/components/schemas/KnowledgeBaseChunkStrategy"
          },
          "search": {
            "$ref": "#/components/schemas/KnowledgeBaseSearch"
          },
          "embeddingModel": {
            "allOf": [
              {
                "$ref": "#/components/schemas/KnowledgeBaseEmbeddingModel"
              }
            ]
          }
        },
        "required": [
          "summarization",
          "chunkStrategy",
          "search"
        ]
      },
      "McpServerSpecification": {
        "type": "string",
        "enum": [
          "2025-03-26",
          "2025-06-18"
        ],
        "x-enumNames": [
          "V_2025_03_26",
          "V_2025_06_18"
        ]
      },
      "McpServerHeaderEntry": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "key": {
            "nullable": true,
            "type": "string"
          },
          "value": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/Markup"
              }
            ]
          }
        },
        "required": [
          "id",
          "key",
          "value"
        ]
      },
      "McpServerAuthType": {
        "type": "string",
        "enum": [
          "custom",
          "oauth"
        ],
        "x-enumNames": [
          "CUSTOM",
          "OAUTH"
        ]
      },
      "McpServerOAuthMetadata": {
        "type": "object",
        "properties": {
          "connected": {
            "type": "boolean"
          },
          "expiresAt": {
            "nullable": true,
            "type": "string"
          },
          "scope": {
            "nullable": true,
            "type": "string"
          },
          "authServerUrl": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "connected"
        ]
      },
      "McpServerTool": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "folderID": {
            "nullable": true,
            "type": "string"
          },
          "createdByID": {
            "type": "number"
          },
          "toolName": {
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "inputSchema": {
            "$ref": "#/components/schemas/JsonSchema"
          },
          "mcpServerID": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "createdAt",
          "updatedAt",
          "updatedByID",
          "name",
          "folderID",
          "createdByID",
          "toolName",
          "inputSchema",
          "mcpServerID"
        ]
      },
      "JsonSchema": {
        "type": "object",
        "additionalProperties": {}
      },
      "VersionVariant": {
        "type": "string",
        "enum": [
          "draft",
          "published"
        ],
        "x-enumNames": [
          "DRAFT",
          "PUBLISHED"
        ]
      },
      "ProgramLine": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "type"
        ],
        "additionalProperties": {}
      },
      "SecretVisibility": {
        "type": "string",
        "enum": [
          "restricted",
          "masked"
        ],
        "x-enumNames": [
          "RESTRICTED",
          "MASKED"
        ]
      },
      "ProjectEnvironment": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "alias": {
            "type": "string"
          },
          "isMain": {
            "type": "boolean"
          },
          "releases": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProjectEnvironmentRelease"
            }
          },
          "createdAt": {
            "type": "string"
          },
          "draftVersionID": {
            "type": "string"
          },
          "createdByUserID": {
            "type": "number"
          },
          "clonedFromMainAt": {
            "nullable": true,
            "type": "string"
          },
          "pullBase": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectEnvironmentPullBase"
              }
            ]
          },
          "pullStatus": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectEnvironmentPullStatus"
              }
            ]
          },
          "trafficPercentage": {
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "nextReleaseNumber": {
            "type": "number"
          },
          "publishedVersionID": {
            "type": "string"
          },
          "draftVersionIDsHistory": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "protected": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "name",
          "alias",
          "isMain",
          "releases",
          "createdAt",
          "draftVersionID",
          "createdByUserID",
          "trafficPercentage",
          "nextReleaseNumber",
          "publishedVersionID",
          "draftVersionIDsHistory"
        ]
      },
      "ProjectEnvironmentRelease": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "backupID": {
            "type": "number"
          },
          "createdAt": {
            "type": "string"
          },
          "versionID": {
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "autogenerated": {
            "type": "boolean"
          },
          "createdByUserID": {
            "nullable": true,
            "type": "number"
          }
        },
        "required": [
          "name",
          "backupID",
          "createdAt",
          "versionID",
          "description",
          "autogenerated",
          "createdByUserID"
        ]
      },
      "ProjectEnvironmentPullBase": {
        "type": "object",
        "properties": {
          "backupID": {
            "type": "number"
          },
          "versionID": {
            "type": "string"
          },
          "sourceName": {
            "type": "string"
          },
          "createdAt": {
            "type": "string"
          }
        },
        "required": [
          "backupID",
          "versionID",
          "sourceName",
          "createdAt"
        ]
      },
      "ProjectEnvironmentPullStatus": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "running",
              "succeeded",
              "failed"
            ],
            "x-enumNames": [
              "RUNNING",
              "SUCCEEDED",
              "FAILED"
            ]
          },
          "actionID": {
            "type": "string"
          },
          "error": {
            "nullable": true,
            "type": "string"
          },
          "startedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "finishedAt": {
            "nullable": true,
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "startedByUserID": {
            "type": "number"
          },
          "sourceBackupID": {
            "nullable": true,
            "type": "number"
          },
          "sourceVersionID": {
            "type": "string"
          },
          "sourceName": {
            "type": "string"
          },
          "draftVersionID": {
            "nullable": true,
            "type": "string"
          },
          "summary": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectEnvironmentPullSummary"
              }
            ]
          },
          "conflicts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProjectEnvironmentPullConflict"
            }
          }
        },
        "required": [
          "status",
          "actionID",
          "error",
          "startedAt",
          "finishedAt",
          "startedByUserID",
          "sourceBackupID",
          "sourceVersionID",
          "sourceName",
          "draftVersionID",
          "summary",
          "conflicts"
        ]
      },
      "ProjectEnvironmentPullSummary": {
        "type": "object",
        "properties": {
          "added": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "overwritten": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "deleted": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "conflicted": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "retained": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "dropped": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "renamed": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "added",
          "overwritten",
          "deleted",
          "conflicted",
          "retained",
          "dropped",
          "renamed"
        ]
      },
      "ProjectEnvironmentPullConflict": {
        "type": "object",
        "properties": {
          "collection": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "name": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "collection",
          "id",
          "name"
        ]
      },
      "Secret": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "visibility": {
            "$ref": "#/components/schemas/SecretVisibility"
          },
          "hasValue": {
            "type": "boolean"
          },
          "assistantID": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          }
        },
        "required": [
          "id",
          "name",
          "visibility",
          "assistantID",
          "createdAt",
          "updatedAt",
          "updatedByID"
        ]
      },
      "Project": {
        "type": "object",
        "properties": {
          "_id": {
            "type": "string"
          },
          "nlu": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "image": {
            "type": "string"
          },
          "teamID": {
            "type": "string"
          },
          "members": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProjectMember"
            }
          },
          "privacy": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectPrivacy"
              }
            ]
          },
          "platform": {
            "type": "string"
          },
          "_version": {
            "type": "number"
          },
          "linkType": {
            "type": "string"
          },
          "stickers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProjectSticker"
            }
          },
          "creatorID": {
            "type": "number"
          },
          "updatedBy": {
            "type": "number"
          },
          "createdAt": {
            "nullable": true,
            "type": "string"
          },
          "updatedAt": {
            "type": "string"
          },
          "prototype": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectPrototype"
              }
            ]
          },
          "apiPrivacy": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectPrivacy"
              }
            ]
          },
          "reportTags": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/ProjectReportTag"
            }
          },
          "nluSettings": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectNLUSettings"
              }
            ]
          },
          "environments": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/ProjectEnvironment"
            }
          },
          "platformData": {
            "type": "object",
            "additionalProperties": {}
          },
          "customThemes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProjectCustomTheme"
            }
          },
          "aiAssistSettings": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectAIAssistSettings"
              }
            ]
          },
          "transcriptSettings": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectTranscriptSettings"
              }
            ]
          },
          "objective": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectObjective"
              }
            ]
          },
          "devVersion": {
            "description": "@deprecated use environments instead with environments projects",
            "type": "string"
          },
          "liveVersion": {
            "description": "@deprecated use environments instead with environments projects",
            "type": "string"
          },
          "stagingVersion": {
            "description": "@deprecated use environments instead with environments projects",
            "type": "string"
          },
          "previewVersion": {
            "description": "@deprecated won't be used anymore with environments projects",
            "type": "string"
          },
          "knowledgeBase": {
            "description": "@deprecated not used anymore",
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionKnowledgeBase"
              }
            ]
          }
        },
        "required": [
          "_id",
          "name",
          "teamID",
          "members",
          "platform",
          "creatorID",
          "platformData"
        ]
      },
      "ProjectMember": {
        "type": "object",
        "properties": {
          "creatorID": {
            "type": "number"
          },
          "platformData": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "creatorID",
          "platformData"
        ]
      },
      "ProjectPrivacy": {
        "type": "string",
        "enum": [
          "public",
          "private"
        ],
        "x-enumNames": [
          "PUBLIC",
          "PRIVATE"
        ]
      },
      "ProjectSticker": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "url"
        ]
      },
      "ProjectPrototype": {
        "type": "object",
        "properties": {
          "nlp": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "LUIS"
                    ],
                    "x-enumNames": [
                      "LUIS"
                    ]
                  },
                  "appID": {
                    "type": "string"
                  },
                  "resourceID": {
                    "type": "string"
                  }
                },
                "required": [
                  "type",
                  "appID"
                ]
              },
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "VFNLU"
                    ],
                    "x-enumNames": [
                      "VFNLU"
                    ]
                  }
                },
                "required": [
                  "type"
                ]
              }
            ]
          },
          "data": {},
          "trainedModel": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PrototypeModel"
              }
            ]
          },
          "lastTrainedTime": {
            "type": "number"
          }
        },
        "required": [
          "nlp",
          "data"
        ]
      },
      "PrototypeModel": {
        "type": "object",
        "properties": {
          "slots": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PrototypeSlot"
            }
          },
          "intents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PrototypeIntent"
            }
          }
        },
        "required": [
          "slots",
          "intents"
        ]
      },
      "PrototypeSlot": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "type": "object",
            "properties": {
              "value": {
                "type": "string"
              }
            }
          },
          "color": {
            "type": "string"
          },
          "inputs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "description": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "key",
          "name",
          "type",
          "inputs"
        ]
      },
      "PrototypeIntent": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "slots": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PrototypeIntentSlot"
            }
          },
          "inputs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PrototypeIntentInput"
            }
          },
          "noteID": {
            "nullable": true,
            "type": "string"
          },
          "description": {
            "type": "string"
          }
        },
        "required": [
          "key",
          "name",
          "inputs"
        ]
      },
      "PrototypeIntentSlot": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "dialog": {
            "$ref": "#/components/schemas/PrototypeIntentSlotDialog"
          },
          "required": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "dialog",
          "required"
        ]
      },
      "PrototypeIntentSlotDialog": {
        "type": "object",
        "properties": {
          "prompt": {
            "type": "array",
            "items": {}
          },
          "confirm": {
            "type": "array",
            "items": {}
          },
          "utterances": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PrototypeIntentInput"
            }
          },
          "confirmEnabled": {
            "type": "boolean"
          }
        },
        "required": [
          "prompt",
          "confirm",
          "utterances",
          "confirmEnabled"
        ]
      },
      "PrototypeIntentInput": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string"
          },
          "slots": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "text"
        ]
      },
      "ProjectReportTag": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string"
          },
          "tagID": {
            "type": "string"
          }
        },
        "required": [
          "label",
          "tagID"
        ]
      },
      "ProjectNLUSettings": {
        "type": "object",
        "properties": {
          "classifyStrategy": {
            "type": "string"
          }
        },
        "additionalProperties": {}
      },
      "ProjectCustomTheme": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "palette": {
            "$ref": "#/components/schemas/ProjectCustomThemePalette"
          },
          "standardColor": {
            "type": "string"
          }
        },
        "required": [
          "palette",
          "standardColor"
        ]
      },
      "ProjectCustomThemePalette": {
        "type": "object",
        "properties": {
          "50": {
            "type": "string"
          },
          "100": {
            "type": "string"
          },
          "200": {
            "type": "string"
          },
          "300": {
            "type": "string"
          },
          "400": {
            "type": "string"
          },
          "500": {
            "type": "string"
          },
          "600": {
            "type": "string"
          },
          "700": {
            "type": "string"
          },
          "800": {
            "type": "string"
          },
          "900": {
            "type": "string"
          }
        },
        "required": [
          "50",
          "100",
          "200",
          "300",
          "400",
          "500",
          "600",
          "700",
          "800",
          "900"
        ]
      },
      "ProjectAIAssistSettings": {
        "type": "object",
        "properties": {
          "aiPlayground": {
            "type": "boolean"
          },
          "generateStep": {
            "type": "boolean"
          },
          "generativeTasks": {
            "type": "boolean"
          },
          "generateNoMatch": {
            "type": "boolean"
          }
        },
        "additionalProperties": {}
      },
      "ProjectTranscriptSettings": {
        "type": "object",
        "properties": {
          "inactiveTimeout": {
            "default": 10,
            "type": "number",
            "minimum": 10,
            "maximum": 60
          },
          "saveTestTranscripts": {
            "type": "boolean"
          },
          "saveTranscriptsWithNoInteraction": {
            "default": true,
            "type": "boolean"
          }
        },
        "required": [
          "saveTestTranscripts"
        ]
      },
      "ProjectObjective": {
        "type": "string",
        "enum": [
          "resolution",
          "deflection",
          "customer-satisfaction",
          "conversion"
        ],
        "x-enumNames": [
          "RESOLUTION",
          "DEFLECTION",
          "CUSTOMER_SATISFACTION",
          "CONVERSION"
        ]
      },
      "VersionKnowledgeBase": {
        "type": "object",
        "properties": {
          "faqSets": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/VersionKnowledgeBaseSetFaq"
            }
          },
          "settings": {
            "allOf": [
              {
                "$ref": "#/components/schemas/KnowledgeBaseSettings"
              }
            ]
          },
          "documents": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/KnowledgeBaseDocument"
            }
          }
        }
      },
      "VersionKnowledgeBaseSetFaq": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionKnowledgeBaseSetFaqStatus"
              }
            ]
          },
          "version": {
            "type": "number"
          },
          "faqSetID": {
            "type": "string"
          },
          "updatedAt": {
            "type": "string"
          },
          "creatorID": {
            "type": "number"
          }
        }
      },
      "VersionKnowledgeBaseSetFaqStatus": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          }
        },
        "additionalProperties": {}
      },
      "Program": {
        "type": "object",
        "properties": {
          "_id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "lines": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/ProgramLine"
            }
          },
          "startId": {
            "type": "string"
          },
          "legacyID": {
            "type": "string"
          },
          "commands": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AnyProgramCommand"
            }
          },
          "diagramID": {
            "type": "string"
          },
          "versionID": {
            "type": "string"
          },
          "variables": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "updatedAt": {}
        },
        "required": [
          "_id",
          "lines",
          "startId",
          "commands",
          "diagramID",
          "versionID",
          "variables"
        ]
      },
      "AnyProgramCommand": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/AnyJumpProgramCommand"
          },
          {
            "$ref": "#/components/schemas/AnyPushProgramCommand"
          }
        ]
      },
      "AnyJumpProgramCommand": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/EventJumpProgramCommand"
          },
          {
            "$ref": "#/components/schemas/OnJumpProgramCommand"
          }
        ]
      },
      "EventJumpProgramCommand": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "jump"
            ],
            "x-enumNames": [
              "JUMP"
            ]
          },
          "nextID": {
            "nullable": true,
            "type": "string"
          },
          "platform": {
            "type": "string"
          },
          "diagramID": {
            "nullable": true,
            "type": "string"
          },
          "event": {
            "$ref": "#/components/schemas/AnyProgramEvent"
          }
        },
        "required": [
          "type",
          "nextID",
          "event"
        ]
      },
      "AnyProgramEvent": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/IntentProgramEvent"
          },
          {
            "$ref": "#/components/schemas/EventProgramEvent"
          },
          {
            "$ref": "#/components/schemas/GeneralProgramEvent"
          }
        ]
      },
      "IntentProgramEvent": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "intent"
            ],
            "x-enumNames": [
              "INTENT"
            ]
          },
          "intent": {
            "type": "string"
          },
          "mappings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IntentProgramEventMapping"
            }
          }
        },
        "required": [
          "type",
          "intent"
        ]
      },
      "IntentProgramEventMapping": {
        "type": "object",
        "properties": {
          "slot": {
            "type": "string"
          },
          "variable": {
            "type": "string"
          }
        },
        "required": [
          "slot",
          "variable"
        ]
      },
      "EventProgramEvent": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "event"
            ],
            "x-enumNames": [
              "EVENT"
            ]
          },
          "event": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "event"
        ]
      },
      "GeneralProgramEvent": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "type"
        ]
      },
      "OnJumpProgramCommand": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "jump"
            ],
            "x-enumNames": [
              "JUMP"
            ]
          },
          "nextID": {
            "nullable": true,
            "type": "string"
          },
          "platform": {
            "type": "string"
          },
          "diagramID": {
            "nullable": true,
            "type": "string"
          },
          "on": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "type",
          "nextID",
          "on"
        ]
      },
      "AnyPushProgramCommand": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/EventPushProgramCommand"
          },
          {
            "$ref": "#/components/schemas/OnPushProgramCommand"
          }
        ]
      },
      "EventPushProgramCommand": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "push"
            ],
            "x-enumNames": [
              "PUSH"
            ]
          },
          "platform": {
            "type": "string"
          },
          "diagramID": {
            "nullable": true,
            "type": "string"
          },
          "event": {
            "$ref": "#/components/schemas/AnyProgramEvent"
          }
        },
        "required": [
          "type",
          "event"
        ]
      },
      "OnPushProgramCommand": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "push"
            ],
            "x-enumNames": [
              "PUSH"
            ]
          },
          "platform": {
            "type": "string"
          },
          "diagramID": {
            "nullable": true,
            "type": "string"
          },
          "on": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "type",
          "on"
        ]
      },
      "Assistant": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255
          },
          "version": {
            "type": "integer",
            "minimum": 0,
            "exclusiveMinimum": true,
            "maximum": 9007199254740991
          },
          "folderID": {
            "default": null,
            "nullable": true,
            "type": "number"
          },
          "isDeleted": {
            "nullable": true,
            "type": "boolean"
          },
          "description": {
            "default": null,
            "nullable": true,
            "type": "string"
          },
          "workspaceID": {
            "type": "string"
          },
          "activeEnvironmentID": {
            "type": "string",
            "description": "@deprecated use project.environments instead with environments projects"
          }
        },
        "required": [
          "id",
          "createdAt",
          "updatedAt",
          "updatedByID",
          "name",
          "version",
          "workspaceID",
          "activeEnvironmentID"
        ]
      },
      "VariableState": {
        "type": "object",
        "properties": {
          "_id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "projectID": {
            "type": "string"
          },
          "variables": {
            "type": "object",
            "additionalProperties": {}
          },
          "startFrom": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/VariableStateStartFrom"
              }
            ]
          }
        },
        "required": [
          "_id",
          "name",
          "projectID",
          "variables"
        ]
      },
      "VariableStateStartFrom": {
        "type": "object",
        "properties": {
          "stepID": {
            "type": "string"
          },
          "diagramID": {
            "type": "string"
          }
        },
        "required": [
          "stepID",
          "diagramID"
        ]
      },
      "Version": {
        "type": "object",
        "properties": {
          "_id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "model": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionModel"
              }
            ]
          },
          "legacyID": {
            "type": "string"
          },
          "updatedAt": {
            "type": "string"
          },
          "updatedBy": {
            "type": "number"
          },
          "settings": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionSettings"
              }
            ]
          },
          "_version": {
            "type": "number"
          },
          "creatorID": {
            "type": "number"
          },
          "projectID": {
            "type": "string"
          },
          "manualSave": {
            "type": "boolean"
          },
          "publishedAt": {
            "nullable": true,
            "type": "string"
          },
          "platformData": {
            "$ref": "#/components/schemas/VersionPlatformData"
          },
          "customBlocks": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/VersionCustomBlock"
            }
          },
          "rootDiagramID": {
            "type": "string"
          },
          "canvasTemplates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VersionCanvasTemplate"
            }
          },
          "programResources": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionProgramResources"
              }
            ]
          },
          "templateDiagramID": {
            "type": "string"
          },
          "defaultStepColors": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "autoSaveFromRestore": {
            "type": "boolean"
          },
          "notes": {
            "description": "@deprecated not used",
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/VersionNote"
            }
          },
          "topics": {
            "description": "@deprecated in favor of domains",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VersionFolderItem"
            }
          },
          "folders": {
            "description": "@deprecated not used",
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/VersionFolder"
            }
          },
          "domains": {
            "description": "@deprecated not used",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VersionDomain"
            }
          },
          "prototype": {
            "description": "@deprecated prefer adding version-level compiled artifacts to `programResources",
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionPrototype"
              }
            ]
          },
          "components": {
            "description": "@deprecated not used",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VersionFolderItem"
            }
          },
          "variables": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "@deprecated not used"
          },
          "knowledgeBase": {
            "description": "@deprecated not used",
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionKnowledgeBase"
              }
            ]
          },
          "secondaryVersionID": {
            "description": "@deprecated in favor of legacyID",
            "type": "number"
          }
        },
        "required": [
          "_id",
          "name",
          "_version",
          "creatorID",
          "projectID",
          "platformData",
          "rootDiagramID",
          "variables"
        ]
      },
      "VersionModel": {
        "type": "object",
        "properties": {
          "modelID": {
            "type": "string"
          }
        }
      },
      "VersionSettings": {
        "type": "object",
        "properties": {
          "ui": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionSettingsUI"
              }
            ]
          },
          "llm": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionSettingsLLM"
              }
            ]
          },
          "time": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionSettingsTime"
              }
            ]
          },
          "voice": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionSettingsVoice"
              }
            ]
          },
          "widget": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WidgetSettings"
              }
            ]
          },
          "memory": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionSettingsMemory"
              }
            ]
          },
          "session": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionSettingsSession"
              }
            ]
          },
          "security": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionSettingsSecurity"
              }
            ]
          },
          "framework": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionSettingsFramework"
              }
            ]
          },
          "analytics": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionSettingsAnalytics"
              }
            ]
          },
          "costControl": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionSettingsCostControl"
              }
            ]
          },
          "globalCrew": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionSettingsGlobalCrew"
              }
            ]
          },
          "llmFallback": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LLMFallbackSettings"
              }
            ]
          },
          "globalNoReply": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionSettingsGlobalNoReply"
              }
            ]
          },
          "globalNoMatch": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionSettingsGlobalNoMatch"
              }
            ]
          },
          "shareableLink": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionSettingsShareableLink"
              }
            ]
          },
          "automaticReprompt": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionSettingsAutomaticReprompt"
              }
            ]
          },
          "intentClassification": {
            "$ref": "#/components/schemas/IntentClassificationSettings"
          }
        },
        "required": [
          "intentClassification"
        ]
      },
      "VersionSettingsUI": {
        "type": "object",
        "properties": {
          "transcripts": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionSettingsUITranscripts"
              }
            ]
          },
          "analytics": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionSettingsUIAnalytics"
              }
            ]
          }
        }
      },
      "VersionSettingsUITranscripts": {
        "type": "object",
        "properties": {
          "sectionsOrderIDs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "VersionSettingsUIAnalytics": {
        "type": "object",
        "properties": {
          "sectionsOrderIDs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "VersionSettingsLLM": {
        "type": "object",
        "properties": {
          "globalPrompts": {
            "type": "object",
            "properties": {
              "persona": {
                "nullable": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/Markup"
                  }
                ]
              },
              "guidelines": {
                "nullable": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/Markup"
                  }
                ]
              }
            }
          },
          "defaultModels": {
            "type": "object",
            "properties": {
              "global": {
                "type": "object",
                "properties": {
                  "model": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/AIModel"
                      }
                    ]
                  },
                  "maxTokens": {
                    "type": "number"
                  },
                  "temperature": {
                    "type": "number"
                  },
                  "reasoningEffort": {
                    "nullable": true,
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/AIReasoningEffort"
                      }
                    ]
                  }
                }
              }
            }
          },
          "globalAgentID": {
            "description": "@deprecated Use globalCrew.agentID instead",
            "type": "string"
          },
          "priorityProcessing": {
            "type": "boolean"
          }
        }
      },
      "VersionSettingsTime": {
        "type": "object",
        "properties": {
          "timezone": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/Timezone"
              }
            ]
          }
        }
      },
      "Timezone": {
        "type": "string",
        "enum": [
          "Africa/Abidjan",
          "Africa/Accra",
          "Africa/Addis_Ababa",
          "Africa/Algiers",
          "Africa/Asmera",
          "Africa/Bamako",
          "Africa/Bangui",
          "Africa/Banjul",
          "Africa/Bissau",
          "Africa/Blantyre",
          "Africa/Brazzaville",
          "Africa/Bujumbura",
          "Africa/Cairo",
          "Africa/Casablanca",
          "Africa/Ceuta",
          "Africa/Conakry",
          "Africa/Dakar",
          "Africa/Dar_es_Salaam",
          "Africa/Djibouti",
          "Africa/Douala",
          "Africa/El_Aaiun",
          "Africa/Freetown",
          "Africa/Gaborone",
          "Africa/Harare",
          "Africa/Johannesburg",
          "Africa/Juba",
          "Africa/Kampala",
          "Africa/Khartoum",
          "Africa/Kigali",
          "Africa/Kinshasa",
          "Africa/Lagos",
          "Africa/Libreville",
          "Africa/Lome",
          "Africa/Luanda",
          "Africa/Lubumbashi",
          "Africa/Lusaka",
          "Africa/Malabo",
          "Africa/Maputo",
          "Africa/Maseru",
          "Africa/Mbabane",
          "Africa/Mogadishu",
          "Africa/Monrovia",
          "Africa/Nairobi",
          "Africa/Ndjamena",
          "Africa/Niamey",
          "Africa/Nouakchott",
          "Africa/Ouagadougou",
          "Africa/Porto-Novo",
          "Africa/Sao_Tome",
          "Africa/Tripoli",
          "Africa/Tunis",
          "Africa/Windhoek",
          "America/Adak",
          "America/Anchorage",
          "America/Anguilla",
          "America/Antigua",
          "America/Araguaina",
          "America/Argentina/Buenos_Aires",
          "America/Argentina/Catamarca",
          "America/Argentina/Cordoba",
          "America/Argentina/Jujuy",
          "America/Argentina/La_Rioja",
          "America/Argentina/Mendoza",
          "America/Argentina/Rio_Gallegos",
          "America/Argentina/Salta",
          "America/Argentina/San_Juan",
          "America/Argentina/San_Luis",
          "America/Argentina/Tucuman",
          "America/Argentina/Ushuaia",
          "America/Aruba",
          "America/Asuncion",
          "America/Atikokan",
          "America/Bahia",
          "America/Bahia_Banderas",
          "America/Barbados",
          "America/Belem",
          "America/Belize",
          "America/Blanc-Sablon",
          "America/Boa_Vista",
          "America/Bogota",
          "America/Boise",
          "America/Cambridge_Bay",
          "America/Campo_Grande",
          "America/Cancun",
          "America/Caracas",
          "America/Cayenne",
          "America/Cayman",
          "America/Chicago",
          "America/Chihuahua",
          "America/Ciudad_Juarez",
          "America/Costa_Rica",
          "America/Creston",
          "America/Cuiaba",
          "America/Curacao",
          "America/Danmarkshavn",
          "America/Dawson",
          "America/Dawson_Creek",
          "America/Denver",
          "America/Detroit",
          "America/Dominica",
          "America/Edmonton",
          "America/Eirunepe",
          "America/El_Salvador",
          "America/Fort_Nelson",
          "America/Fortaleza",
          "America/Glace_Bay",
          "America/Goose_Bay",
          "America/Grand_Turk",
          "America/Grenada",
          "America/Guadeloupe",
          "America/Guatemala",
          "America/Guayaquil",
          "America/Guyana",
          "America/Halifax",
          "America/Havana",
          "America/Hermosillo",
          "America/Indiana/Indianapolis",
          "America/Indiana/Knox",
          "America/Indiana/Marengo",
          "America/Indiana/Petersburg",
          "America/Indiana/Tell_City",
          "America/Indiana/Vevay",
          "America/Indiana/Vincennes",
          "America/Indiana/Winamac",
          "America/Inuvik",
          "America/Iqaluit",
          "America/Jamaica",
          "America/Juneau",
          "America/Kentucky/Louisville",
          "America/Kentucky/Monticello",
          "America/Kralendijk",
          "America/La_Paz",
          "America/Lima",
          "America/Los_Angeles",
          "America/Lower_Princes",
          "America/Maceio",
          "America/Managua",
          "America/Manaus",
          "America/Marigot",
          "America/Martinique",
          "America/Matamoros",
          "America/Mazatlan",
          "America/Menominee",
          "America/Merida",
          "America/Metlakatla",
          "America/Mexico_City",
          "America/Miquelon",
          "America/Moncton",
          "America/Monterrey",
          "America/Montevideo",
          "America/Montserrat",
          "America/Nassau",
          "America/New_York",
          "America/Nipigon",
          "America/Nome",
          "America/Noronha",
          "America/North_Dakota/Beulah",
          "America/North_Dakota/Center",
          "America/North_Dakota/New_Salem",
          "America/Nuuk",
          "America/Ojinaga",
          "America/Panama",
          "America/Pangnirtung",
          "America/Paramaribo",
          "America/Phoenix",
          "America/Port-au-Prince",
          "America/Port_of_Spain",
          "America/Porto_Velho",
          "America/Puerto_Rico",
          "America/Punta_Arenas",
          "America/Rainy_River",
          "America/Rankin_Inlet",
          "America/Recife",
          "America/Regina",
          "America/Resolute",
          "America/Rio_Branco",
          "America/Santarem",
          "America/Santiago",
          "America/Santo_Domingo",
          "America/Sao_Paulo",
          "America/Scoresbysund",
          "America/Sitka",
          "America/St_Barthelemy",
          "America/St_Johns",
          "America/St_Kitts",
          "America/St_Lucia",
          "America/St_Thomas",
          "America/St_Vincent",
          "America/Swift_Current",
          "America/Tegucigalpa",
          "America/Thule",
          "America/Thunder_Bay",
          "America/Tijuana",
          "America/Toronto",
          "America/Tortola",
          "America/Vancouver",
          "America/Whitehorse",
          "America/Winnipeg",
          "America/Yakutat",
          "America/Yellowknife",
          "Antarctica/Casey",
          "Antarctica/Davis",
          "Antarctica/DumontDUrville",
          "Antarctica/Macquarie",
          "Antarctica/Mawson",
          "Antarctica/McMurdo",
          "Antarctica/Palmer",
          "Antarctica/Rothera",
          "Antarctica/Syowa",
          "Antarctica/Troll",
          "Antarctica/Vostok",
          "Arctic/Longyearbyen",
          "Asia/Aden",
          "Asia/Almaty",
          "Asia/Amman",
          "Asia/Anadyr",
          "Asia/Aqtau",
          "Asia/Aqtobe",
          "Asia/Ashgabat",
          "Asia/Atyrau",
          "Asia/Baghdad",
          "Asia/Bahrain",
          "Asia/Baku",
          "Asia/Bangkok",
          "Asia/Barnaul",
          "Asia/Beirut",
          "Asia/Bishkek",
          "Asia/Brunei",
          "Asia/Chita",
          "Asia/Choibalsan",
          "Asia/Colombo",
          "Asia/Damascus",
          "Asia/Dhaka",
          "Asia/Dili",
          "Asia/Dubai",
          "Asia/Dushanbe",
          "Asia/Famagusta",
          "Asia/Gaza",
          "Asia/Hebron",
          "Asia/Ho_Chi_Minh",
          "Asia/Hong_Kong",
          "Asia/Hovd",
          "Asia/Irkutsk",
          "Asia/Jakarta",
          "Asia/Jayapura",
          "Asia/Jerusalem",
          "Asia/Kabul",
          "Asia/Kamchatka",
          "Asia/Karachi",
          "Asia/Kathmandu",
          "Asia/Khandyga",
          "Asia/Kolkata",
          "Asia/Krasnoyarsk",
          "Asia/Kuala_Lumpur",
          "Asia/Kuching",
          "Asia/Kuwait",
          "Asia/Macau",
          "Asia/Magadan",
          "Asia/Makassar",
          "Asia/Manila",
          "Asia/Muscat",
          "Asia/Nicosia",
          "Asia/Novokuznetsk",
          "Asia/Novosibirsk",
          "Asia/Omsk",
          "Asia/Oral",
          "Asia/Phnom_Penh",
          "Asia/Pontianak",
          "Asia/Pyongyang",
          "Asia/Qatar",
          "Asia/Qostanay",
          "Asia/Qyzylorda",
          "Asia/Riyadh",
          "Asia/Sakhalin",
          "Asia/Samarkand",
          "Asia/Seoul",
          "Asia/Shanghai",
          "Asia/Singapore",
          "Asia/Srednekolymsk",
          "Asia/Taipei",
          "Asia/Tashkent",
          "Asia/Tbilisi",
          "Asia/Tehran",
          "Asia/Thimphu",
          "Asia/Tokyo",
          "Asia/Tomsk",
          "Asia/Ulaanbaatar",
          "Asia/Urumqi",
          "Asia/Ust-Nera",
          "Asia/Vientiane",
          "Asia/Vladivostok",
          "Asia/Yakutsk",
          "Asia/Yangon",
          "Asia/Yekaterinburg",
          "Asia/Yerevan",
          "Atlantic/Azores",
          "Atlantic/Bermuda",
          "Atlantic/Canary",
          "Atlantic/Cape_Verde",
          "Atlantic/Faroe",
          "Atlantic/Madeira",
          "Atlantic/Reykjavik",
          "Atlantic/South_Georgia",
          "Atlantic/St_Helena",
          "Atlantic/Stanley",
          "Australia/Adelaide",
          "Australia/Brisbane",
          "Australia/Broken_Hill",
          "Australia/Darwin",
          "Australia/Eucla",
          "Australia/Hobart",
          "Australia/Lindeman",
          "Australia/Lord_Howe",
          "Australia/Melbourne",
          "Australia/Perth",
          "Australia/Sydney",
          "Europe/Amsterdam",
          "Europe/Andorra",
          "Europe/Astrakhan",
          "Europe/Athens",
          "Europe/Belgrade",
          "Europe/Berlin",
          "Europe/Bratislava",
          "Europe/Brussels",
          "Europe/Bucharest",
          "Europe/Budapest",
          "Europe/Busingen",
          "Europe/Chisinau",
          "Europe/Copenhagen",
          "Europe/Dublin",
          "Europe/Gibraltar",
          "Europe/Guernsey",
          "Europe/Helsinki",
          "Europe/Isle_of_Man",
          "Europe/Istanbul",
          "Europe/Jersey",
          "Europe/Kaliningrad",
          "Europe/Kyiv",
          "Europe/Kirov",
          "Europe/Lisbon",
          "Europe/Ljubljana",
          "Europe/London",
          "Europe/Luxembourg",
          "Europe/Madrid",
          "Europe/Malta",
          "Europe/Mariehamn",
          "Europe/Minsk",
          "Europe/Monaco",
          "Europe/Moscow",
          "Europe/Oslo",
          "Europe/Paris",
          "Europe/Podgorica",
          "Europe/Prague",
          "Europe/Riga",
          "Europe/Rome",
          "Europe/Samara",
          "Europe/San_Marino",
          "Europe/Sarajevo",
          "Europe/Saratov",
          "Europe/Simferopol",
          "Europe/Skopje",
          "Europe/Sofia",
          "Europe/Stockholm",
          "Europe/Tallinn",
          "Europe/Tirane",
          "Europe/Ulyanovsk",
          "Europe/Uzhgorod",
          "Europe/Vaduz",
          "Europe/Vatican",
          "Europe/Vienna",
          "Europe/Vilnius",
          "Europe/Volgograd",
          "Europe/Warsaw",
          "Europe/Zagreb",
          "Europe/Zaporozhye",
          "Europe/Zurich",
          "Indian/Antananarivo",
          "Indian/Chagos",
          "Indian/Christmas",
          "Indian/Cocos",
          "Indian/Comoro",
          "Indian/Kerguelen",
          "Indian/Mahe",
          "Indian/Maldives",
          "Indian/Mauritius",
          "Indian/Mayotte",
          "Indian/Reunion",
          "Pacific/Apia",
          "Pacific/Auckland",
          "Pacific/Bougainville",
          "Pacific/Chatham",
          "Pacific/Chuuk",
          "Pacific/Easter",
          "Pacific/Efate",
          "Pacific/Enderbury",
          "Pacific/Fakaofo",
          "Pacific/Fiji",
          "Pacific/Funafuti",
          "Pacific/Galapagos",
          "Pacific/Gambier",
          "Pacific/Guadalcanal",
          "Pacific/Guam",
          "Pacific/Honolulu",
          "Pacific/Kiritimati",
          "Pacific/Kosrae",
          "Pacific/Kwajalein",
          "Pacific/Majuro",
          "Pacific/Marquesas",
          "Pacific/Midway",
          "Pacific/Nauru",
          "Pacific/Niue",
          "Pacific/Norfolk",
          "Pacific/Noumea",
          "Pacific/Pago_Pago",
          "Pacific/Palau",
          "Pacific/Pitcairn",
          "Pacific/Pohnpei",
          "Pacific/Port_Moresby",
          "Pacific/Rarotonga",
          "Pacific/Saipan",
          "Pacific/Tahiti",
          "Pacific/Tarawa",
          "Pacific/Tongatapu",
          "Pacific/Wake",
          "Pacific/Wallis",
          "UTC"
        ],
        "x-enumNames": [
          "AFRICA_ABIDJAN",
          "AFRICA_ACCRA",
          "AFRICA_ADDIS_ABABA",
          "AFRICA_ALGIERS",
          "AFRICA_ASMERA",
          "AFRICA_BAMAKO",
          "AFRICA_BANGUI",
          "AFRICA_BANJUL",
          "AFRICA_BISSAU",
          "AFRICA_BLANTYRE",
          "AFRICA_BRAZZAVILLE",
          "AFRICA_BUJUMBURA",
          "AFRICA_CAIRO",
          "AFRICA_CASABLANCA",
          "AFRICA_CEUTA",
          "AFRICA_CONAKRY",
          "AFRICA_DAKAR",
          "AFRICA_DAR_ES_SALAAM",
          "AFRICA_DJIBOUTI",
          "AFRICA_DOUALA",
          "AFRICA_EL_AAIUN",
          "AFRICA_FREETOWN",
          "AFRICA_GABORONE",
          "AFRICA_HARARE",
          "AFRICA_JOHANNESBURG",
          "AFRICA_JUBA",
          "AFRICA_KAMPALA",
          "AFRICA_KHARTOUM",
          "AFRICA_KIGALI",
          "AFRICA_KINSHASA",
          "AFRICA_LAGOS",
          "AFRICA_LIBREVILLE",
          "AFRICA_LOME",
          "AFRICA_LUANDA",
          "AFRICA_LUBUMBASHI",
          "AFRICA_LUSAKA",
          "AFRICA_MALABO",
          "AFRICA_MAPUTO",
          "AFRICA_MASERU",
          "AFRICA_MBABANE",
          "AFRICA_MOGADISHU",
          "AFRICA_MONROVIA",
          "AFRICA_NAIROBI",
          "AFRICA_NDJAMENA",
          "AFRICA_NIAMEY",
          "AFRICA_NOUAKCHOTT",
          "AFRICA_OUAGADOUGOU",
          "AFRICA_PORTO_NOVO",
          "AFRICA_SAO_TOME",
          "AFRICA_TRIPOLI",
          "AFRICA_TUNIS",
          "AFRICA_WINDHOEK",
          "AMERICA_ADAK",
          "AMERICA_ANCHORAGE",
          "AMERICA_ANGUILLA",
          "AMERICA_ANTIGUA",
          "AMERICA_ARAGUAINA",
          "AMERICA_ARGENTINA_BUENOS_AIRES",
          "AMERICA_ARGENTINA_CATAMARCA",
          "AMERICA_ARGENTINA_CORDOBA",
          "AMERICA_ARGENTINA_JUJUY",
          "AMERICA_ARGENTINA_LA_RIOJA",
          "AMERICA_ARGENTINA_MENDOZA",
          "AMERICA_ARGENTINA_RIO_GALLEGOS",
          "AMERICA_ARGENTINA_SALTA",
          "AMERICA_ARGENTINA_SAN_JUAN",
          "AMERICA_ARGENTINA_SAN_LUIS",
          "AMERICA_ARGENTINA_TUCUMAN",
          "AMERICA_ARGENTINA_USHUAIA",
          "AMERICA_ARUBA",
          "AMERICA_ASUNCION",
          "AMERICA_ATIKOKAN",
          "AMERICA_BAHIA",
          "AMERICA_BAHIA_BANDERAS",
          "AMERICA_BARBADOS",
          "AMERICA_BELEM",
          "AMERICA_BELIZE",
          "AMERICA_BLANC_SABLON",
          "AMERICA_BOA_VISTA",
          "AMERICA_BOGOTA",
          "AMERICA_BOISE",
          "AMERICA_CAMBRIDGE_BAY",
          "AMERICA_CAMPO_GRANDE",
          "AMERICA_CANCUN",
          "AMERICA_CARACAS",
          "AMERICA_CAYENNE",
          "AMERICA_CAYMAN",
          "AMERICA_CHICAGO",
          "AMERICA_CHIHUAHUA",
          "AMERICA_CIUDAD_JUAREZ",
          "AMERICA_COSTA_RICA",
          "AMERICA_CRESTON",
          "AMERICA_CUIABA",
          "AMERICA_CURACAO",
          "AMERICA_DANMARKSHAVN",
          "AMERICA_DAWSON",
          "AMERICA_DAWSON_CREEK",
          "AMERICA_DENVER",
          "AMERICA_DETROIT",
          "AMERICA_DOMINICA",
          "AMERICA_EDMONTON",
          "AMERICA_EIRUNEPE",
          "AMERICA_EL_SALVADOR",
          "AMERICA_FORT_NELSON",
          "AMERICA_FORTALEZA",
          "AMERICA_GLACE_BAY",
          "AMERICA_GOOSE_BAY",
          "AMERICA_GRAND_TURK",
          "AMERICA_GRENADA",
          "AMERICA_GUADELOUPE",
          "AMERICA_GUATEMALA",
          "AMERICA_GUAYAQUIL",
          "AMERICA_GUYANA",
          "AMERICA_HALIFAX",
          "AMERICA_HAVANA",
          "AMERICA_HERMOSILLO",
          "AMERICA_INDIANA_INDIANAPOLIS",
          "AMERICA_INDIANA_KNOX",
          "AMERICA_INDIANA_MARENGO",
          "AMERICA_INDIANA_PETERSBURG",
          "AMERICA_INDIANA_TELL_CITY",
          "AMERICA_INDIANA_VEVAY",
          "AMERICA_INDIANA_VINCENNES",
          "AMERICA_INDIANA_WINAMAC",
          "AMERICA_INUVIK",
          "AMERICA_IQALUIT",
          "AMERICA_JAMAICA",
          "AMERICA_JUNEAU",
          "AMERICA_KENTUCKY_LOUISVILLE",
          "AMERICA_KENTUCKY_MONTICELLO",
          "AMERICA_KRALENDIJK",
          "AMERICA_LA_PAZ",
          "AMERICA_LIMA",
          "AMERICA_LOS_ANGELES",
          "AMERICA_LOWER_PRINCES",
          "AMERICA_MACEIO",
          "AMERICA_MANAGUA",
          "AMERICA_MANAUS",
          "AMERICA_MARIGOT",
          "AMERICA_MARTINIQUE",
          "AMERICA_MATAMOROS",
          "AMERICA_MAZATLAN",
          "AMERICA_MENOMINEE",
          "AMERICA_MERIDA",
          "AMERICA_METLAKATLA",
          "AMERICA_MEXICO_CITY",
          "AMERICA_MIQUELON",
          "AMERICA_MONCTON",
          "AMERICA_MONTERREY",
          "AMERICA_MONTEVIDEO",
          "AMERICA_MONTSERRAT",
          "AMERICA_NASSAU",
          "AMERICA_NEW_YORK",
          "AMERICA_NIPIGON",
          "AMERICA_NOME",
          "AMERICA_NORONHA",
          "AMERICA_NORTH_DAKOTA_BEULAH",
          "AMERICA_NORTH_DAKOTA_CENTER",
          "AMERICA_NORTH_DAKOTA_NEW_SALEM",
          "AMERICA_NUUK",
          "AMERICA_OJINAGA",
          "AMERICA_PANAMA",
          "AMERICA_PANGNIRTUNG",
          "AMERICA_PARAMARIBO",
          "AMERICA_PHOENIX",
          "AMERICA_PORT_AU_PRINCE",
          "AMERICA_PORT_OF_SPAIN",
          "AMERICA_PORTO_VELHO",
          "AMERICA_PUERTO_RICO",
          "AMERICA_PUNTA_ARENAS",
          "AMERICA_RAINY_RIVER",
          "AMERICA_RANKIN_INLET",
          "AMERICA_RECIFE",
          "AMERICA_REGINA",
          "AMERICA_RESOLUTE",
          "AMERICA_RIO_BRANCO",
          "AMERICA_SANTAREM",
          "AMERICA_SANTIAGO",
          "AMERICA_SANTO_DOMINGO",
          "AMERICA_SAO_PAULO",
          "AMERICA_SCORESBYSUND",
          "AMERICA_SITKA",
          "AMERICA_ST_BARTHELEMY",
          "AMERICA_ST_JOHNS",
          "AMERICA_ST_KITTS",
          "AMERICA_ST_LUCIA",
          "AMERICA_ST_THOMAS",
          "AMERICA_ST_VINCENT",
          "AMERICA_SWIFT_CURRENT",
          "AMERICA_TEGUCIGALPA",
          "AMERICA_THULE",
          "AMERICA_THUNDER_BAY",
          "AMERICA_TIJUANA",
          "AMERICA_TORONTO",
          "AMERICA_TORTOLA",
          "AMERICA_VANCOUVER",
          "AMERICA_WHITEHORSE",
          "AMERICA_WINNIPEG",
          "AMERICA_YAKUTAT",
          "AMERICA_YELLOWKNIFE",
          "ANTARCTICA_CASEY",
          "ANTARCTICA_DAVIS",
          "ANTARCTICA_DUMONTDURVILLE",
          "ANTARCTICA_MACQUARIE",
          "ANTARCTICA_MAWSON",
          "ANTARCTICA_MCMURDO",
          "ANTARCTICA_PALMER",
          "ANTARCTICA_ROTHERA",
          "ANTARCTICA_SYOWA",
          "ANTARCTICA_TROLL",
          "ANTARCTICA_VOSTOK",
          "ARCTIC_LONGYEARBYEN",
          "ASIA_ADEN",
          "ASIA_ALMATY",
          "ASIA_AMMAN",
          "ASIA_ANADYR",
          "ASIA_AQTAU",
          "ASIA_AQTOBE",
          "ASIA_ASHGABAT",
          "ASIA_ATYRAU",
          "ASIA_BAGHDAD",
          "ASIA_BAHRAIN",
          "ASIA_BAKU",
          "ASIA_BANGKOK",
          "ASIA_BARNAUL",
          "ASIA_BEIRUT",
          "ASIA_BISHKEK",
          "ASIA_BRUNEI",
          "ASIA_CHITA",
          "ASIA_CHOIBALSAN",
          "ASIA_COLOMBO",
          "ASIA_DAMASCUS",
          "ASIA_DHAKA",
          "ASIA_DILI",
          "ASIA_DUBAI",
          "ASIA_DUSHANBE",
          "ASIA_FAMAGUSTA",
          "ASIA_GAZA",
          "ASIA_HEBRON",
          "ASIA_HO_CHI_MINH",
          "ASIA_HONG_KONG",
          "ASIA_HOVD",
          "ASIA_IRKUTSK",
          "ASIA_JAKARTA",
          "ASIA_JAYAPURA",
          "ASIA_JERUSALEM",
          "ASIA_KABUL",
          "ASIA_KAMCHATKA",
          "ASIA_KARACHI",
          "ASIA_KATHMANDU",
          "ASIA_KHANDYGA",
          "ASIA_KOLKATA",
          "ASIA_KRASNOYARSK",
          "ASIA_KUALA_LUMPUR",
          "ASIA_KUCHING",
          "ASIA_KUWAIT",
          "ASIA_MACAU",
          "ASIA_MAGADAN",
          "ASIA_MAKASSAR",
          "ASIA_MANILA",
          "ASIA_MUSCAT",
          "ASIA_NICOSIA",
          "ASIA_NOVOKUZNETSK",
          "ASIA_NOVOSIBIRSK",
          "ASIA_OMSK",
          "ASIA_ORAL",
          "ASIA_PHNOM_PENH",
          "ASIA_PONTIANAK",
          "ASIA_PYONGYANG",
          "ASIA_QATAR",
          "ASIA_QOSTANAY",
          "ASIA_QYZYLORDA",
          "ASIA_RIYADH",
          "ASIA_SAKHALIN",
          "ASIA_SAMARKAND",
          "ASIA_SEOUL",
          "ASIA_SHANGHAI",
          "ASIA_SINGAPORE",
          "ASIA_SREDNEKOLYMSK",
          "ASIA_TAIPEI",
          "ASIA_TASHKENT",
          "ASIA_TBILISI",
          "ASIA_TEHRAN",
          "ASIA_THIMPHU",
          "ASIA_TOKYO",
          "ASIA_TOMSK",
          "ASIA_ULAANBAATAR",
          "ASIA_URUMQI",
          "ASIA_UST_NERA",
          "ASIA_VIENTIANE",
          "ASIA_VLADIVOSTOK",
          "ASIA_YAKUTSK",
          "ASIA_YANGON",
          "ASIA_YEKATERINBURG",
          "ASIA_YEREVAN",
          "ATLANTIC_AZORES",
          "ATLANTIC_BERMUDA",
          "ATLANTIC_CANARY",
          "ATLANTIC_CAPE_VERDE",
          "ATLANTIC_FAROE",
          "ATLANTIC_MADEIRA",
          "ATLANTIC_REYKJAVIK",
          "ATLANTIC_SOUTH_GEORGIA",
          "ATLANTIC_ST_HELENA",
          "ATLANTIC_STANLEY",
          "AUSTRALIA_ADELAIDE",
          "AUSTRALIA_BRISBANE",
          "AUSTRALIA_BROKEN_HILL",
          "AUSTRALIA_DARWIN",
          "AUSTRALIA_EUCLA",
          "AUSTRALIA_HOBART",
          "AUSTRALIA_LINDEMAN",
          "AUSTRALIA_LORD_HOWE",
          "AUSTRALIA_MELBOURNE",
          "AUSTRALIA_PERTH",
          "AUSTRALIA_SYDNEY",
          "EUROPE_AMSTERDAM",
          "EUROPE_ANDORRA",
          "EUROPE_ASTRAKHAN",
          "EUROPE_ATHENS",
          "EUROPE_BELGRADE",
          "EUROPE_BERLIN",
          "EUROPE_BRATISLAVA",
          "EUROPE_BRUSSELS",
          "EUROPE_BUCHAREST",
          "EUROPE_BUDAPEST",
          "EUROPE_BUSINGEN",
          "EUROPE_CHISINAU",
          "EUROPE_COPENHAGEN",
          "EUROPE_DUBLIN",
          "EUROPE_GIBRALTAR",
          "EUROPE_GUERNSEY",
          "EUROPE_HELSINKI",
          "EUROPE_ISLE_OF_MAN",
          "EUROPE_ISTANBUL",
          "EUROPE_JERSEY",
          "EUROPE_KALININGRAD",
          "EUROPE_KYIV",
          "EUROPE_KIROV",
          "EUROPE_LISBON",
          "EUROPE_LJUBLJANA",
          "EUROPE_LONDON",
          "EUROPE_LUXEMBOURG",
          "EUROPE_MADRID",
          "EUROPE_MALTA",
          "EUROPE_MARIEHAMN",
          "EUROPE_MINSK",
          "EUROPE_MONACO",
          "EUROPE_MOSCOW",
          "EUROPE_OSLO",
          "EUROPE_PARIS",
          "EUROPE_PODGORICA",
          "EUROPE_PRAGUE",
          "EUROPE_RIGA",
          "EUROPE_ROME",
          "EUROPE_SAMARA",
          "EUROPE_SAN_MARINO",
          "EUROPE_SARAJEVO",
          "EUROPE_SARATOV",
          "EUROPE_SIMFEROPOL",
          "EUROPE_SKOPJE",
          "EUROPE_SOFIA",
          "EUROPE_STOCKHOLM",
          "EUROPE_TALLINN",
          "EUROPE_TIRANE",
          "EUROPE_ULYANOVSK",
          "EUROPE_UZHGOROD",
          "EUROPE_VADUZ",
          "EUROPE_VATICAN",
          "EUROPE_VIENNA",
          "EUROPE_VILNIUS",
          "EUROPE_VOLGOGRAD",
          "EUROPE_WARSAW",
          "EUROPE_ZAGREB",
          "EUROPE_ZAPOROZHYE",
          "EUROPE_ZURICH",
          "INDIAN_ANTANANARIVO",
          "INDIAN_CHAGOS",
          "INDIAN_CHRISTMAS",
          "INDIAN_COCOS",
          "INDIAN_COMORO",
          "INDIAN_KERGUELEN",
          "INDIAN_MAHE",
          "INDIAN_MALDIVES",
          "INDIAN_MAURITIUS",
          "INDIAN_MAYOTTE",
          "INDIAN_REUNION",
          "PACIFIC_APIA",
          "PACIFIC_AUCKLAND",
          "PACIFIC_BOUGAINVILLE",
          "PACIFIC_CHATHAM",
          "PACIFIC_CHUUK",
          "PACIFIC_EASTER",
          "PACIFIC_EFATE",
          "PACIFIC_ENDERBURY",
          "PACIFIC_FAKAOFO",
          "PACIFIC_FIJI",
          "PACIFIC_FUNAFUTI",
          "PACIFIC_GALAPAGOS",
          "PACIFIC_GAMBIER",
          "PACIFIC_GUADALCANAL",
          "PACIFIC_GUAM",
          "PACIFIC_HONOLULU",
          "PACIFIC_KIRITIMATI",
          "PACIFIC_KOSRAE",
          "PACIFIC_KWAJALEIN",
          "PACIFIC_MAJURO",
          "PACIFIC_MARQUESAS",
          "PACIFIC_MIDWAY",
          "PACIFIC_NAURU",
          "PACIFIC_NIUE",
          "PACIFIC_NORFOLK",
          "PACIFIC_NOUMEA",
          "PACIFIC_PAGO_PAGO",
          "PACIFIC_PALAU",
          "PACIFIC_PITCAIRN",
          "PACIFIC_POHNPEI",
          "PACIFIC_PORT_MORESBY",
          "PACIFIC_RAROTONGA",
          "PACIFIC_SAIPAN",
          "PACIFIC_TAHITI",
          "PACIFIC_TARAWA",
          "PACIFIC_TONGATAPU",
          "PACIFIC_WAKE",
          "PACIFIC_WALLIS",
          "UTC"
        ]
      },
      "VersionSettingsVoice": {
        "type": "object",
        "properties": {
          "stt": {
            "allOf": [
              {
                "$ref": "#/components/schemas/STTSettings"
              }
            ]
          },
          "tts": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VoiceSettings"
              }
            ]
          },
          "pronunciationDictionary": {
            "maxItems": 500,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PronunciationDictionaryEntry"
            }
          },
          "failureMessage": {
            "nullable": true,
            "type": "string"
          },
          "hasCallRecording": {
            "default": true,
            "type": "boolean"
          },
          "audioCue": {
            "nullable": true,
            "type": "number"
          },
          "backgroundAudio": {
            "nullable": true,
            "type": "string"
          },
          "backgroundAudioSettings": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BackgroundAudioSettings"
              }
            ]
          },
          "audioSync": {
            "type": "boolean"
          },
          "keypadInput": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VoiceKeypadSettings"
              }
            ]
          },
          "silenceTimeoutMs": {
            "type": "number"
          },
          "maxDuration": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VoiceMaxDurationSettings"
              }
            ]
          }
        }
      },
      "STTSettings": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/ElevenLabsSTTSettings"
          },
          {
            "$ref": "#/components/schemas/DeepgramSTTSettings"
          },
          {
            "$ref": "#/components/schemas/AssemblyAISTTSettings"
          },
          {
            "$ref": "#/components/schemas/CartesiaSTTSettings"
          },
          {
            "$ref": "#/components/schemas/GladiaSTTSettings"
          },
          {
            "$ref": "#/components/schemas/GoogleSTTSettings"
          },
          {
            "$ref": "#/components/schemas/SonioxSTTSettings"
          }
        ]
      },
      "ElevenLabsSTTSettings": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "elevenlabs"
            ],
            "x-enumNames": [
              "ELEVENLABS"
            ]
          },
          "model": {
            "$ref": "#/components/schemas/ElevenLabsSTTModel"
          },
          "language": {
            "$ref": "#/components/schemas/ElevenLabsSTTLanguage"
          },
          "commitStrategy": {
            "type": "string",
            "enum": [
              "vad",
              "manual"
            ],
            "x-enumNames": [
              "VAD",
              "MANUAL"
            ]
          },
          "vadSilenceThresholdSecs": {
            "type": "number",
            "minimum": 0.3,
            "maximum": 3
          },
          "vadThreshold": {
            "type": "number",
            "minimum": 0.1,
            "maximum": 0.9
          },
          "minSpeechDurationMS": {
            "type": "number",
            "minimum": 50,
            "maximum": 2000
          },
          "minSilenceDurationMS": {
            "type": "number",
            "minimum": 50,
            "maximum": 2000
          }
        },
        "required": [
          "provider",
          "model",
          "language"
        ]
      },
      "ElevenLabsSTTModel": {
        "type": "string",
        "enum": [
          "scribe_v2_realtime"
        ],
        "x-enumNames": [
          "SCRIBE_V_2_REALTIME"
        ]
      },
      "ElevenLabsSTTLanguage": {
        "type": "string",
        "enum": [
          "afr",
          "amh",
          "ara",
          "hye",
          "asm",
          "ast",
          "aze",
          "bel",
          "ben",
          "bos",
          "bul",
          "mya",
          "yue",
          "cat",
          "ceb",
          "nya",
          "hrv",
          "ces",
          "dan",
          "nld",
          "eng",
          "est",
          "fil",
          "fin",
          "fra",
          "ful",
          "glg",
          "lug",
          "kat",
          "deu",
          "ell",
          "guj",
          "hau",
          "heb",
          "hin",
          "hun",
          "isl",
          "ibo",
          "ind",
          "gle",
          "ita",
          "jpn",
          "jav",
          "kea",
          "kan",
          "kaz",
          "khm",
          "kor",
          "kur",
          "kir",
          "lao",
          "lav",
          "lin",
          "lit",
          "luo",
          "ltz",
          "mkd",
          "msa",
          "mal",
          "mlt",
          "zho",
          "mri",
          "mar",
          "mon",
          "nep",
          "nso",
          "nor",
          "oci",
          "ori",
          "pus",
          "fas",
          "pol",
          "por",
          "pan",
          "ron",
          "rus",
          "srp",
          "sna",
          "snd",
          "slk",
          "slv",
          "som",
          "spa",
          "swa",
          "swe",
          "tam",
          "tgk",
          "tel",
          "tha",
          "tur",
          "ukr",
          "umb",
          "urd",
          "uzb",
          "vie",
          "cym",
          "wol",
          "xho",
          "zul"
        ],
        "x-enumNames": [
          "AFRIKAANS",
          "AMHARIC",
          "ARABIC",
          "ARMENIAN",
          "ASSAMESE",
          "ASTURIAN",
          "AZERBAIJANI",
          "BELARUSIAN",
          "BENGALI",
          "BOSNIAN",
          "BULGARIAN",
          "BURMESE",
          "CANTONESE",
          "CATALAN",
          "CEBUANO",
          "CHICHEWA",
          "CROATIAN",
          "CZECH",
          "DANISH",
          "DUTCH",
          "ENGLISH",
          "ESTONIAN",
          "FILIPINO",
          "FINNISH",
          "FRENCH",
          "FULAH",
          "GALICIAN",
          "GANDA",
          "GEORGIAN",
          "GERMAN",
          "GREEK",
          "GUJARATI",
          "HAUSA",
          "HEBREW",
          "HINDI",
          "HUNGARIAN",
          "ICELANDIC",
          "IGBO",
          "INDONESIAN",
          "IRISH",
          "ITALIAN",
          "JAPANESE",
          "JAVANESE",
          "KABUVERDIANU",
          "KANNADA",
          "KAZAKH",
          "KHMER",
          "KOREAN",
          "KURDISH",
          "KYRGYZ",
          "LAO",
          "LATVIAN",
          "LINGALA",
          "LITHUANIAN",
          "LUO",
          "LUXEMBOURGISH",
          "MACEDONIAN",
          "MALAY",
          "MALAYALAM",
          "MALTESE",
          "MANDARIN_CHINESE",
          "MAORI",
          "MARATHI",
          "MONGOLIAN",
          "NEPALI",
          "NORTHERN_SOTHO",
          "NORWEGIAN",
          "OCCITAN",
          "ODIA",
          "PASHTO",
          "PERSIAN",
          "POLISH",
          "PORTUGUESE",
          "PUNJABI",
          "ROMANIAN",
          "RUSSIAN",
          "SERBIAN",
          "SHONA",
          "SINDHI",
          "SLOVAK",
          "SLOVENIAN",
          "SOMALI",
          "SPANISH",
          "SWAHILI",
          "SWEDISH",
          "TAMIL",
          "TAJIK",
          "TELUGU",
          "THAI",
          "TURKISH",
          "UKRAINIAN",
          "UMBUNDU",
          "URDU",
          "UZBEK",
          "VIETNAMESE",
          "WELSH",
          "WOLOF",
          "XHOSA",
          "ZULU"
        ]
      },
      "DeepgramSTTSettings": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "deepgram"
            ],
            "x-enumNames": [
              "DEEPGRAM"
            ]
          },
          "model": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DeepgramSTTModel"
              }
            ]
          },
          "locale": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DeepgramSTTLanguage"
              }
            ]
          },
          "keywords": {
            "type": "string"
          },
          "partialWaitMS": {
            "type": "number"
          },
          "silenceWaitMS": {
            "type": "number"
          },
          "punctuationWaitMS": {
            "type": "number"
          },
          "interruptionWaitWords": {
            "type": "number"
          },
          "EOTTimeout": {
            "type": "number"
          },
          "EOTThreshold": {
            "type": "number"
          },
          "languageHints": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeepgramSTTLanguage"
            }
          }
        },
        "required": [
          "provider"
        ]
      },
      "DeepgramSTTModel": {
        "type": "string",
        "enum": [
          "nova-2",
          "nova-3",
          "nova-3-medical",
          "flux"
        ],
        "x-enumNames": [
          "NOVA_2",
          "NOVA_3",
          "NOVA_3_MEDICAL",
          "FLUX"
        ]
      },
      "DeepgramSTTLanguage": {
        "type": "string",
        "enum": [
          "multi",
          "ar",
          "ar-AE",
          "ar-DZ",
          "ar-EG",
          "ar-IQ",
          "ar-IR",
          "ar-JO",
          "ar-KW",
          "ar-LB",
          "ar-MA",
          "ar-PS",
          "ar-QA",
          "ar-SA",
          "ar-SD",
          "ar-SY",
          "ar-TD",
          "ar-TN",
          "be",
          "bg",
          "bn",
          "bs",
          "ca",
          "cs",
          "da",
          "da-DK",
          "de",
          "de-CH",
          "el",
          "en",
          "en-AU",
          "en-GB",
          "en-IN",
          "en-NZ",
          "en-US",
          "es",
          "es-419",
          "et",
          "fa",
          "fi",
          "fr",
          "fr-CA",
          "he",
          "hi",
          "hr",
          "hu",
          "id",
          "it",
          "ja",
          "kn",
          "ko",
          "ko-KR",
          "lt",
          "lv",
          "mk",
          "mr",
          "ms",
          "nl",
          "nl-BE",
          "no",
          "pl",
          "pt",
          "pt-BR",
          "pt-PT",
          "ro",
          "ru",
          "sk",
          "sl",
          "sr",
          "sv",
          "sv-SE",
          "ta",
          "te",
          "th",
          "tl",
          "tr",
          "uk",
          "ur",
          "vi",
          "zh",
          "zh-HK",
          "zh-TW"
        ],
        "x-enumNames": [
          "MULTI",
          "AR",
          "AR_AE",
          "AR_DZ",
          "AR_EG",
          "AR_IQ",
          "AR_IR",
          "AR_JO",
          "AR_KW",
          "AR_LB",
          "AR_MA",
          "AR_PS",
          "AR_QA",
          "AR_SA",
          "AR_SD",
          "AR_SY",
          "AR_TD",
          "AR_TN",
          "BE",
          "BG",
          "BN",
          "BS",
          "CA",
          "CS",
          "DA",
          "DA_DK",
          "DE",
          "DE_CH",
          "EL",
          "EN",
          "EN_AU",
          "EN_GB",
          "EN_IN",
          "EN_NZ",
          "EN_US",
          "ES",
          "ES_419",
          "ET",
          "FA",
          "FI",
          "FR",
          "FR_CA",
          "HE",
          "HI",
          "HR",
          "HU",
          "ID",
          "IT",
          "JA",
          "KN",
          "KO",
          "KO_KR",
          "LT",
          "LV",
          "MK",
          "MR",
          "MS",
          "NL",
          "NL_BE",
          "NO",
          "PL",
          "PT",
          "PT_BR",
          "PT_PT",
          "RO",
          "RU",
          "SK",
          "SL",
          "SR",
          "SV",
          "SV_SE",
          "TA",
          "TE",
          "TH",
          "TL",
          "TR",
          "UK",
          "UR",
          "VI",
          "ZH",
          "ZH_HK",
          "ZH_TW"
        ]
      },
      "AssemblyAISTTSettings": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "assemblyai"
            ],
            "x-enumNames": [
              "ASSEMBLYAI"
            ]
          },
          "model": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AssemblyAISTTModel"
              }
            ]
          },
          "mode": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AssemblyAISTTMode"
              }
            ]
          },
          "language": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AssemblyAISTTLanguage"
              }
            ]
          },
          "keyterms": {
            "type": "string"
          },
          "confidenceThreshold": {
            "default": 0.7,
            "type": "number"
          },
          "maxTurnSilence": {
            "default": 2400,
            "type": "number"
          },
          "minTurnSilence": {
            "default": 160,
            "type": "number"
          }
        },
        "required": [
          "provider"
        ]
      },
      "AssemblyAISTTModel": {
        "type": "string",
        "enum": [
          "universal-streaming-english",
          "universal-3-5-pro"
        ],
        "x-enumNames": [
          "UNIVERSAL_STREAMING_ENGLISH",
          "UNIVERSAL_3_5_PRO"
        ]
      },
      "AssemblyAISTTMode": {
        "type": "string",
        "enum": [
          "min_latency",
          "balanced",
          "max_accuracy"
        ],
        "x-enumNames": [
          "MIN_LATENCY",
          "BALANCED",
          "MAX_ACCURACY"
        ]
      },
      "AssemblyAISTTLanguage": {
        "type": "string",
        "enum": [
          "multi",
          "en",
          "ar",
          "da",
          "nl",
          "fi",
          "fr",
          "de",
          "he",
          "hi",
          "it",
          "ja",
          "zh",
          "no",
          "pt",
          "es",
          "sv",
          "tr",
          "vi"
        ],
        "x-enumNames": [
          "MULTI",
          "ENGLISH",
          "ARABIC",
          "DANISH",
          "DUTCH",
          "FINNISH",
          "FRENCH",
          "GERMAN",
          "HEBREW",
          "HINDI",
          "ITALIAN",
          "JAPANESE",
          "MANDARIN",
          "NORWEGIAN",
          "PORTUGUESE",
          "SPANISH",
          "SWEDISH",
          "TURKISH",
          "VIETNAMESE"
        ]
      },
      "CartesiaSTTSettings": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "cartesia"
            ],
            "x-enumNames": [
              "CARTESIA"
            ]
          },
          "model": {
            "$ref": "#/components/schemas/CartesiaSTTModel"
          },
          "language": {
            "$ref": "#/components/schemas/CartesiaSTTLanguage"
          }
        },
        "required": [
          "provider",
          "model",
          "language"
        ]
      },
      "CartesiaSTTModel": {
        "type": "string",
        "enum": [
          "ink-whisper",
          "ink-2"
        ],
        "x-enumNames": [
          "INK_WHISPER",
          "INK_2"
        ]
      },
      "CartesiaSTTLanguage": {
        "type": "string",
        "enum": [
          "en",
          "af",
          "ar",
          "hy",
          "az",
          "be",
          "bs",
          "bg",
          "ca",
          "zh",
          "hr",
          "cs",
          "da",
          "nl",
          "et",
          "fi",
          "fr",
          "gl",
          "de",
          "el",
          "he",
          "hi",
          "hu",
          "is",
          "id",
          "it",
          "ja",
          "kn",
          "kk",
          "ko",
          "lv",
          "lt",
          "mk",
          "ms",
          "mr",
          "mi",
          "ne",
          "no",
          "fa",
          "pl",
          "pt",
          "ro",
          "ru",
          "sr",
          "sk",
          "sl",
          "es",
          "sw",
          "sv",
          "tl",
          "ta",
          "th",
          "tr",
          "uk",
          "ur",
          "vi",
          "cy"
        ],
        "x-enumNames": [
          "ENGLISH",
          "AFRIKAANS",
          "ARABIC",
          "ARMENIAN",
          "AZERBAIJANI",
          "BELARUSIAN",
          "BOSNIAN",
          "BULGARIAN",
          "CATALAN",
          "CHINESE",
          "CROATIAN",
          "CZECH",
          "DANISH",
          "DUTCH",
          "ESTONIAN",
          "FINNISH",
          "FRENCH",
          "GALICIAN",
          "GERMAN",
          "GREEK",
          "HEBREW",
          "HINDI",
          "HUNGARIAN",
          "ICELANDIC",
          "INDONESIAN",
          "ITALIAN",
          "JAPANESE",
          "KANNADA",
          "KAZAKH",
          "KOREAN",
          "LATVIAN",
          "LITHUANIAN",
          "MACEDONIAN",
          "MALAY",
          "MARATHI",
          "MAORI",
          "NEPALI",
          "NORWEGIAN",
          "PERSIAN",
          "POLISH",
          "PORTUGUESE",
          "ROMANIAN",
          "RUSSIAN",
          "SERBIAN",
          "SLOVAK",
          "SLOVENIAN",
          "SPANISH",
          "SWAHILI",
          "SWEDISH",
          "TAGALOG",
          "TAMIL",
          "THAI",
          "TURKISH",
          "UKRAINIAN",
          "URDU",
          "VIETNAMESE",
          "WELSH"
        ]
      },
      "GladiaSTTSettings": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "gladia"
            ],
            "x-enumNames": [
              "GLADIA"
            ]
          },
          "model": {
            "$ref": "#/components/schemas/GladiaSTTModel"
          },
          "endpointing": {
            "type": "number"
          },
          "maxDurationWithoutEndpointing": {
            "type": "number"
          },
          "languages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GladiaSTTLanguage"
            }
          }
        },
        "required": [
          "provider",
          "model",
          "endpointing",
          "maxDurationWithoutEndpointing",
          "languages"
        ]
      },
      "GladiaSTTModel": {
        "type": "string",
        "enum": [
          "solaria-1"
        ],
        "x-enumNames": [
          "SOLARIA_1"
        ]
      },
      "GladiaSTTLanguage": {
        "type": "string",
        "enum": [
          "af",
          "am",
          "ar",
          "as",
          "az",
          "ba",
          "be",
          "bg",
          "bn",
          "bo",
          "br",
          "bs",
          "ca",
          "cs",
          "cy",
          "da",
          "de",
          "el",
          "en",
          "es",
          "et",
          "eu",
          "fa",
          "fi",
          "fo",
          "fr",
          "gl",
          "gu",
          "ha",
          "haw",
          "he",
          "hi",
          "hr",
          "ht",
          "hu",
          "hy",
          "id",
          "is",
          "it",
          "ja",
          "jw",
          "ka",
          "kk",
          "km",
          "kn",
          "ko",
          "la",
          "lb",
          "ln",
          "lo",
          "lt",
          "lv",
          "mg",
          "mi",
          "mk",
          "ml",
          "mn",
          "mr",
          "ms",
          "mt",
          "my",
          "ne",
          "nl",
          "nn",
          "no",
          "oc",
          "pa",
          "pl",
          "ps",
          "pt",
          "ro",
          "ru",
          "sa",
          "sd",
          "si",
          "sk",
          "sl",
          "sn",
          "so",
          "sq",
          "sr",
          "su",
          "sv",
          "sw",
          "ta",
          "te",
          "tg",
          "th",
          "tk",
          "tl",
          "tr",
          "tt",
          "uk",
          "ur",
          "uz",
          "vi",
          "yi",
          "yo",
          "zh"
        ],
        "x-enumNames": [
          "AFRIKAANS",
          "AMHARIC",
          "ARABIC",
          "ASSAMESE",
          "AZERBAIJANI",
          "BASHKIR",
          "BELARUSIAN",
          "BULGARIAN",
          "BENGALI",
          "TIBETAN",
          "BRETON",
          "BOSNIAN",
          "CATALAN",
          "CZECH",
          "WELSH",
          "DANISH",
          "GERMAN",
          "GREEK",
          "ENGLISH",
          "SPANISH",
          "ESTONIAN",
          "BASQUE",
          "PERSIAN",
          "FINNISH",
          "FAROESE",
          "FRENCH",
          "GALICIAN",
          "GUJARATI",
          "HAUSA",
          "HAWAIIAN",
          "HEBREW",
          "HINDI",
          "CROATIAN",
          "HAITIAN_CREOLE",
          "HUNGARIAN",
          "ARMENIAN",
          "INDONESIAN",
          "ICELANDIC",
          "ITALIAN",
          "JAPANESE",
          "JAVANESE",
          "GEORGIAN",
          "KAZAKH",
          "KHMER",
          "KANNADA",
          "KOREAN",
          "LATIN",
          "LUXEMBOURGISH",
          "LINGALA",
          "LAO",
          "LITHUANIAN",
          "LATVIAN",
          "MALAGASY",
          "MAORI",
          "MACEDONIAN",
          "MALAYALAM",
          "MONGOLIAN",
          "MARATHI",
          "MALAY",
          "MALTESE",
          "MYANMAR",
          "NEPALI",
          "DUTCH",
          "NORWEGIAN_NYNORSK",
          "NORWEGIAN",
          "OCCITAN",
          "PUNJABI",
          "POLISH",
          "PASHTO",
          "PORTUGUESE",
          "ROMANIAN",
          "RUSSIAN",
          "SANSKRIT",
          "SINDHI",
          "SINHALA",
          "SLOVAK",
          "SLOVENIAN",
          "SHONA",
          "SOMALI",
          "ALBANIAN",
          "SERBIAN",
          "SUNDANESE",
          "SWEDISH",
          "SWAHILI",
          "TAMIL",
          "TELUGU",
          "TAJIK",
          "THAI",
          "TURKMEN",
          "TAGALOG",
          "TURKISH",
          "TATAR",
          "UKRAINIAN",
          "URDU",
          "UZBEK",
          "VIETNAMESE",
          "YIDDISH",
          "YORUBA",
          "CHINESE"
        ]
      },
      "GoogleSTTSettings": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "google"
            ],
            "x-enumNames": [
              "GOOGLE"
            ]
          },
          "model": {
            "$ref": "#/components/schemas/GoogleSTTModel"
          },
          "languages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GoogleSTTLanguage"
            }
          }
        },
        "required": [
          "provider",
          "model",
          "languages"
        ]
      },
      "GoogleSTTModel": {
        "type": "string",
        "enum": [
          "chirp_3"
        ],
        "x-enumNames": [
          "CHIRP_3"
        ]
      },
      "GoogleSTTLanguage": {
        "type": "string",
        "enum": [
          "auto",
          "ca-ES",
          "cmn-Hans-CN",
          "hr-HR",
          "da-DK",
          "nl-NL",
          "en-AU",
          "en-GB",
          "en-IN",
          "en-US",
          "fi-FI",
          "fr-CA",
          "fr-FR",
          "de-DE",
          "el-GR",
          "hi-IN",
          "it-IT",
          "ja-JP",
          "ko-KR",
          "pl-PL",
          "pt-BR",
          "pt-PT",
          "ro-RO",
          "ru-RU",
          "es-ES",
          "es-US",
          "sv-SE",
          "tr-TR",
          "uk-UA",
          "vi-VN",
          "ar-XA",
          "ar-DZ",
          "ar-BH",
          "ar-EG",
          "ar-IL",
          "ar-JO",
          "ar-KW",
          "ar-LB",
          "ar-MR",
          "ar-MA",
          "ar-OM",
          "ar-QA",
          "ar-SA",
          "ar-PS",
          "ar-SY",
          "ar-TN",
          "ar-AE",
          "ar-YE",
          "hy-AM",
          "bn-BD",
          "bn-IN",
          "bg-BG",
          "my-MM",
          "ar-IQ",
          "yue-Hant-HK",
          "cmn-Hant-TW",
          "cs-CZ",
          "en-PH",
          "et-EE",
          "fil-PH",
          "gu-IN",
          "iw-IL",
          "hu-HU",
          "id-ID",
          "kn-IN",
          "km-KH",
          "lo-LA",
          "lv-LV",
          "lt-LT",
          "ms-MY",
          "ml-IN",
          "mr-IN",
          "ne-NP",
          "no-NO",
          "fa-IR",
          "pa-Guru-IN",
          "sr-RS",
          "sk-SK",
          "sl-SI",
          "es-MX",
          "sw",
          "ta-IN",
          "te-IN",
          "th-TH",
          "uz-UZ"
        ],
        "x-enumNames": [
          "AUTO",
          "CA_ES",
          "CMN_HANS_CN",
          "HR_HR",
          "DA_DK",
          "NL_NL",
          "EN_AU",
          "EN_GB",
          "EN_IN",
          "EN_US",
          "FI_FI",
          "FR_CA",
          "FR_FR",
          "DE_DE",
          "EL_GR",
          "HI_IN",
          "IT_IT",
          "JA_JP",
          "KO_KR",
          "PL_PL",
          "PT_BR",
          "PT_PT",
          "RO_RO",
          "RU_RU",
          "ES_ES",
          "ES_US",
          "SV_SE",
          "TR_TR",
          "UK_UA",
          "VI_VN",
          "AR_XA",
          "AR_DZ",
          "AR_BH",
          "AR_EG",
          "AR_IL",
          "AR_JO",
          "AR_KW",
          "AR_LB",
          "AR_MR",
          "AR_MA",
          "AR_OM",
          "AR_QA",
          "AR_SA",
          "AR_PS",
          "AR_SY",
          "AR_TN",
          "AR_AE",
          "AR_YE",
          "HY_AM",
          "BN_BD",
          "BN_IN",
          "BG_BG",
          "MY_MM",
          "AR_IQ",
          "YUE_HANT_HK",
          "CMN_HANT_TW",
          "CS_CZ",
          "EN_PH",
          "ET_EE",
          "FIL_PH",
          "GU_IN",
          "IW_IL",
          "HU_HU",
          "ID_ID",
          "KN_IN",
          "KM_KH",
          "LO_LA",
          "LV_LV",
          "LT_LT",
          "MS_MY",
          "ML_IN",
          "MR_IN",
          "NE_NP",
          "NO_NO",
          "FA_IR",
          "PA_GURU_IN",
          "SR_RS",
          "SK_SK",
          "SL_SI",
          "ES_MX",
          "SW",
          "TA_IN",
          "TE_IN",
          "TH_TH",
          "UZ_UZ"
        ]
      },
      "SonioxSTTSettings": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "soniox"
            ],
            "x-enumNames": [
              "SONIOX"
            ]
          },
          "model": {
            "$ref": "#/components/schemas/SonioxSTTModel"
          },
          "maxEndpointDelayMS": {
            "type": "integer",
            "minimum": 500,
            "maximum": 3000
          },
          "endpointSensitivity": {
            "type": "number",
            "minimum": -1,
            "maximum": 1
          },
          "keyterms": {
            "type": "string"
          },
          "languages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SonioxSTTLanguage"
            }
          }
        },
        "required": [
          "provider",
          "model",
          "languages"
        ]
      },
      "SonioxSTTModel": {
        "type": "string",
        "enum": [
          "stt-rt-v5"
        ],
        "x-enumNames": [
          "STT_RT_V_5"
        ]
      },
      "SonioxSTTLanguage": {
        "type": "string",
        "enum": [
          "auto",
          "af",
          "sq",
          "ar",
          "az",
          "eu",
          "be",
          "bn",
          "bs",
          "bg",
          "ca",
          "zh",
          "hr",
          "cs",
          "da",
          "nl",
          "en",
          "et",
          "fi",
          "fr",
          "gl",
          "de",
          "el",
          "gu",
          "he",
          "hi",
          "hu",
          "id",
          "it",
          "ja",
          "kn",
          "kk",
          "ko",
          "lv",
          "lt",
          "mk",
          "ms",
          "ml",
          "mr",
          "no",
          "fa",
          "pl",
          "pt",
          "pa",
          "ro",
          "ru",
          "sr",
          "sk",
          "sl",
          "es",
          "sw",
          "sv",
          "tl",
          "ta",
          "te",
          "th",
          "tr",
          "uk",
          "ur",
          "vi",
          "cy"
        ],
        "x-enumNames": [
          "AUTO",
          "AFRIKAANS",
          "ALBANIAN",
          "ARABIC",
          "AZERBAIJANI",
          "BASQUE",
          "BELARUSIAN",
          "BENGALI",
          "BOSNIAN",
          "BULGARIAN",
          "CATALAN",
          "CHINESE",
          "CROATIAN",
          "CZECH",
          "DANISH",
          "DUTCH",
          "ENGLISH",
          "ESTONIAN",
          "FINNISH",
          "FRENCH",
          "GALICIAN",
          "GERMAN",
          "GREEK",
          "GUJARATI",
          "HEBREW",
          "HINDI",
          "HUNGARIAN",
          "INDONESIAN",
          "ITALIAN",
          "JAPANESE",
          "KANNADA",
          "KAZAKH",
          "KOREAN",
          "LATVIAN",
          "LITHUANIAN",
          "MACEDONIAN",
          "MALAY",
          "MALAYALAM",
          "MARATHI",
          "NORWEGIAN",
          "PERSIAN",
          "POLISH",
          "PORTUGUESE",
          "PUNJABI",
          "ROMANIAN",
          "RUSSIAN",
          "SERBIAN",
          "SLOVAK",
          "SLOVENIAN",
          "SPANISH",
          "SWAHILI",
          "SWEDISH",
          "TAGALOG",
          "TAMIL",
          "TELUGU",
          "THAI",
          "TURKISH",
          "UKRAINIAN",
          "URDU",
          "VIETNAMESE",
          "WELSH"
        ]
      },
      "VoiceSettings": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/AmazonVoiceSettings"
          },
          {
            "$ref": "#/components/schemas/GoogleVoiceSettings"
          },
          {
            "$ref": "#/components/schemas/CartesiaVoiceSettings"
          },
          {
            "$ref": "#/components/schemas/RimelabsVoiceSettings"
          },
          {
            "$ref": "#/components/schemas/SonioxVoiceSettings"
          },
          {
            "$ref": "#/components/schemas/MicrosoftVoiceSettings"
          },
          {
            "$ref": "#/components/schemas/ElevenLabsVoiceSettings"
          }
        ]
      },
      "AmazonVoiceSettings": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "amazon"
            ],
            "x-enumNames": [
              "AMAZON"
            ]
          },
          "voice": {
            "type": "string"
          }
        },
        "required": [
          "provider",
          "voice"
        ]
      },
      "GoogleVoiceSettings": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "google"
            ],
            "x-enumNames": [
              "GOOGLE"
            ]
          },
          "model": {
            "allOf": [
              {
                "$ref": "#/components/schemas/GoogleTTSModelID"
              }
            ]
          },
          "languageCode": {
            "type": "string"
          },
          "voice": {
            "type": "string"
          },
          "settings": {
            "type": "object",
            "properties": {
              "prompt": {
                "type": "string"
              }
            }
          }
        },
        "required": [
          "provider",
          "voice"
        ]
      },
      "GoogleTTSModelID": {
        "type": "string",
        "enum": [
          "standard",
          "wavenet",
          "neural2",
          "polyglot",
          "studio",
          "Chirp3-HD",
          "gemini-2.5-flash"
        ],
        "x-enumNames": [
          "STANDARD",
          "WAVENET",
          "NEURAL_2",
          "POLYGLOT",
          "STUDIO",
          "CHIRP_3_HD",
          "GEMINI_2_5_FLASH"
        ]
      },
      "CartesiaVoiceSettings": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "cartesia"
            ],
            "x-enumNames": [
              "CARTESIA"
            ]
          },
          "model": {
            "type": "string"
          },
          "voice": {
            "type": "string"
          },
          "settings": {
            "type": "object",
            "properties": {
              "speed": {
                "type": "number",
                "minimum": 0.6,
                "maximum": 1.5
              }
            }
          }
        },
        "required": [
          "provider",
          "model",
          "voice"
        ]
      },
      "RimelabsVoiceSettings": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "rimelabs"
            ],
            "x-enumNames": [
              "RIMELABS"
            ]
          },
          "model": {
            "type": "string"
          },
          "voice": {
            "type": "string"
          },
          "language": {
            "type": "string"
          }
        },
        "required": [
          "provider",
          "voice"
        ]
      },
      "SonioxVoiceSettings": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "soniox"
            ],
            "x-enumNames": [
              "SONIOX"
            ]
          },
          "model": {
            "type": "string"
          },
          "voice": {
            "type": "string"
          },
          "language": {
            "type": "string"
          }
        },
        "required": [
          "provider",
          "voice"
        ]
      },
      "MicrosoftVoiceSettings": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "microsoft"
            ],
            "x-enumNames": [
              "MICROSOFT"
            ]
          },
          "voice": {
            "type": "string"
          }
        },
        "required": [
          "provider",
          "voice"
        ]
      },
      "ElevenLabsVoiceSettings": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "elevenlabs"
            ],
            "x-enumNames": [
              "ELEVENLABS"
            ]
          },
          "model": {
            "type": "string"
          },
          "voice": {
            "type": "string"
          },
          "useCustomVoice": {
            "type": "boolean"
          },
          "settings": {
            "type": "object",
            "properties": {
              "speed": {
                "type": "number",
                "minimum": 0.7,
                "maximum": 1.3
              },
              "style": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "stability": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "speaker_boost": {
                "type": "boolean"
              },
              "similarity_boost": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              }
            }
          },
          "pronunciation_dictionaries": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "pronunciation_dictionary_id": {
                  "type": "string"
                },
                "version_id": {
                  "type": "string"
                }
              },
              "required": [
                "pronunciation_dictionary_id"
              ]
            }
          }
        },
        "required": [
          "provider",
          "model",
          "voice",
          "settings"
        ]
      },
      "PronunciationDictionaryEntry": {
        "type": "object",
        "properties": {
          "from": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128
          },
          "to": {
            "type": "string",
            "maxLength": 128
          }
        },
        "required": [
          "from",
          "to"
        ]
      },
      "BackgroundAudioSettings": {
        "type": "object",
        "properties": {
          "volume": {
            "default": 0.75,
            "type": "number",
            "minimum": 0,
            "maximum": 1
          }
        }
      },
      "VoiceKeypadSettings": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "delimiter": {
            "maxItems": 2,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DTMFDelimiter"
            }
          },
          "timeoutInSeconds": {
            "type": "number"
          }
        },
        "required": [
          "enabled",
          "delimiter",
          "timeoutInSeconds"
        ]
      },
      "VoiceMaxDurationSettings": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "seconds": {
            "nullable": true,
            "type": "number"
          },
          "message": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "enabled",
          "seconds",
          "message"
        ]
      },
      "WidgetSettings": {
        "type": "object",
        "properties": {
          "type": {
            "$ref": "#/components/schemas/WidgetSettingsWidgetType"
          },
          "chat": {
            "$ref": "#/components/schemas/WidgetSettingsChatSettings"
          },
          "voice": {
            "$ref": "#/components/schemas/WidgetSettingsVoiceSettings"
          },
          "common": {
            "$ref": "#/components/schemas/WidgetSettingsCommonSettings"
          },
          "security": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WidgetSettingsSecuritySettings"
              }
            ]
          }
        },
        "required": [
          "type",
          "chat",
          "voice",
          "common"
        ]
      },
      "WidgetSettingsWidgetType": {
        "type": "string",
        "enum": [
          "chat",
          "voice"
        ],
        "x-enumNames": [
          "CHAT",
          "VOICE"
        ]
      },
      "WidgetSettingsChatSettings": {
        "type": "object",
        "properties": {
          "renderMode": {
            "$ref": "#/components/schemas/WidgetSettingsChatRenderMode"
          },
          "headerImage": {
            "$ref": "#/components/schemas/WidgetSettingsChatSettingsHeaderImage"
          },
          "agentImage": {
            "$ref": "#/components/schemas/WidgetSettingsChatSettingsAgentImage"
          },
          "banner": {
            "$ref": "#/components/schemas/WidgetSettingsChatSettingsBanner"
          },
          "placeholderText": {
            "type": "string"
          },
          "disclaimer": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WidgetSettingsChatDisclaimer"
              }
            ]
          },
          "aiDisclaimer": {
            "$ref": "#/components/schemas/WidgetSettingsChatSettingsAIDisclaimer"
          },
          "handoffToAgentImageURL": {
            "nullable": true,
            "type": "string"
          },
          "streamingDisabled": {
            "type": "boolean"
          },
          "responseLoader": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WidgetSettingsChatSettingsResponseLoader"
              }
            ]
          },
          "voiceInput": {
            "type": "boolean"
          },
          "voiceOutput": {
            "type": "boolean"
          },
          "voiceOutputMuted": {
            "type": "boolean"
          },
          "voiceMode": {
            "type": "boolean"
          },
          "notificationSound": {
            "type": "boolean"
          },
          "fileUpload": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WidgetSettingsChatSettingsFileUpload"
              }
            ]
          },
          "csat": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WidgetSettingsChatSettingsCSAT"
              }
            ]
          }
        },
        "required": [
          "renderMode",
          "headerImage",
          "agentImage",
          "banner",
          "placeholderText",
          "aiDisclaimer",
          "voiceInput",
          "voiceOutput"
        ]
      },
      "WidgetSettingsChatRenderMode": {
        "type": "string",
        "enum": [
          "embed",
          "widget",
          "popover"
        ],
        "x-enumNames": [
          "EMBED",
          "WIDGET",
          "POPOVER"
        ]
      },
      "WidgetSettingsChatSettingsHeaderImage": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "url": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "enabled"
        ]
      },
      "WidgetSettingsChatSettingsAgentImage": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "url": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "enabled"
        ]
      },
      "WidgetSettingsChatSettingsBanner": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "imageURL": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "title",
          "description",
          "enabled"
        ]
      },
      "WidgetSettingsChatDisclaimer": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "primaryButtonText": {
            "type": "string"
          },
          "secondaryButtonText": {
            "type": "string"
          },
          "secondaryButtonURL": {
            "type": "string"
          }
        },
        "required": [
          "enabled",
          "title",
          "description",
          "primaryButtonText",
          "secondaryButtonText",
          "secondaryButtonURL"
        ]
      },
      "WidgetSettingsChatSettingsAIDisclaimer": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          }
        },
        "required": [
          "text",
          "enabled"
        ]
      },
      "WidgetSettingsChatSettingsResponseLoader": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/WidgetSettingsChatSettingsResponseLoaderDots"
          },
          {
            "$ref": "#/components/schemas/WidgetSettingsChatSettingsResponseLoaderSpinnerWithText"
          }
        ]
      },
      "WidgetSettingsChatSettingsResponseLoaderDots": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "dots"
            ],
            "x-enumNames": [
              "DOTS"
            ]
          }
        },
        "required": [
          "type"
        ]
      },
      "WidgetSettingsChatSettingsResponseLoaderSpinnerWithText": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "spinner-with-text"
            ],
            "x-enumNames": [
              "SPINNER_WITH_TEXT"
            ]
          },
          "text": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "text"
        ]
      },
      "WidgetSettingsChatSettingsFileUpload": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "maxFilesPerConversation": {
            "nullable": true,
            "type": "number"
          },
          "model": {
            "type": "string"
          }
        },
        "required": [
          "enabled"
        ]
      },
      "WidgetSettingsChatSettingsCSAT": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "promptText": {
            "type": "string"
          },
          "includeFreetextFeedback": {
            "type": "boolean"
          }
        },
        "required": [
          "enabled",
          "includeFreetextFeedback"
        ]
      },
      "WidgetSettingsVoiceSettings": {
        "type": "object",
        "properties": {
          "renderMode": {
            "$ref": "#/components/schemas/WidgetSettingsVoiceRenderMode"
          },
          "content": {
            "$ref": "#/components/schemas/WidgetSettingsVoiceSettingsContent"
          }
        },
        "required": [
          "renderMode",
          "content"
        ]
      },
      "WidgetSettingsVoiceRenderMode": {
        "type": "string",
        "enum": [
          "full",
          "compact",
          "expand"
        ],
        "x-enumNames": [
          "FULL",
          "COMPACT",
          "EXPAND"
        ]
      },
      "WidgetSettingsVoiceSettingsContent": {
        "type": "object",
        "properties": {
          "imageURL": {
            "nullable": true,
            "type": "string"
          },
          "talkingText": {
            "type": "string"
          },
          "endButtonText": {
            "type": "string"
          },
          "listeningText": {
            "type": "string"
          },
          "startButtonText": {
            "type": "string"
          },
          "callToActionText": {
            "type": "string"
          }
        },
        "required": [
          "talkingText",
          "endButtonText",
          "listeningText",
          "startButtonText",
          "callToActionText"
        ]
      },
      "WidgetSettingsCommonSettings": {
        "type": "object",
        "properties": {
          "sideSpacing": {
            "type": "string"
          },
          "bottomSpacing": {
            "type": "string"
          },
          "width": {
            "type": "string"
          },
          "position": {
            "$ref": "#/components/schemas/WidgetSettingsWidgetPosition"
          },
          "fontFamily": {
            "type": "string"
          },
          "primaryColor": {
            "$ref": "#/components/schemas/WidgetSettingsPrimaryColor"
          },
          "poweredBy": {
            "type": "boolean"
          },
          "launcher": {
            "$ref": "#/components/schemas/WidgetSettingsCommonSettingsLauncher"
          },
          "footerLink": {
            "$ref": "#/components/schemas/WidgetSettingsCommonSettingsFooterLink"
          },
          "persistence": {
            "$ref": "#/components/schemas/WidgetSettingsChatPersistence"
          },
          "featureFlags": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WidgetSettingsCommonSettingsFeatureFlags"
              }
            ]
          }
        },
        "required": [
          "sideSpacing",
          "bottomSpacing",
          "position",
          "fontFamily",
          "primaryColor",
          "poweredBy",
          "launcher",
          "footerLink",
          "persistence"
        ]
      },
      "WidgetSettingsWidgetPosition": {
        "type": "string",
        "enum": [
          "right",
          "left"
        ],
        "x-enumNames": [
          "RIGHT",
          "LEFT"
        ]
      },
      "WidgetSettingsPrimaryColor": {
        "type": "object",
        "properties": {
          "color": {
            "type": "string"
          },
          "palette": {
            "$ref": "#/components/schemas/WidgetSettingsColorPalette"
          }
        },
        "required": [
          "color",
          "palette"
        ]
      },
      "WidgetSettingsColorPalette": {
        "type": "object",
        "properties": {
          "50": {
            "type": "string"
          },
          "100": {
            "type": "string"
          },
          "200": {
            "type": "string"
          },
          "300": {
            "type": "string"
          },
          "400": {
            "type": "string"
          },
          "500": {
            "type": "string"
          },
          "600": {
            "type": "string"
          },
          "700": {
            "type": "string"
          },
          "800": {
            "type": "string"
          },
          "900": {
            "type": "string"
          }
        },
        "required": [
          "50",
          "100",
          "200",
          "300",
          "400",
          "500",
          "600",
          "700",
          "800",
          "900"
        ]
      },
      "WidgetSettingsCommonSettingsLauncher": {
        "type": "object",
        "properties": {
          "type": {
            "$ref": "#/components/schemas/WidgetSettingsLauncherType"
          },
          "text": {
            "type": "string"
          },
          "imageURL": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "type"
        ]
      },
      "WidgetSettingsLauncherType": {
        "type": "string",
        "enum": [
          "icon",
          "label",
          "both"
        ],
        "x-enumNames": [
          "ICON",
          "LABEL",
          "BOTH"
        ]
      },
      "WidgetSettingsCommonSettingsFooterLink": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "text": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "required": [
          "enabled"
        ]
      },
      "WidgetSettingsChatPersistence": {
        "type": "string",
        "enum": [
          "memory",
          "localStorage",
          "sessionStorage"
        ],
        "x-enumNames": [
          "MEMORY",
          "LOCAL_STORAGE",
          "SESSION_STORAGE"
        ]
      },
      "WidgetSettingsCommonSettingsFeatureFlags": {
        "type": "object",
        "additionalProperties": {
          "type": "boolean"
        }
      },
      "WidgetSettingsSecuritySettings": {
        "type": "object",
        "properties": {
          "approvedDomains": {
            "$ref": "#/components/schemas/WidgetSettingsSecuritySettingsApprovedDomains"
          },
          "disableTranscript": {
            "type": "boolean"
          },
          "isTranscriptDownloadEnabled": {
            "type": "boolean"
          }
        },
        "required": [
          "approvedDomains",
          "disableTranscript"
        ]
      },
      "WidgetSettingsSecuritySettingsApprovedDomains": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "domains": {
            "type": "string"
          }
        },
        "required": [
          "enabled",
          "domains"
        ]
      },
      "VersionSettingsMemory": {
        "type": "object",
        "properties": {
          "turns": {
            "default": 10,
            "type": "number"
          }
        }
      },
      "VersionSettingsSession": {
        "type": "object",
        "properties": {
          "idleTimeout": {
            "$ref": "#/components/schemas/VersionSettingsSessionIdleTimeout"
          }
        },
        "required": [
          "idleTimeout"
        ]
      },
      "VersionSettingsSessionIdleTimeout": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "timeoutMs": {
            "type": "number"
          }
        },
        "required": [
          "enabled",
          "timeoutMs"
        ]
      },
      "VersionSettingsSecurity": {
        "type": "object",
        "properties": {
          "transcriptsPII": {
            "default": false,
            "type": "boolean"
          }
        }
      },
      "VersionSettingsFramework": {
        "type": "object",
        "properties": {
          "type": {
            "$ref": "#/components/schemas/ProjectFramework"
          },
          "agenticInitializeComponentID": {
            "default": null,
            "nullable": true,
            "type": "string"
          },
          "conversationInitializeComponentID": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "conversationInitializeComponentID"
        ]
      },
      "ProjectFramework": {
        "type": "string",
        "enum": [
          "agentic",
          "conversation"
        ],
        "x-enumNames": [
          "AGENTIC",
          "CONVERSATION"
        ]
      },
      "VersionSettingsAnalytics": {
        "type": "object",
        "properties": {
          "estimatedSavings": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionSettingsAnalyticsEstimatedSavings"
              }
            ]
          }
        }
      },
      "VersionSettingsAnalyticsEstimatedSavings": {
        "type": "object",
        "properties": {
          "resolutionRate": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionSettingsAnalyticsEstimatedSavingsValue"
              }
            ]
          },
          "deflectionRate": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionSettingsAnalyticsEstimatedSavingsValue"
              }
            ]
          },
          "conversionRate": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionSettingsAnalyticsEstimatedSavingsConversionValue"
              }
            ]
          }
        }
      },
      "VersionSettingsAnalyticsEstimatedSavingsValue": {
        "type": "object",
        "properties": {
          "minutes": {
            "type": "number"
          },
          "dollars": {
            "type": "number"
          }
        }
      },
      "VersionSettingsAnalyticsEstimatedSavingsConversionValue": {
        "type": "object",
        "properties": {
          "dollars": {
            "type": "number"
          },
          "criteria": {
            "type": "string"
          }
        }
      },
      "VersionSettingsCostControl": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "maxDollars": {
            "type": "number",
            "minimum": 0,
            "exclusiveMinimum": true,
            "maximum": 10000
          },
          "endMessage": {
            "$ref": "#/components/schemas/Markup"
          }
        },
        "required": [
          "enabled",
          "maxDollars",
          "endMessage"
        ]
      },
      "VersionSettingsGlobalCrew": {
        "type": "object",
        "properties": {
          "agentID": {
            "type": "string"
          },
          "agentDescription": {
            "deprecated": true,
            "description": "Should not be used, use global agent description instead",
            "nullable": true,
            "type": "string"
          },
          "subFlows": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CrewNodeDataFlow"
            }
          },
          "subAgents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CrewNodeDataAgent"
            }
          }
        },
        "required": [
          "agentID",
          "subFlows",
          "subAgents"
        ]
      },
      "CrewNodeDataFlow": {
        "type": "object",
        "properties": {
          "flowID": {
            "type": "string"
          },
          "condition": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ExpressionCondition"
              }
            ]
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "requiredVariables": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CrewNodeDataRequiredVariable"
            }
          }
        },
        "required": [
          "flowID",
          "description"
        ]
      },
      "CrewNodeDataRequiredVariable": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "variableOrEntityID": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "id",
          "description",
          "variableOrEntityID"
        ]
      },
      "CrewNodeDataAgent": {
        "type": "object",
        "properties": {
          "agentID": {
            "type": "string"
          },
          "condition": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ExpressionCondition"
              }
            ]
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "requiredVariables": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CrewNodeDataRequiredVariable"
            }
          }
        },
        "required": [
          "agentID",
          "description"
        ]
      },
      "LLMFallbackSettings": {
        "type": "object",
        "properties": {
          "models": {
            "$ref": "#/components/schemas/FallbackMapping"
          }
        },
        "required": [
          "models"
        ]
      },
      "FallbackMapping": {
        "type": "object",
        "additionalProperties": {
          "type": "object",
          "additionalProperties": {
            "type": "object",
            "properties": {
              "provider": {
                "$ref": "#/components/schemas/AIProvider"
              },
              "model": {
                "$ref": "#/components/schemas/AIModel"
              }
            },
            "required": [
              "provider",
              "model"
            ]
          }
        }
      },
      "AIProvider": {
        "type": "string",
        "enum": [
          "groq",
          "azure",
          "google",
          "open-ai",
          "anthropic",
          "bedrock",
          "voiceflow",
          "xai",
          "openrouter"
        ],
        "x-enumNames": [
          "GROQ",
          "AZURE",
          "GOOGLE",
          "OPEN_AI",
          "ANTHROPIC",
          "BEDROCK",
          "VOICEFLOW",
          "XAI",
          "OPENROUTER"
        ]
      },
      "VersionSettingsGlobalNoReply": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/VersionSettingsGlobalNoReplyStatic"
          },
          {
            "$ref": "#/components/schemas/VersionSettingsGlobalNoReplyGenerative"
          }
        ]
      },
      "VersionSettingsGlobalNoReplyStatic": {
        "type": "object",
        "properties": {
          "delay": {
            "nullable": true,
            "type": "number"
          },
          "enabled": {
            "type": "boolean"
          },
          "maxRetries": {
            "type": "number"
          },
          "type": {
            "type": "string",
            "enum": [
              "static"
            ],
            "x-enumNames": [
              "STATIC"
            ]
          },
          "prompt": {
            "$ref": "#/components/schemas/Markup"
          }
        },
        "required": [
          "delay",
          "enabled",
          "prompt"
        ]
      },
      "VersionSettingsGlobalNoReplyGenerative": {
        "type": "object",
        "properties": {
          "delay": {
            "nullable": true,
            "type": "number"
          },
          "enabled": {
            "type": "boolean"
          },
          "maxRetries": {
            "type": "number"
          },
          "type": {
            "type": "string",
            "enum": [
              "generative"
            ],
            "x-enumNames": [
              "GENERATIVE"
            ]
          },
          "settings": {
            "type": "object",
            "properties": {
              "model": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/AIModel"
                  }
                ]
              },
              "system": {
                "type": "string"
              },
              "maxTokens": {
                "type": "number"
              },
              "temperature": {
                "type": "number"
              },
              "reasoningEffort": {
                "nullable": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/AIReasoningEffort"
                  }
                ]
              }
            }
          }
        },
        "required": [
          "delay",
          "enabled",
          "type",
          "settings"
        ]
      },
      "VersionSettingsGlobalNoMatch": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/VersionSettingsGlobalNoMatchStatic"
          },
          {
            "$ref": "#/components/schemas/VersionSettingsGlobalNoMatchGenerative"
          }
        ]
      },
      "VersionSettingsGlobalNoMatchStatic": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "static"
            ],
            "x-enumNames": [
              "STATIC"
            ]
          },
          "prompt": {
            "$ref": "#/components/schemas/Markup"
          }
        },
        "required": [
          "type",
          "prompt"
        ]
      },
      "VersionSettingsGlobalNoMatchGenerative": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "generative"
            ],
            "x-enumNames": [
              "GENERATIVE"
            ]
          },
          "settings": {
            "type": "object",
            "properties": {
              "model": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/AIModel"
                  }
                ]
              },
              "system": {
                "type": "string"
              },
              "maxTokens": {
                "type": "number"
              },
              "temperature": {
                "type": "number"
              },
              "reasoningEffort": {
                "nullable": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/AIReasoningEffort"
                  }
                ]
              }
            }
          }
        },
        "required": [
          "type",
          "settings"
        ]
      },
      "VersionSettingsShareableLink": {
        "type": "object",
        "properties": {
          "password": {
            "type": "string"
          },
          "variableStateID": {
            "nullable": true,
            "type": "string"
          }
        }
      },
      "VersionSettingsAutomaticReprompt": {
        "type": "object",
        "properties": {
          "params": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AutomaticRepromptParams"
              }
            ]
          }
        },
        "required": [
          "params"
        ]
      },
      "AutomaticRepromptParams": {
        "type": "object",
        "properties": {
          "model": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AIModel"
              }
            ]
          },
          "system": {
            "type": "string"
          },
          "maxTokens": {
            "type": "number"
          },
          "temperature": {
            "type": "number"
          },
          "reasoningEffort": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AIReasoningEffort"
              }
            ]
          }
        }
      },
      "IntentClassificationSettings": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/IntentClassificationLLMSettings"
          },
          {
            "$ref": "#/components/schemas/IntentClassificationNLUSettings"
          },
          {
            "$ref": "#/components/schemas/IntentClassificationRAGSettings"
          }
        ]
      },
      "IntentClassificationLLMSettings": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "llm"
            ],
            "x-enumNames": [
              "LLM"
            ]
          },
          "params": {
            "$ref": "#/components/schemas/IntentAIParams"
          },
          "promptWrapper": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AIPromptWrapper"
              }
            ]
          }
        },
        "required": [
          "type",
          "params",
          "promptWrapper"
        ]
      },
      "IntentAIParams": {
        "type": "object",
        "properties": {
          "model": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AIModel"
              }
            ]
          },
          "temperature": {
            "type": "number"
          },
          "reasoningEffort": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AIReasoningEffort"
              }
            ]
          }
        },
        "required": [
          "model",
          "temperature"
        ]
      },
      "AIPromptWrapper": {
        "type": "object",
        "properties": {
          "content": {
            "type": "string"
          }
        },
        "required": [
          "content"
        ]
      },
      "IntentClassificationNLUSettings": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "nlu"
            ],
            "x-enumNames": [
              "NLU"
            ]
          },
          "params": {
            "type": "object",
            "properties": {
              "confidence": {
                "type": "number"
              }
            },
            "required": [
              "confidence"
            ]
          }
        },
        "required": [
          "type",
          "params"
        ]
      },
      "IntentClassificationRAGSettings": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "rag"
            ],
            "x-enumNames": [
              "RAG"
            ]
          },
          "params": {
            "$ref": "#/components/schemas/IntentAIParams"
          },
          "promptWrapper": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AIPromptWrapper"
              }
            ]
          }
        },
        "required": [
          "type",
          "params",
          "promptWrapper"
        ]
      },
      "VersionPlatformData": {
        "type": "object",
        "properties": {
          "slots": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VersionSlot"
            }
          },
          "intents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VersionIntent"
            }
          },
          "settings": {
            "$ref": "#/components/schemas/VersionPlatformSettings"
          },
          "publishing": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "slots",
          "intents",
          "settings",
          "publishing"
        ]
      },
      "VersionSlot": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/VersionSlotType"
          },
          "color": {
            "type": "string"
          },
          "inputs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "key",
          "name",
          "type",
          "inputs"
        ]
      },
      "VersionSlotType": {
        "type": "object",
        "properties": {
          "value": {
            "type": "string"
          }
        }
      },
      "VersionIntent": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "slots": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VersionIntentSlot"
            }
          },
          "inputs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VersionIntentInput"
            }
          },
          "noteID": {
            "type": "string"
          },
          "description": {
            "type": "string"
          }
        },
        "required": [
          "key",
          "name",
          "inputs"
        ]
      },
      "VersionIntentSlot": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "dialog": {
            "$ref": "#/components/schemas/VersionIntentSlotDialog"
          },
          "required": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "dialog",
          "required"
        ]
      },
      "VersionIntentSlotDialog": {
        "type": "object",
        "properties": {
          "prompt": {
            "type": "array",
            "items": {}
          },
          "confirm": {
            "type": "array",
            "items": {}
          },
          "utterances": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VersionIntentInput"
            }
          },
          "confirmEnabled": {
            "type": "boolean"
          }
        },
        "required": [
          "prompt",
          "confirm",
          "utterances",
          "confirmEnabled"
        ]
      },
      "VersionIntentInput": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string"
          },
          "slots": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "voice": {
            "type": "string"
          }
        },
        "required": [
          "text"
        ]
      },
      "VersionPlatformSettings": {
        "type": "object",
        "properties": {
          "locales": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "deepgramASR": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DeepgramASRSettings"
              }
            ]
          },
          "globalNoReply": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "static"
                    ],
                    "x-enumNames": [
                      "STATIC"
                    ]
                  },
                  "delay": {
                    "nullable": true,
                    "type": "number"
                  },
                  "prompt": {
                    "nullable": true
                  },
                  "enabled": {
                    "type": "boolean"
                  },
                  "maxRetries": {
                    "nullable": true,
                    "type": "number"
                  }
                }
              },
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "generative"
                    ],
                    "x-enumNames": [
                      "GENERATIVE"
                    ]
                  },
                  "delay": {
                    "nullable": true,
                    "type": "number"
                  },
                  "prompt": {
                    "$ref": "#/components/schemas/AIParams"
                  },
                  "enabled": {
                    "type": "boolean"
                  },
                  "maxRetries": {
                    "nullable": true,
                    "type": "number"
                  }
                },
                "required": [
                  "type",
                  "prompt"
                ]
              }
            ]
          },
          "defaultVoice": {
            "nullable": true,
            "type": "string"
          },
          "globalNoMatch": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "static"
                    ],
                    "x-enumNames": [
                      "STATIC"
                    ]
                  },
                  "prompt": {
                    "nullable": true
                  }
                },
                "required": [
                  "type"
                ]
              },
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "generative"
                    ],
                    "x-enumNames": [
                      "GENERATIVE"
                    ]
                  },
                  "prompt": {
                    "$ref": "#/components/schemas/AIParams"
                  }
                },
                "required": [
                  "type",
                  "prompt"
                ]
              }
            ]
          },
          "messageDelay": {
            "type": "object",
            "properties": {
              "durationMilliseconds": {
                "type": "number"
              }
            },
            "required": [
              "durationMilliseconds"
            ]
          },
          "defaultCanvasNodeVisibility": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LegacyCanvasNodeVisibility"
              }
            ]
          }
        },
        "additionalProperties": {}
      },
      "DeepgramASRSettings": {
        "type": "object",
        "properties": {
          "punctuationWaitMS": {
            "type": "number"
          },
          "partialWaitMS": {
            "type": "number"
          },
          "silenceWaitMS": {
            "type": "number"
          },
          "interruptionWaitWords": {
            "type": "number"
          },
          "audioCue": {
            "nullable": true,
            "type": "number"
          },
          "backgroundAudio": {
            "nullable": true,
            "type": "string"
          },
          "locale": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DeepgramSTTLanguage"
              }
            ]
          },
          "keywords": {
            "type": "string"
          }
        }
      },
      "AIParams": {
        "type": "object",
        "properties": {
          "stop": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "model": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AIModel"
              }
            ]
          },
          "system": {
            "type": "string"
          },
          "maxTokens": {
            "type": "number"
          },
          "temperature": {
            "type": "number"
          },
          "responseFormat": {
            "type": "string"
          },
          "reasoningEffort": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AIReasoningEffort"
              }
            ]
          },
          "realtime": {
            "type": "object",
            "properties": {
              "voice": {
                "type": "string"
              },
              "eagerness": {
                "type": "string"
              }
            }
          },
          "webSearch": {
            "type": "object",
            "properties": {
              "allowedDomains": {
                "nullable": true,
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "LegacyCanvasNodeVisibility": {
        "type": "string",
        "enum": [
          "preview",
          "all-variants"
        ],
        "x-enumNames": [
          "PREVIEW",
          "ALL_VARIANTS"
        ]
      },
      "VersionCustomBlock": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "body": {
            "type": "string"
          },
          "stop": {
            "type": "boolean"
          },
          "paths": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "parameters": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/VersionCustomBlockParameter"
            }
          },
          "defaultPath": {
            "type": "number"
          }
        },
        "required": [
          "key",
          "name"
        ]
      },
      "VersionCustomBlockParameter": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name"
        ]
      },
      "VersionCanvasTemplate": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "color": {
            "nullable": true,
            "type": "string"
          },
          "nodeIDs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "id",
          "name",
          "color",
          "nodeIDs"
        ]
      },
      "VersionProgramResources": {
        "type": "object",
        "properties": {
          "flows": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CompiledFlow"
            }
          },
          "agents": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CompiledAgent"
            }
          },
          "prompts": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CompiledPrompt"
            }
          },
          "apiTools": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CompiledAPITool"
            }
          },
          "messages": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CompiledMessage"
            }
          },
          "globalCrew": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionProgramResourcesGlobalCrew"
              }
            ]
          },
          "globalPrompts": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionProgramResourcesGlobalPrompts"
              }
            ]
          },
          "costControl": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionProgramResourcesCostControl"
              }
            ]
          },
          "secretNameToId": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "mcpServers": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CompiledMcpServer"
            }
          },
          "mcpServerTools": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CompiledMcpServerTool"
            }
          },
          "integrationTools": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CompiledIntegrationTool"
            }
          },
          "mcpIntegrationTools": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CompiledMcpIntegrationTool"
            }
          }
        },
        "required": [
          "messages"
        ]
      },
      "CompiledFlow": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255
          },
          "diagramID": {
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "toolName": {
            "type": "string"
          },
          "hasToolNameWarning": {
            "type": "boolean"
          }
        },
        "required": [
          "name",
          "diagramID",
          "description"
        ]
      },
      "CompiledAgent": {
        "type": "object",
        "properties": {
          "settings": {
            "$ref": "#/components/schemas/AgentSettings"
          },
          "isOperator": {
            "default": false,
            "type": "boolean"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "skipTurnTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CompiledAgentSkipTurnTool"
              }
            ]
          },
          "name": {
            "default": "",
            "type": "string",
            "maxLength": 255
          },
          "toolName": {
            "type": "string"
          },
          "endTool": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CompiledAgentEndTool"
              }
            ]
          },
          "cardTool": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CompiledAgentCardTool"
              }
            ]
          },
          "buttonTool": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CompiledAgentButtonTool"
              }
            ]
          },
          "carouselTool": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CompiledAgentCarouselTool"
              }
            ]
          },
          "webSearchTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CompiledAgentWebSearchTool"
              }
            ]
          },
          "apiTools": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CompiledAgentAPITool"
            }
          },
          "flowTools": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CompiledAgentFlowTool"
            }
          },
          "pathTools": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CompiledAgentPathTool"
            }
          },
          "instructions": {
            "nullable": true,
            "type": "string"
          },
          "functionTools": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CompiledAgentFunctionTool"
            }
          },
          "callForwardTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CompiledAgentCallForwardTool"
              }
            ]
          },
          "integrationTools": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CompiledAgentIntegrationTool"
            }
          },
          "knowledgeBaseTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CompiledAgentKnowledgeBaseTool"
              }
            ]
          },
          "hasToolNameWarning": {
            "type": "boolean"
          },
          "mcpIntegrationTools": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CompiledAgentMcpIntegrationTool"
            }
          }
        },
        "required": [
          "settings",
          "description",
          "webSearchTool",
          "pathTools",
          "instructions",
          "functionTools",
          "knowledgeBaseTool"
        ]
      },
      "CompiledAgentSkipTurnTool": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "description": {
            "type": "string"
          }
        },
        "required": [
          "enabled",
          "description"
        ]
      },
      "CompiledAgentEndTool": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "toolSound": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ToolNodeDataToolSound"
              }
            ]
          },
          "description": {
            "type": "string"
          },
          "messages": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CompiledAgentToolMessages"
              }
            ]
          }
        },
        "required": [
          "enabled",
          "description"
        ]
      },
      "CompiledAgentToolMessages": {
        "type": "object",
        "properties": {
          "delayMessageID": {
            "nullable": true,
            "type": "string"
          },
          "failureMessageID": {
            "nullable": true,
            "type": "string"
          },
          "executionMessageID": {
            "nullable": true,
            "type": "string"
          },
          "completionMessageID": {
            "nullable": true,
            "type": "string"
          },
          "delayMessageSeconds": {
            "nullable": true,
            "type": "number"
          },
          "prompts": {
            "nullable": true,
            "type": "object",
            "properties": {
              "delay": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "failure": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "execution": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "completion": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          },
          "generative": {
            "deprecated": true,
            "description": "This field is deprecated. Use prompts instead.",
            "type": "object",
            "properties": {
              "delay": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ToolMessageGenerative"
                  }
                ]
              },
              "failure": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ToolMessageGenerative"
                  }
                ]
              },
              "execution": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ToolMessageGenerative"
                  }
                ]
              },
              "completion": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ToolMessageGenerative"
                  }
                ]
              }
            }
          }
        },
        "required": [
          "delayMessageID",
          "failureMessageID",
          "executionMessageID",
          "completionMessageID",
          "delayMessageSeconds"
        ]
      },
      "CompiledAgentCardTool": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "description": {
            "type": "string"
          },
          "messages": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CompiledAgentToolMessages"
              }
            ]
          }
        },
        "required": [
          "enabled",
          "description"
        ]
      },
      "CompiledAgentButtonTool": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "description": {
            "type": "string"
          },
          "messages": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CompiledAgentToolMessages"
              }
            ]
          }
        },
        "required": [
          "enabled",
          "description"
        ]
      },
      "CompiledAgentCarouselTool": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "description": {
            "type": "string"
          },
          "messages": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CompiledAgentToolMessages"
              }
            ]
          }
        },
        "required": [
          "enabled",
          "description"
        ]
      },
      "CompiledAgentWebSearchTool": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "toolSound": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ToolNodeDataToolSound"
              }
            ]
          },
          "description": {
            "type": "string"
          },
          "allowedDomains": {
            "nullable": true,
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sourceUrlsCount": {
            "nullable": true,
            "type": "number",
            "minimum": 1,
            "maximum": 5
          },
          "messages": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CompiledAgentToolMessages"
              }
            ]
          }
        },
        "required": [
          "enabled"
        ]
      },
      "CompiledAgentAPITool": {
        "type": "object",
        "properties": {
          "apiToolID": {
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "asyncExecution": {
            "default": false,
            "type": "boolean"
          },
          "variables": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CompiledToolNodeDataVariable"
            }
          },
          "toolSound": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ToolNodeDataToolSound"
              }
            ]
          },
          "captureResponse": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "capturePropertyResponse": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "messages": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CompiledAgentToolMessages"
              }
            ]
          },
          "captureInputVariables": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "captureInputProperties": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        },
        "required": [
          "apiToolID",
          "description",
          "variables"
        ]
      },
      "CompiledToolNodeDataVariable": {
        "type": "object",
        "properties": {
          "description": {
            "default": null,
            "nullable": true,
            "type": "string"
          },
          "shouldFulfill": {
            "description": "If true, then LLM will never ask user to fulfill an input variable. If false, then LLM will decide for itself whether user needs to provide a value for the input variable.",
            "type": "boolean"
          },
          "defaultValue": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "defaultValue"
        ]
      },
      "CompiledAgentFlowTool": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "flowID": {
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "variables": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CompiledAgentFlowToolVariable"
            }
          }
        },
        "required": [
          "id",
          "flowID",
          "description",
          "variables"
        ]
      },
      "CompiledAgentFlowToolVariable": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "required": {
            "type": "boolean"
          },
          "description": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "name",
          "required",
          "description"
        ]
      },
      "CompiledAgentPathTool": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "maxLength": 255
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "messages": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CompiledAgentToolMessages"
              }
            ]
          },
          "toolName": {
            "type": "string"
          },
          "variables": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CompiledAgentPathToolVariable"
            }
          },
          "hasToolNameWarning": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "name",
          "description",
          "variables"
        ]
      },
      "CompiledAgentPathToolVariable": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "required": {
            "type": "boolean"
          },
          "description": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "name",
          "required",
          "description"
        ]
      },
      "CompiledAgentFunctionTool": {
        "type": "object",
        "properties": {
          "functionID": {
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "asyncExecution": {
            "default": false,
            "type": "boolean"
          },
          "variables": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CompiledToolNodeDataVariable"
            }
          },
          "toolSound": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ToolNodeDataToolSound"
              }
            ]
          },
          "captureResponse": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "capturePropertyResponse": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "messages": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CompiledAgentToolMessages"
              }
            ]
          },
          "captureInputVariables": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "captureInputProperties": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        },
        "required": [
          "functionID",
          "description",
          "variables"
        ]
      },
      "CompiledAgentCallForwardTool": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "address": {
            "type": "string"
          },
          "messages": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CompiledAgentToolMessages"
              }
            ]
          },
          "extension": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "addressType": {
            "$ref": "#/components/schemas/CallForwardAddressType"
          },
          "toolSound": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ToolNodeDataToolSound"
              }
            ]
          },
          "callerIDPassthrough": {
            "type": "boolean"
          }
        },
        "required": [
          "enabled",
          "address",
          "description",
          "addressType"
        ]
      },
      "CompiledAgentIntegrationTool": {
        "type": "object",
        "properties": {
          "description": {
            "nullable": true,
            "type": "string"
          },
          "integrationToolID": {
            "type": "string"
          },
          "extendedInputVariables": {
            "nullable": true,
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/ToolExtendedInputVariable"
            }
          },
          "variables": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CompiledToolNodeDataVariable"
            }
          },
          "toolSound": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ToolNodeDataToolSound"
              }
            ]
          },
          "captureResponse": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "capturePropertyResponse": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "messages": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CompiledAgentToolMessages"
              }
            ]
          },
          "captureInputVariables": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "captureInputProperties": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        },
        "required": [
          "description",
          "integrationToolID",
          "variables"
        ]
      },
      "CompiledAgentKnowledgeBaseTool": {
        "type": "object",
        "properties": {
          "query": {
            "nullable": true,
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "filters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CompiledAgentKnowledgeBaseMetadataKeyFilter"
            }
          },
          "messages": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CompiledAgentToolMessages"
              }
            ]
          },
          "chunkLimit": {
            "nullable": true,
            "type": "number"
          },
          "queryMode": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentKnowledgeBaseToolQueryMode"
              }
            ]
          },
          "sourceUrlsCount": {
            "nullable": true,
            "type": "number"
          },
          "description": {
            "type": "string"
          },
          "toolSound": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ToolNodeDataToolSound"
              }
            ]
          }
        },
        "required": [
          "enabled",
          "description"
        ]
      },
      "CompiledAgentKnowledgeBaseMetadataKeyFilter": {
        "type": "object",
        "properties": {
          "description": {
            "default": null,
            "nullable": true,
            "type": "string"
          },
          "defaultValue": {
            "nullable": true,
            "type": "string"
          },
          "key": {
            "type": "string"
          }
        },
        "required": [
          "defaultValue",
          "key"
        ]
      },
      "CompiledAgentMcpIntegrationTool": {
        "type": "object",
        "properties": {
          "description": {
            "nullable": true,
            "type": "string"
          },
          "variables": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CompiledToolNodeDataVariable"
            }
          },
          "toolSound": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ToolNodeDataToolSound"
              }
            ]
          },
          "captureResponse": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "capturePropertyResponse": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "messages": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CompiledAgentToolMessages"
              }
            ]
          },
          "mcpIntegrationToolID": {
            "type": "string"
          },
          "captureInputVariables": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "captureInputProperties": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        },
        "required": [
          "description",
          "variables",
          "mcpIntegrationToolID"
        ]
      },
      "CompiledPrompt": {
        "type": "object",
        "properties": {
          "settings": {
            "$ref": "#/components/schemas/PromptSettings"
          },
          "system": {
            "type": "string"
          },
          "messages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AIMessageSimple"
            }
          }
        },
        "required": [
          "settings",
          "system",
          "messages"
        ]
      },
      "AIMessageSimple": {
        "type": "object",
        "properties": {
          "cachePoint": {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "default"
                ],
                "x-enumNames": [
                  "DEFAULT"
                ]
              }
            },
            "required": [
              "type"
            ]
          },
          "role": {
            "$ref": "#/components/schemas/AIMessageSimpleRole"
          },
          "content": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ContentPart"
                }
              }
            ]
          },
          "attachments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FileAttachmentMetadata"
            }
          }
        },
        "required": [
          "role",
          "content"
        ]
      },
      "AIMessageSimpleRole": {
        "type": "string",
        "enum": [
          "user",
          "assistant",
          "system"
        ],
        "x-enumNames": [
          "USER",
          "ASSISTANT",
          "SYSTEM"
        ]
      },
      "ContentPart": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/TextContentPart"
          },
          {
            "$ref": "#/components/schemas/ImageContentPart"
          },
          {
            "$ref": "#/components/schemas/DocumentContentPart"
          }
        ]
      },
      "TextContentPart": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "text"
            ],
            "x-enumNames": [
              "TEXT"
            ]
          },
          "text": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "text"
        ]
      },
      "ImageContentPart": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "image"
            ],
            "x-enumNames": [
              "IMAGE"
            ]
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "data": {
            "type": "string"
          },
          "mimeType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImageMimeType"
              }
            ]
          }
        },
        "required": [
          "type"
        ]
      },
      "ImageMimeType": {
        "type": "string",
        "enum": [
          "image/jpeg",
          "image/png",
          "image/gif",
          "image/webp"
        ],
        "x-enumNames": [
          "IMAGE_JPEG",
          "IMAGE_PNG",
          "IMAGE_GIF",
          "IMAGE_WEBP"
        ]
      },
      "DocumentContentPart": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "document"
            ],
            "x-enumNames": [
              "DOCUMENT"
            ]
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "data": {
            "type": "string"
          },
          "mimeType": {
            "type": "string",
            "enum": [
              "application/pdf"
            ],
            "x-enumNames": [
              "APPLICATION_PDF"
            ]
          }
        },
        "required": [
          "type"
        ]
      },
      "FileAttachmentMetadata": {
        "type": "object",
        "properties": {
          "filename": {
            "type": "string"
          },
          "mimeType": {
            "type": "string"
          },
          "description": {
            "type": "string"
          }
        },
        "required": [
          "filename",
          "mimeType",
          "description"
        ]
      },
      "CompiledAPITool": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 255
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "apiCall": {
            "type": "object",
            "properties": {
              "url": {
                "type": "string"
              },
              "body": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ApiNodeDataKeyValue"
                }
              },
              "method": {
                "$ref": "#/components/schemas/APINodeMethodType"
              },
              "params": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ApiNodeDataKeyValue"
                }
              },
              "headers": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ApiNodeDataKeyValue"
                }
              },
              "content": {
                "type": "string"
              },
              "bodyInputType": {
                "$ref": "#/components/schemas/APINodeBodyType"
              },
              "selected_action": {
                "$ref": "#/components/schemas/APINodeActionType"
              }
            },
            "required": [
              "url",
              "body",
              "method",
              "params",
              "headers",
              "content",
              "bodyInputType",
              "selected_action"
            ]
          },
          "toolName": {
            "type": "string"
          },
          "timeoutMs": {
            "type": "integer",
            "minimum": 0,
            "exclusiveMinimum": true,
            "maximum": 9007199254740991
          },
          "inputVariables": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CompiledAPIToolInputVariable"
            }
          },
          "hasToolNameWarning": {
            "type": "boolean"
          }
        },
        "required": [
          "name",
          "description",
          "apiCall",
          "inputVariables"
        ]
      },
      "ApiNodeDataKeyValue": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string"
          },
          "val": {
            "type": "string"
          }
        },
        "required": [
          "key",
          "val"
        ]
      },
      "APINodeMethodType": {
        "type": "string",
        "enum": [
          "GET",
          "PUT",
          "POST",
          "PATCH",
          "DELETE"
        ],
        "x-enumNames": [
          "GET",
          "PUT",
          "POST",
          "PATCH",
          "DELETE"
        ]
      },
      "APINodeBodyType": {
        "type": "string",
        "enum": [
          "formData",
          "rawInput",
          "urlEncoded"
        ],
        "x-enumNames": [
          "FORM_DATA",
          "RAW_INPUT",
          "URL_ENCODED"
        ]
      },
      "APINodeActionType": {
        "type": "string",
        "enum": [
          "Make a GET Request",
          "Make a PUT Request",
          "Make a POST Request",
          "Make a PATCH Request",
          "Make a DELETE Request"
        ],
        "x-enumNames": [
          "GET",
          "PUT",
          "POST",
          "PATCH",
          "DELETE"
        ]
      },
      "CompiledAPIToolInputVariable": {
        "type": "object",
        "properties": {
          "description": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "description"
        ]
      },
      "CompiledMessage": {
        "type": "object",
        "properties": {
          "variants": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/CompiledResponseMessage"
              }
            }
          }
        },
        "required": [
          "variants"
        ]
      },
      "CompiledResponseMessage": {
        "type": "object",
        "properties": {
          "condition": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AnyCompiledCondition"
              }
            ]
          },
          "data": {
            "$ref": "#/components/schemas/CompiledResponseMessageData"
          }
        },
        "required": [
          "condition",
          "data"
        ]
      },
      "AnyCompiledCondition": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/CompiledScriptCondition"
          },
          {
            "$ref": "#/components/schemas/CompiledPromptCondition"
          },
          {
            "$ref": "#/components/schemas/CompiledValueVariableCondition"
          }
        ]
      },
      "CompiledScriptCondition": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "script"
            ],
            "x-enumNames": [
              "SCRIPT"
            ]
          },
          "data": {
            "$ref": "#/components/schemas/CompiledScriptConditionData"
          }
        },
        "required": [
          "type",
          "data"
        ]
      },
      "CompiledScriptConditionData": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string"
          }
        },
        "required": [
          "code"
        ]
      },
      "CompiledPromptCondition": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "prompt"
            ],
            "x-enumNames": [
              "PROMPT"
            ]
          },
          "data": {
            "$ref": "#/components/schemas/CompiledPromptConditionData"
          }
        },
        "required": [
          "type",
          "data"
        ]
      },
      "CompiledPromptConditionData": {
        "type": "object",
        "properties": {
          "matchAll": {
            "type": "boolean"
          },
          "assertions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CompiledConditionAssertion"
            }
          }
        },
        "required": [
          "matchAll",
          "assertions"
        ]
      },
      "CompiledConditionAssertion": {
        "type": "object",
        "properties": {
          "lhs": {
            "type": "string"
          },
          "rhs": {
            "type": "string"
          },
          "operation": {
            "$ref": "#/components/schemas/ConditionOperation"
          }
        },
        "required": [
          "lhs",
          "rhs",
          "operation"
        ]
      },
      "CompiledValueVariableCondition": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "value-variable"
            ],
            "x-enumNames": [
              "VALUE_VARIABLE"
            ]
          },
          "data": {
            "$ref": "#/components/schemas/CompiledValueVariableConditionData"
          }
        },
        "required": [
          "type",
          "data"
        ]
      },
      "CompiledValueVariableConditionData": {
        "type": "object",
        "properties": {
          "matchAll": {
            "type": "boolean"
          },
          "assertions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CompiledConditionAssertion"
            }
          }
        },
        "required": [
          "matchAll",
          "assertions"
        ]
      },
      "CompiledResponseMessageData": {
        "type": "object",
        "properties": {
          "text": {
            "type": "array",
            "items": {}
          },
          "delay": {
            "nullable": true,
            "type": "number"
          }
        },
        "required": [
          "text",
          "delay"
        ]
      },
      "VersionProgramResourcesGlobalCrew": {
        "type": "object",
        "properties": {
          "nodeID": {
            "nullable": true,
            "type": "string"
          },
          "agentID": {
            "type": "string"
          },
          "subFlows": {
            "nullable": true,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CompiledCrewNodeDataFlow"
            }
          },
          "diagramID": {
            "nullable": true,
            "type": "string"
          },
          "subAgents": {
            "nullable": true,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CompiledCrewNodeDataAgent"
            }
          },
          "agentDescription": {
            "deprecated": true,
            "description": "Use global agent description instead",
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "agentID"
        ]
      },
      "CompiledCrewNodeDataFlow": {
        "type": "object",
        "properties": {
          "flowID": {
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "requiredVariables": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CompiledCrewNodeDataRequiredVariable"
            }
          },
          "condition": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CompiledValueVariableCondition"
              }
            ]
          }
        },
        "required": [
          "flowID",
          "description"
        ]
      },
      "CompiledCrewNodeDataRequiredVariable": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "name",
          "description"
        ]
      },
      "CompiledCrewNodeDataAgent": {
        "type": "object",
        "properties": {
          "agentID": {
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "requiredVariables": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CompiledCrewNodeDataRequiredVariable"
            }
          },
          "condition": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CompiledValueVariableCondition"
              }
            ]
          }
        },
        "required": [
          "agentID",
          "description"
        ]
      },
      "VersionProgramResourcesGlobalPrompts": {
        "type": "object",
        "properties": {
          "persona": {
            "nullable": true,
            "type": "string"
          },
          "guidelines": {
            "nullable": true,
            "type": "string"
          }
        }
      },
      "VersionProgramResourcesCostControl": {
        "type": "object",
        "properties": {
          "endMessage": {
            "nullable": true,
            "type": "string"
          }
        }
      },
      "CompiledMcpServer": {
        "type": "object",
        "properties": {
          "specification": {
            "default": "2025-03-26",
            "allOf": [
              {
                "$ref": "#/components/schemas/McpServerSpecification"
              }
            ]
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "headers": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "authType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/McpServerAuthType"
              }
            ]
          }
        }
      },
      "CompiledMcpServerTool": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "folderID": {
            "nullable": true,
            "type": "string"
          },
          "createdByID": {
            "type": "number"
          },
          "toolName": {
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "inputSchema": {
            "$ref": "#/components/schemas/JsonSchema"
          },
          "mcpServerID": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "createdAt",
          "updatedAt",
          "updatedByID",
          "folderID",
          "createdByID",
          "toolName",
          "inputSchema",
          "mcpServerID"
        ]
      },
      "CompiledIntegrationTool": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 255
          },
          "toolName": {
            "$ref": "#/components/schemas/IntegrationToolName"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "toolProvider": {
            "$ref": "#/components/schemas/IntegrationToolProvider"
          }
        },
        "required": [
          "name",
          "toolName",
          "description",
          "toolProvider"
        ]
      },
      "CompiledMcpIntegrationTool": {
        "type": "object",
        "properties": {
          "description": {
            "nullable": true,
            "type": "string"
          },
          "toolName": {
            "type": "string"
          },
          "inputSchema": {
            "$ref": "#/components/schemas/JsonSchema"
          },
          "mcpServerID": {
            "type": "string"
          }
        },
        "required": [
          "description",
          "toolName",
          "inputSchema",
          "mcpServerID"
        ]
      },
      "VersionNote": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "text": {
            "type": "string"
          },
          "meta": {
            "type": "object",
            "additionalProperties": {}
          },
          "mentions": {
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "id",
          "type",
          "text",
          "mentions"
        ]
      },
      "VersionFolderItem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "sourceID": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "sourceID"
        ]
      },
      "VersionFolder": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VersionFolderItem"
            }
          }
        },
        "required": [
          "id",
          "name",
          "items"
        ]
      },
      "VersionDomain": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "live": {
            "type": "boolean"
          },
          "status": {
            "type": "string"
          },
          "topicIDs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "updatedBy": {
            "type": "number"
          },
          "updatedAt": {
            "type": "string"
          },
          "rootDiagramID": {
            "type": "string"
          },
          "updatedByCreatorID": {
            "description": "@deprecated in favor of updatedBy",
            "type": "number"
          }
        },
        "required": [
          "id",
          "name",
          "live",
          "topicIDs",
          "rootDiagramID"
        ]
      },
      "VersionPrototype": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "data": {
            "$ref": "#/components/schemas/VersionPrototypeData"
          },
          "model": {
            "$ref": "#/components/schemas/PrototypeModel"
          },
          "context": {
            "$ref": "#/components/schemas/VersionPrototypeContext"
          },
          "platform": {
            "type": "string"
          },
          "settings": {
            "$ref": "#/components/schemas/VersionPrototypeSettings"
          },
          "surveyorContext": {
            "$ref": "#/components/schemas/VersionPrototypeSurveyorContext"
          }
        },
        "required": [
          "data",
          "model",
          "context",
          "platform",
          "settings",
          "surveyorContext"
        ],
        "additionalProperties": {}
      },
      "VersionPrototypeData": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "locales": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "messageDelay": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionPrototypeMessageDelay"
              }
            ]
          }
        },
        "required": [
          "name",
          "locales"
        ]
      },
      "VersionPrototypeMessageDelay": {
        "type": "object",
        "properties": {
          "durationMilliseconds": {
            "type": "number"
          }
        },
        "required": [
          "durationMilliseconds"
        ]
      },
      "VersionPrototypeContext": {
        "type": "object",
        "properties": {
          "turn": {
            "type": "object",
            "additionalProperties": {}
          },
          "stack": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VersionPrototypeStackFrame"
            }
          },
          "storage": {
            "type": "object",
            "additionalProperties": {}
          },
          "variables": {
            "type": "object",
            "additionalProperties": {}
          }
        }
      },
      "VersionPrototypeStackFrame": {
        "type": "object",
        "properties": {
          "nodeID": {
            "nullable": true,
            "type": "string"
          },
          "programID": {
            "nullable": true,
            "type": "string"
          },
          "storage": {
            "type": "object",
            "additionalProperties": {}
          },
          "commands": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "additionalProperties": {}
            }
          },
          "diagramID": {
            "type": "string"
          },
          "variables": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "diagramID"
        ]
      },
      "VersionPrototypeSettings": {
        "type": "object",
        "properties": {
          "avatar": {
            "type": "string"
          },
          "layout": {
            "type": "string"
          },
          "buttons": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionPrototypeButtonLayout"
              }
            ]
          },
          "password": {
            "type": "string"
          },
          "brandColor": {
            "type": "string"
          },
          "brandImage": {
            "type": "string"
          },
          "hasPassword": {
            "type": "boolean"
          },
          "hasBranding": {
            "type": "boolean"
          },
          "buttonsOnly": {
            "type": "boolean"
          },
          "variableStateID": {
            "nullable": true,
            "type": "string"
          }
        }
      },
      "VersionPrototypeButtonLayout": {
        "type": "string",
        "enum": [
          "stacked",
          "carousel"
        ],
        "x-enumNames": [
          "STACKED",
          "CAROUSEL"
        ]
      },
      "VersionPrototypeSurveyorContext": {
        "type": "object",
        "properties": {
          "platform": {
            "type": "string"
          },
          "slotsMap": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/PrototypeSlot"
            }
          },
          "extraSlots": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PrototypeSlot"
            }
          },
          "cmsEntities": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CompiledEntity"
            }
          },
          "extraIntents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PrototypeIntent"
            }
          },
          "cmsVariables": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CompiledVariable"
            }
          },
          "usedIntentsSet": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "functionDefinitions": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CompiledFunctionDefinition"
            }
          },
          "referencedAgentsIDs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "referencedPromptIDs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "referencedAPIToolIDs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "referencedResponseIDs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "referencedIntegrationToolIDs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "referencedMCPIntegrationToolIDs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "usedFunctionsMap": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        },
        "required": [
          "platform",
          "slotsMap",
          "extraSlots",
          "extraIntents"
        ],
        "additionalProperties": {}
      },
      "CompiledEntity": {
        "type": "object",
        "properties": {
          "variants": {
            "nullable": true,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CompiledEntityVariant"
            }
          },
          "classifier": {
            "nullable": true,
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "variants",
          "classifier",
          "description"
        ]
      },
      "CompiledEntityVariant": {
        "type": "object",
        "properties": {
          "value": {
            "type": "string"
          },
          "synonyms": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "value",
          "synonyms"
        ]
      },
      "CompiledVariable": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/CompiledSystemVariable"
          },
          {
            "$ref": "#/components/schemas/CompiledUserVariable"
          }
        ]
      },
      "CompiledSystemVariable": {
        "type": "object",
        "properties": {
          "isSystem": {
            "type": "boolean",
            "enum": [
              true
            ],
            "x-enumNames": [
              "TRUE"
            ]
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "defaultValue": {
            "nullable": true,
            "type": "string"
          },
          "resetAfter": {
            "type": "string",
            "enum": [
              "never",
              "session"
            ],
            "x-enumNames": [
              "NEVER",
              "EACH_SESSION"
            ]
          }
        },
        "required": [
          "isSystem",
          "defaultValue",
          "resetAfter"
        ]
      },
      "CompiledUserVariable": {
        "type": "object",
        "properties": {
          "isSystem": {
            "type": "boolean",
            "enum": [
              false
            ],
            "x-enumNames": [
              "FALSE"
            ]
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "defaultValue": {
            "nullable": true,
            "type": "string"
          },
          "resetAfter": {
            "type": "string",
            "enum": [
              "never",
              "session"
            ],
            "x-enumNames": [
              "NEVER",
              "EACH_SESSION"
            ]
          },
          "datatype": {
            "$ref": "#/components/schemas/VariableDatatype"
          },
          "isArray": {
            "type": "boolean"
          }
        },
        "required": [
          "isSystem",
          "defaultValue",
          "resetAfter",
          "datatype",
          "isArray"
        ]
      },
      "CompiledFunctionDefinition": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "toolName": {
            "type": "string"
          },
          "hasToolNameWarning": {
            "type": "boolean"
          },
          "codeId": {
            "type": "string",
            "description": "Amazon S3 bucket key of the .js file containing this Function's code"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "inputVars": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CompiledFunctionVariableDeclaration"
            },
            "description": "Mapping of input variable name to its variable declaration."
          },
          "outputVars": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CompiledFunctionVariableDeclaration"
            },
            "description": "Mapping of output variable name to its variable declaration."
          },
          "pathCodes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "List of valid return codes for a function"
          },
          "timeoutMs": {
            "type": "integer",
            "minimum": 0,
            "exclusiveMinimum": true,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "codeId",
          "inputVars",
          "outputVars",
          "pathCodes"
        ]
      },
      "CompiledFunctionVariableDeclaration": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "any",
              "text",
              "date",
              "image",
              "number",
              "boolean",
              "string"
            ],
            "description": "The type of the Function variable. Used to render suitable UI and perform data validation.",
            "x-enumNames": [
              "ANY",
              "TEXT",
              "DATE",
              "IMAGE",
              "NUMBER",
              "BOOLEAN",
              "STRING"
            ]
          },
          "description": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "type"
        ]
      },
      "Diagram": {
        "type": "object",
        "properties": {
          "_id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DiagramType"
              }
            ]
          },
          "zoom": {
            "type": "number"
          },
          "nodes": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/DiagramNode"
            }
          },
          "offsetX": {
            "type": "number"
          },
          "offsetY": {
            "type": "number"
          },
          "modified": {
            "type": "number"
          },
          "diagramID": {
            "type": "string"
          },
          "versionID": {
            "type": "string"
          },
          "creatorID": {
            "type": "number"
          },
          "variables": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "children": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "menuItems": {
            "description": "@deprecated not used anymore",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DiagramMenuItem"
            }
          },
          "menuNodeIDs": {
            "description": "@deprecated in favor of menuItems",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "intentStepIDs": {
            "description": "@deprecated in favor of menuNodeIDs",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "_id",
          "name",
          "zoom",
          "nodes",
          "offsetX",
          "offsetY",
          "modified",
          "diagramID",
          "versionID",
          "creatorID",
          "variables"
        ]
      },
      "DiagramType": {
        "type": "string",
        "enum": [
          "TOPIC",
          "GROUP",
          "TEMPLATE",
          "COMPONENT"
        ],
        "x-enumNames": [
          "TOPIC",
          "GROUP",
          "TEMPLATE",
          "COMPONENT"
        ]
      },
      "DiagramNode": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "data": {
            "type": "object",
            "additionalProperties": {}
          },
          "nodeID": {
            "type": "string"
          },
          "coords": {
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "number"
                }
              ]
            },
            "minItems": 2,
            "maxItems": 2
          }
        },
        "required": [
          "type",
          "data",
          "nodeID"
        ]
      },
      "DiagramMenuItem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "sourceID": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "sourceID"
        ]
      },
      "Intent": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "maxLength": 255
          },
          "folderID": {
            "nullable": true,
            "type": "string"
          },
          "createdByID": {
            "type": "number"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "entityOrder": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "automaticReprompt": {
            "type": "boolean"
          },
          "automaticRepromptSettings": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AutomaticReprompt"
              }
            ]
          }
        },
        "required": [
          "id",
          "createdAt",
          "updatedAt",
          "updatedByID",
          "name",
          "folderID",
          "createdByID",
          "description",
          "entityOrder",
          "automaticReprompt",
          "automaticRepromptSettings"
        ]
      },
      "AutomaticReprompt": {
        "type": "object",
        "properties": {
          "params": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AutomaticRepromptParams"
              }
            ]
          }
        },
        "required": [
          "params"
        ]
      },
      "Utterance": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "text": {
            "$ref": "#/components/schemas/UtteranceText"
          },
          "language": {
            "$ref": "#/components/schemas/Language"
          },
          "intentID": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "createdAt",
          "text",
          "language",
          "intentID"
        ]
      },
      "UtteranceText": {
        "type": "array",
        "items": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/components/schemas/UtteranceTextEntityReference"
            },
            {
              "$ref": "#/components/schemas/UtteranceTextSpan"
            }
          ]
        }
      },
      "UtteranceTextEntityReference": {
        "type": "object",
        "properties": {
          "entityID": {
            "type": "string"
          }
        },
        "required": [
          "entityID"
        ]
      },
      "UtteranceTextSpan": {
        "type": "object",
        "properties": {
          "text": {
            "$ref": "#/components/schemas/UtteranceText"
          },
          "attributes": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "text"
        ]
      },
      "RequiredEntity": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "intentID": {
            "type": "string"
          },
          "entityID": {
            "type": "string"
          },
          "repromptID": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "id",
          "createdAt",
          "intentID",
          "entityID",
          "repromptID"
        ]
      },
      "Event": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "folderID": {
            "nullable": true,
            "type": "string"
          },
          "createdByID": {
            "type": "number"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255
          },
          "flowID": {
            "default": null,
            "nullable": true,
            "type": "string"
          },
          "goesTo": {
            "default": null,
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/EventGoesToType"
              }
            ]
          },
          "isSystem": {
            "type": "boolean"
          },
          "requestName": {
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "id",
          "createdAt",
          "updatedAt",
          "updatedByID",
          "folderID",
          "createdByID",
          "name",
          "isSystem",
          "requestName",
          "description"
        ]
      },
      "EventGoesToType": {
        "type": "string",
        "enum": [
          "global_agent",
          "flow",
          "continue"
        ],
        "x-enumNames": [
          "GLOBAL_AGENT",
          "FLOW",
          "CONTINUE"
        ]
      },
      "Folder": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255
          },
          "scope": {
            "$ref": "#/components/schemas/FolderScope"
          },
          "parentID": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "id",
          "createdAt",
          "name",
          "scope",
          "parentID"
        ]
      },
      "FolderScope": {
        "type": "string",
        "enum": [
          "flow",
          "event",
          "agent",
          "prompt",
          "entity",
          "intent",
          "message",
          "workflow",
          "variable",
          "function",
          "simulation",
          "knowledge-base"
        ],
        "x-enumNames": [
          "FLOW",
          "EVENT",
          "AGENT",
          "PROMPT",
          "ENTITY",
          "INTENT",
          "MESSAGE",
          "WORKFLOW",
          "VARIABLE",
          "FUNCTION",
          "SIMULATION",
          "KNOWLEDGE_BASE"
        ]
      },
      "Simulation": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "maxLength": 255
          },
          "folderID": {
            "nullable": true,
            "type": "string"
          },
          "createdByID": {
            "type": "number"
          },
          "settings": {
            "$ref": "#/components/schemas/SimulationSettings"
          },
          "turnOrder": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "id",
          "createdAt",
          "updatedAt",
          "updatedByID",
          "name",
          "folderID",
          "createdByID",
          "settings",
          "turnOrder"
        ]
      },
      "SimulationSettings": {
        "type": "object",
        "properties": {
          "launchEvent": {
            "nullable": true,
            "type": "string"
          },
          "variableStates": {
            "default": [],
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PersonaItem"
                }
              }
            ]
          }
        },
        "required": [
          "launchEvent"
        ]
      },
      "PersonaItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "variableID": {
            "nullable": true,
            "type": "string"
          },
          "value": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "id",
          "variableID",
          "value"
        ]
      },
      "SimulationTurn": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/UserSimulationTurn"
          },
          {
            "$ref": "#/components/schemas/AgentSimulationTurn"
          },
          {
            "$ref": "#/components/schemas/SimulationSimulationTurn"
          }
        ]
      },
      "UserSimulationTurn": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "environmentID": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "user"
            ],
            "x-enumNames": [
              "USER"
            ]
          },
          "payload": {
            "$ref": "#/components/schemas/UserSimulationTurnPayload"
          },
          "testOrder": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "simulationID": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "createdAt",
          "type",
          "payload",
          "testOrder",
          "simulationID"
        ]
      },
      "UserSimulationTurnPayload": {
        "type": "object",
        "properties": {
          "response": {
            "type": "string"
          },
          "variableStates": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PersonaItem"
                }
              }
            ]
          }
        },
        "required": [
          "response",
          "variableStates"
        ]
      },
      "AgentSimulationTurn": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "environmentID": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "agent"
            ],
            "x-enumNames": [
              "AGENT"
            ]
          },
          "payload": {
            "$ref": "#/components/schemas/AgentSimulationTurnPayload"
          },
          "testOrder": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "simulationID": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "createdAt",
          "type",
          "payload",
          "testOrder",
          "simulationID"
        ]
      },
      "AgentSimulationTurnPayload": {
        "type": "object",
        "properties": {
          "testOrderMatters": {
            "type": "boolean"
          }
        },
        "required": [
          "testOrderMatters"
        ]
      },
      "SimulationSimulationTurn": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "environmentID": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "simulation"
            ],
            "x-enumNames": [
              "SIMULATION"
            ]
          },
          "payload": {
            "$ref": "#/components/schemas/SimulationSimulationTurnPayload"
          },
          "testOrder": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "simulationID": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "createdAt",
          "type",
          "payload",
          "testOrder",
          "simulationID"
        ]
      },
      "SimulationSimulationTurnPayload": {
        "type": "object",
        "properties": {
          "scenario": {
            "type": "string"
          },
          "maxTurns": {
            "type": "number"
          },
          "variableStates": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PersonaItem"
                }
              }
            ]
          },
          "successCriteria": {
            "type": "string"
          }
        },
        "required": [
          "scenario",
          "maxTurns",
          "variableStates",
          "successCriteria"
        ]
      },
      "SimulationTurnTest": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/ToolSimulationTurnTest"
          },
          {
            "$ref": "#/components/schemas/RoutingSimulationTurnTest"
          },
          {
            "$ref": "#/components/schemas/ResponseSimulationTurnTest"
          }
        ]
      },
      "ToolSimulationTurnTest": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "environmentID": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "tool"
            ],
            "x-enumNames": [
              "TOOL"
            ]
          },
          "turnID": {
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/ToolSimulationTurnTestPayload"
          }
        },
        "required": [
          "id",
          "createdAt",
          "type",
          "turnID",
          "payload"
        ]
      },
      "ToolSimulationTurnTestPayload": {
        "type": "object",
        "properties": {
          "tool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ToolSimulationTurnTestPayloadTool"
              }
            ]
          },
          "shouldCall": {
            "type": "boolean"
          }
        },
        "required": [
          "tool",
          "shouldCall"
        ]
      },
      "ToolSimulationTurnTestPayloadTool": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/NativeToolSimulationTurnTestPayload"
          },
          {
            "$ref": "#/components/schemas/ApiCallToolSimulationTurnTestPayload"
          },
          {
            "$ref": "#/components/schemas/FunctionToolSimulationTurnTestPayload"
          },
          {
            "$ref": "#/components/schemas/IntegrationToolSimulationTurnTestPayload"
          },
          {
            "$ref": "#/components/schemas/McpIntegrationToolSimulationTurnTestPayload"
          }
        ]
      },
      "NativeToolSimulationTurnTestPayload": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "native"
            ],
            "x-enumNames": [
              "NATIVE"
            ]
          },
          "kind": {
            "$ref": "#/components/schemas/SimulationTurnTestToolNativeKind"
          }
        },
        "required": [
          "type",
          "kind"
        ]
      },
      "SimulationTurnTestToolNativeKind": {
        "type": "string",
        "enum": [
          "end",
          "card",
          "button",
          "carousel",
          "skip-turn",
          "web-search",
          "call-forward",
          "knowledge-base"
        ],
        "x-enumNames": [
          "END",
          "CARD",
          "BUTTON",
          "CAROUSEL",
          "SKIP_TURN",
          "WEB_SEARCH",
          "CALL_FORWARD",
          "KNOWLEDGE_BASE"
        ]
      },
      "ApiCallToolSimulationTurnTestPayload": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "api-call"
            ],
            "x-enumNames": [
              "API_CALL"
            ]
          },
          "toolID": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "toolID"
        ]
      },
      "FunctionToolSimulationTurnTestPayload": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "function"
            ],
            "x-enumNames": [
              "FUNCTION"
            ]
          },
          "toolID": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "toolID"
        ]
      },
      "IntegrationToolSimulationTurnTestPayload": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "integration"
            ],
            "x-enumNames": [
              "INTEGRATION"
            ]
          },
          "toolID": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "toolID"
        ]
      },
      "McpIntegrationToolSimulationTurnTestPayload": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "mcp-integration"
            ],
            "x-enumNames": [
              "MCP_INTEGRATION"
            ]
          },
          "toolID": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "toolID"
        ]
      },
      "RoutingSimulationTurnTest": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "environmentID": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "routing"
            ],
            "x-enumNames": [
              "ROUTING"
            ]
          },
          "turnID": {
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/RoutingSimulationTurnTestPayload"
          }
        },
        "required": [
          "id",
          "createdAt",
          "type",
          "turnID",
          "payload"
        ]
      },
      "RoutingSimulationTurnTestPayload": {
        "type": "object",
        "properties": {
          "routeTo": {
            "nullable": true,
            "type": "object",
            "properties": {
              "resourceID": {
                "type": "string"
              },
              "resourceType": {
                "$ref": "#/components/schemas/SimulationTurnTestResourceType"
              }
            },
            "required": [
              "resourceID",
              "resourceType"
            ]
          },
          "shouldRoute": {
            "type": "boolean"
          }
        },
        "required": [
          "routeTo",
          "shouldRoute"
        ]
      },
      "SimulationTurnTestResourceType": {
        "type": "string",
        "enum": [
          "flow",
          "agent"
        ],
        "x-enumNames": [
          "FLOW",
          "AGENT"
        ]
      },
      "ResponseSimulationTurnTest": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "environmentID": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "response"
            ],
            "x-enumNames": [
              "RESPONSE"
            ]
          },
          "turnID": {
            "type": "string"
          },
          "payload": {
            "$ref": "#/components/schemas/ResponseSimulationTurnTestPayload"
          }
        },
        "required": [
          "id",
          "createdAt",
          "type",
          "turnID",
          "payload"
        ]
      },
      "ResponseSimulationTurnTestPayload": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/SimulationTurnTestJudgeEqual"
          },
          {
            "$ref": "#/components/schemas/SimulationTurnTestJudgeLLMEval"
          }
        ]
      },
      "SimulationTurnTestJudgeEqual": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "equal"
            ],
            "x-enumNames": [
              "EQUAL"
            ]
          },
          "value": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "value"
        ]
      },
      "SimulationTurnTestJudgeLLMEval": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "llm_eval"
            ],
            "x-enumNames": [
              "LLM_EVAL"
            ]
          },
          "prompt": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "prompt"
        ]
      },
      "Workflow": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "folderID": {
            "nullable": true,
            "type": "string"
          },
          "createdByID": {
            "type": "number"
          },
          "status": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/WorkflowStatus"
              }
            ]
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255
          },
          "isStart": {
            "type": "boolean"
          },
          "diagramID": {
            "type": "string"
          },
          "assigneeID": {
            "nullable": true,
            "type": "number"
          },
          "description": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "id",
          "createdAt",
          "updatedAt",
          "updatedByID",
          "folderID",
          "createdByID",
          "status",
          "name",
          "isStart",
          "diagramID",
          "assigneeID",
          "description"
        ]
      },
      "WorkflowStatus": {
        "type": "string",
        "enum": [
          "to_do",
          "complete",
          "in_progress"
        ],
        "x-enumNames": [
          "TO_DO",
          "COMPLETE",
          "IN_PROGRESS"
        ]
      },
      "AnyAttachment": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/CardAttachment"
          },
          {
            "$ref": "#/components/schemas/MediaAttachment"
          }
        ]
      },
      "CardAttachment": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "card"
            ],
            "x-enumNames": [
              "CARD"
            ]
          },
          "title": {
            "$ref": "#/components/schemas/Markup"
          },
          "mediaID": {
            "nullable": true,
            "type": "string"
          },
          "description": {
            "$ref": "#/components/schemas/Markup"
          },
          "buttonOrder": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "id",
          "createdAt",
          "type",
          "title",
          "mediaID",
          "description",
          "buttonOrder"
        ]
      },
      "MediaAttachment": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "media"
            ],
            "x-enumNames": [
              "MEDIA"
            ]
          },
          "url": {
            "$ref": "#/components/schemas/Markup"
          },
          "name": {
            "type": "string",
            "maxLength": 255
          },
          "isAsset": {
            "type": "boolean"
          },
          "datatype": {
            "$ref": "#/components/schemas/MediaDatatype"
          }
        },
        "required": [
          "id",
          "createdAt",
          "type",
          "url",
          "name",
          "isAsset",
          "datatype"
        ]
      },
      "MediaDatatype": {
        "type": "string",
        "enum": [
          "image",
          "video"
        ],
        "x-enumNames": [
          "IMAGE",
          "VIDEO"
        ]
      },
      "CardButton": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "label": {
            "$ref": "#/components/schemas/Markup"
          },
          "cardID": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "createdAt",
          "label",
          "cardID"
        ]
      },
      "Persona": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedByID": {
            "nullable": true,
            "type": "number"
          },
          "assistantID": {
            "type": "string"
          },
          "environmentID": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PersonaItem"
            }
          }
        },
        "required": [
          "id",
          "createdAt",
          "updatedAt",
          "updatedByID",
          "name",
          "items"
        ]
      },
      "KBDocumentVersionBackup": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "documentID": {
            "type": "string"
          },
          "versionID": {
            "type": "string"
          },
          "folderID": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "id",
          "documentID",
          "versionID",
          "folderID"
        ]
      },
      "KBSettingsBackup": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "versionID": {
            "type": "string"
          },
          "summarization": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/KnowledgeBaseSummarization"
              }
            ]
          },
          "chunkStrategy": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/KnowledgeBaseChunkStrategy"
              }
            ]
          },
          "search": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/KnowledgeBaseSearch"
              }
            ]
          },
          "embeddingModel": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/KnowledgeBaseEmbeddingModel"
              }
            ]
          }
        },
        "required": [
          "id",
          "versionID",
          "summarization",
          "chunkStrategy",
          "search"
        ]
      },
      "KBDocumentMetadataM2MBackup": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "metadataFieldID": {
            "type": "string"
          },
          "documentID": {
            "type": "string"
          },
          "versionID": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "metadataFieldID",
          "documentID",
          "versionID"
        ]
      },
      "AssistantExportData": {
        "type": "object",
        "properties": {
          "secrets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Secret"
            }
          },
          "project": {
            "$ref": "#/components/schemas/Project"
          },
          "_version": {
            "type": "string"
          },
          "programs": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/Program"
            }
          },
          "assistant": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/Assistant"
              }
            ]
          },
          "variableStates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VariableState"
            }
          },
          "transcriptEvaluations": {
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 100,
                      "description": "Name of the evaluation."
                    },
                    "description": {
                      "description": "Description of the evaluation.",
                      "nullable": true,
                      "type": "string",
                      "maxLength": 250
                    },
                    "enabled": {
                      "type": "boolean",
                      "description": "When enabled, evaluations will be run on every new transcript."
                    },
                    "prompt": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 10000,
                      "description": "This prompt describes how the LLM should apply this evaluation."
                    },
                    "settings": {
                      "description": "The model settings passed when invoking this evaluation.",
                      "nullable": true,
                      "type": "object",
                      "properties": {
                        "model": {
                          "type": "string",
                          "enum": [
                            "gpt-3.5-turbo-1106",
                            "gpt-3.5-turbo",
                            "gpt-4",
                            "gpt-4o",
                            "gpt-4o-mini",
                            "gpt-4.1-2025-04-14",
                            "gpt-4.1-mini-2025-04-14",
                            "gpt-4.1-nano-2025-04-14",
                            "gpt-o3-mini",
                            "o3-2025-04-16",
                            "o4-mini-2025-04-16",
                            "gpt-5",
                            "gpt-5-mini",
                            "gpt-5-nano",
                            "gpt-5.2",
                            "gpt-5.4",
                            "gpt-5.4-mini",
                            "gpt-5.5",
                            "gpt-5.6-sol",
                            "gpt-5.6-terra",
                            "gpt-5.6-luna",
                            "gpt-realtime",
                            "gpt-live-1",
                            "claude-4-opus",
                            "claude-4-sonnet",
                            "claude-4.5-sonnet",
                            "claude-4.6-sonnet",
                            "claude-4.5-haiku",
                            "claude-4.5-opus",
                            "claude-4.7-opus",
                            "bedrock-claude-4-sonnet",
                            "bedrock-claude-4.5-sonnet",
                            "bedrock-claude-4.6-sonnet",
                            "bedrock-claude-5-sonnet",
                            "bedrock-claude-4.5-haiku",
                            "bedrock-claude-4.5-opus",
                            "bedrock-claude-4.7-opus",
                            "bedrock-claude-4.8-opus",
                            "voiceflow-core-4.0",
                            "voiceflow-core-4.1",
                            "voiceflow-flash-4.2",
                            "kimi-k3",
                            "gemini-2.5-pro",
                            "gemini-2.5-flash",
                            "gemini-live-2.5-flash",
                            "gemini-3-flash",
                            "gemini-3.5-flash",
                            "gemini-3.1-pro",
                            "gpt-oss-20b",
                            "gpt-oss-120b",
                            "llama-guard-4",
                            "llama-3.1-instant",
                            "llama-3.3-versatile",
                            "qwen3.6-27b",
                            "grok-4.6",
                            "voiceflow-flash-4.1",
                            "gemini-flash-2",
                            "gpt-4-turbo",
                            "claude-3.5-haiku",
                            "claude-3-opus",
                            "claude-3.7-sonnet",
                            "claude-v2",
                            "llama-3.2-1b-preview",
                            "gemini-pro-1.5",
                            "claude-3-haiku",
                            "claude-3-sonnet",
                            "text-davinci-003",
                            "claude-v1",
                            "claude-instant-v1",
                            "deep-seek-r1-distill-llama-70B",
                            "claude-3.5-sonnet"
                          ],
                          "x-enumNames": [
                            "GPT_3_5_TURBO_1106",
                            "GPT_3_5_TURBO",
                            "GPT_4",
                            "GPT_4_O",
                            "GPT_4_O_MINI",
                            "GPT_4_1_2025_04_14",
                            "GPT_4_1_MINI_2025_04_14",
                            "GPT_4_1_NANO_2025_04_14",
                            "GPT_O_3_MINI",
                            "O_3_2025_04_16",
                            "O_4_MINI_2025_04_16",
                            "GPT_5",
                            "GPT_5_MINI",
                            "GPT_5_NANO",
                            "GPT_5_2",
                            "GPT_5_4",
                            "GPT_5_4_MINI",
                            "GPT_5_5",
                            "GPT_5_6_SOL",
                            "GPT_5_6_TERRA",
                            "GPT_5_6_LUNA",
                            "GPT_REALTIME",
                            "GPT_LIVE_1",
                            "CLAUDE_4_OPUS",
                            "CLAUDE_4_SONNET",
                            "CLAUDE_4_5_SONNET",
                            "CLAUDE_4_6_SONNET",
                            "CLAUDE_4_5_HAIKU",
                            "CLAUDE_4_5_OPUS",
                            "CLAUDE_4_7_OPUS",
                            "BEDROCK_CLAUDE_4_SONNET",
                            "BEDROCK_CLAUDE_4_5_SONNET",
                            "BEDROCK_CLAUDE_4_6_SONNET",
                            "BEDROCK_CLAUDE_5_SONNET",
                            "BEDROCK_CLAUDE_4_5_HAIKU",
                            "BEDROCK_CLAUDE_4_5_OPUS",
                            "BEDROCK_CLAUDE_4_7_OPUS",
                            "BEDROCK_CLAUDE_4_8_OPUS",
                            "VOICEFLOW_CORE_4_0",
                            "VOICEFLOW_CORE_4_1",
                            "VOICEFLOW_FLASH_4_2",
                            "KIMI_K_3",
                            "GEMINI_2_5_PRO",
                            "GEMINI_2_5_FLASH",
                            "GEMINI_LIVE_2_5_FLASH",
                            "GEMINI_3_FLASH",
                            "GEMINI_3_5_FLASH",
                            "GEMINI_3_1_PRO",
                            "GPT_OSS_20_B",
                            "GPT_OSS_120_B",
                            "LLAMA_GUARD_4",
                            "LLAMA_3_1_INSTANT",
                            "LLAMA_3_3_VERSATILE",
                            "QWEN_3_6_27_B",
                            "GROK_4_6",
                            "VOICEFLOW_FLASH_4_1",
                            "GEMINI_FLASH_2",
                            "GPT_4_TURBO",
                            "CLAUDE_3_5_HAIKU",
                            "CLAUDE_3_OPUS",
                            "CLAUDE_3_7_SONNET",
                            "CLAUDE_V_2",
                            "LLAMA_3_2_1_B_PREVIEW",
                            "GEMINI_PRO_1_5",
                            "CLAUDE_3_HAIKU",
                            "CLAUDE_3_SONNET",
                            "TEXT_DAVINCI_003",
                            "CLAUDE_V_1",
                            "CLAUDE_INSTANT_V_1",
                            "DEEP_SEEK_R_1_DISTILL_LLAMA_70_B",
                            "CLAUDE_3_5_SONNET"
                          ]
                        },
                        "realtime": {
                          "type": "object",
                          "properties": {
                            "voice": {
                              "type": "string"
                            },
                            "eagerness": {
                              "type": "string"
                            }
                          },
                          "additionalProperties": false
                        },
                        "maxTokens": {
                          "type": "number"
                        },
                        "temperature": {
                          "type": "number"
                        },
                        "reasoningEffort": {
                          "nullable": true,
                          "type": "string",
                          "enum": [
                            "off",
                            "adaptive",
                            "minimal",
                            "low",
                            "medium",
                            "high"
                          ],
                          "x-enumNames": [
                            "OFF",
                            "ADAPTIVE",
                            "MINIMAL",
                            "LOW",
                            "MEDIUM",
                            "HIGH"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "runScope": {
                      "description": "Which transcripts this evaluation runs on automatically, by the publish state of their version.",
                      "type": "string",
                      "enum": [
                        "both",
                        "draft",
                        "published"
                      ],
                      "x-enumNames": [
                        "BOTH",
                        "DRAFT",
                        "PUBLISHED"
                      ]
                    },
                    "type": {
                      "type": "string",
                      "enum": [
                        "boolean"
                      ],
                      "description": "The type of binary evaluations.",
                      "x-enumNames": [
                        "BOOLEAN"
                      ]
                    },
                    "truePrompt": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 10000,
                      "description": "This prompt describes which transcripts should evaluate as 'true'."
                    },
                    "falsePrompt": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 10000,
                      "description": "This prompt describes which transcripts should evaluate as 'false'."
                    },
                    "systemTag": {
                      "nullable": true,
                      "type": "string",
                      "maxLength": 255
                    },
                    "id": {
                      "type": "string"
                    },
                    "default": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "name",
                    "enabled",
                    "prompt",
                    "type",
                    "truePrompt",
                    "falsePrompt",
                    "default"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 100,
                      "description": "Name of the evaluation."
                    },
                    "description": {
                      "description": "Description of the evaluation.",
                      "nullable": true,
                      "type": "string",
                      "maxLength": 250
                    },
                    "enabled": {
                      "type": "boolean",
                      "description": "When enabled, evaluations will be run on every new transcript."
                    },
                    "prompt": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 10000,
                      "description": "This prompt describes how the LLM should apply this evaluation."
                    },
                    "settings": {
                      "description": "The model settings passed when invoking this evaluation.",
                      "nullable": true,
                      "type": "object",
                      "properties": {
                        "model": {
                          "type": "string",
                          "enum": [
                            "gpt-3.5-turbo-1106",
                            "gpt-3.5-turbo",
                            "gpt-4",
                            "gpt-4o",
                            "gpt-4o-mini",
                            "gpt-4.1-2025-04-14",
                            "gpt-4.1-mini-2025-04-14",
                            "gpt-4.1-nano-2025-04-14",
                            "gpt-o3-mini",
                            "o3-2025-04-16",
                            "o4-mini-2025-04-16",
                            "gpt-5",
                            "gpt-5-mini",
                            "gpt-5-nano",
                            "gpt-5.2",
                            "gpt-5.4",
                            "gpt-5.4-mini",
                            "gpt-5.5",
                            "gpt-5.6-sol",
                            "gpt-5.6-terra",
                            "gpt-5.6-luna",
                            "gpt-realtime",
                            "gpt-live-1",
                            "claude-4-opus",
                            "claude-4-sonnet",
                            "claude-4.5-sonnet",
                            "claude-4.6-sonnet",
                            "claude-4.5-haiku",
                            "claude-4.5-opus",
                            "claude-4.7-opus",
                            "bedrock-claude-4-sonnet",
                            "bedrock-claude-4.5-sonnet",
                            "bedrock-claude-4.6-sonnet",
                            "bedrock-claude-5-sonnet",
                            "bedrock-claude-4.5-haiku",
                            "bedrock-claude-4.5-opus",
                            "bedrock-claude-4.7-opus",
                            "bedrock-claude-4.8-opus",
                            "voiceflow-core-4.0",
                            "voiceflow-core-4.1",
                            "voiceflow-flash-4.2",
                            "kimi-k3",
                            "gemini-2.5-pro",
                            "gemini-2.5-flash",
                            "gemini-live-2.5-flash",
                            "gemini-3-flash",
                            "gemini-3.5-flash",
                            "gemini-3.1-pro",
                            "gpt-oss-20b",
                            "gpt-oss-120b",
                            "llama-guard-4",
                            "llama-3.1-instant",
                            "llama-3.3-versatile",
                            "qwen3.6-27b",
                            "grok-4.6",
                            "voiceflow-flash-4.1",
                            "gemini-flash-2",
                            "gpt-4-turbo",
                            "claude-3.5-haiku",
                            "claude-3-opus",
                            "claude-3.7-sonnet",
                            "claude-v2",
                            "llama-3.2-1b-preview",
                            "gemini-pro-1.5",
                            "claude-3-haiku",
                            "claude-3-sonnet",
                            "text-davinci-003",
                            "claude-v1",
                            "claude-instant-v1",
                            "deep-seek-r1-distill-llama-70B",
                            "claude-3.5-sonnet"
                          ],
                          "x-enumNames": [
                            "GPT_3_5_TURBO_1106",
                            "GPT_3_5_TURBO",
                            "GPT_4",
                            "GPT_4_O",
                            "GPT_4_O_MINI",
                            "GPT_4_1_2025_04_14",
                            "GPT_4_1_MINI_2025_04_14",
                            "GPT_4_1_NANO_2025_04_14",
                            "GPT_O_3_MINI",
                            "O_3_2025_04_16",
                            "O_4_MINI_2025_04_16",
                            "GPT_5",
                            "GPT_5_MINI",
                            "GPT_5_NANO",
                            "GPT_5_2",
                            "GPT_5_4",
                            "GPT_5_4_MINI",
                            "GPT_5_5",
                            "GPT_5_6_SOL",
                            "GPT_5_6_TERRA",
                            "GPT_5_6_LUNA",
                            "GPT_REALTIME",
                            "GPT_LIVE_1",
                            "CLAUDE_4_OPUS",
                            "CLAUDE_4_SONNET",
                            "CLAUDE_4_5_SONNET",
                            "CLAUDE_4_6_SONNET",
                            "CLAUDE_4_5_HAIKU",
                            "CLAUDE_4_5_OPUS",
                            "CLAUDE_4_7_OPUS",
                            "BEDROCK_CLAUDE_4_SONNET",
                            "BEDROCK_CLAUDE_4_5_SONNET",
                            "BEDROCK_CLAUDE_4_6_SONNET",
                            "BEDROCK_CLAUDE_5_SONNET",
                            "BEDROCK_CLAUDE_4_5_HAIKU",
                            "BEDROCK_CLAUDE_4_5_OPUS",
                            "BEDROCK_CLAUDE_4_7_OPUS",
                            "BEDROCK_CLAUDE_4_8_OPUS",
                            "VOICEFLOW_CORE_4_0",
                            "VOICEFLOW_CORE_4_1",
                            "VOICEFLOW_FLASH_4_2",
                            "KIMI_K_3",
                            "GEMINI_2_5_PRO",
                            "GEMINI_2_5_FLASH",
                            "GEMINI_LIVE_2_5_FLASH",
                            "GEMINI_3_FLASH",
                            "GEMINI_3_5_FLASH",
                            "GEMINI_3_1_PRO",
                            "GPT_OSS_20_B",
                            "GPT_OSS_120_B",
                            "LLAMA_GUARD_4",
                            "LLAMA_3_1_INSTANT",
                            "LLAMA_3_3_VERSATILE",
                            "QWEN_3_6_27_B",
                            "GROK_4_6",
                            "VOICEFLOW_FLASH_4_1",
                            "GEMINI_FLASH_2",
                            "GPT_4_TURBO",
                            "CLAUDE_3_5_HAIKU",
                            "CLAUDE_3_OPUS",
                            "CLAUDE_3_7_SONNET",
                            "CLAUDE_V_2",
                            "LLAMA_3_2_1_B_PREVIEW",
                            "GEMINI_PRO_1_5",
                            "CLAUDE_3_HAIKU",
                            "CLAUDE_3_SONNET",
                            "TEXT_DAVINCI_003",
                            "CLAUDE_V_1",
                            "CLAUDE_INSTANT_V_1",
                            "DEEP_SEEK_R_1_DISTILL_LLAMA_70_B",
                            "CLAUDE_3_5_SONNET"
                          ]
                        },
                        "realtime": {
                          "type": "object",
                          "properties": {
                            "voice": {
                              "type": "string"
                            },
                            "eagerness": {
                              "type": "string"
                            }
                          },
                          "additionalProperties": false
                        },
                        "maxTokens": {
                          "type": "number"
                        },
                        "temperature": {
                          "type": "number"
                        },
                        "reasoningEffort": {
                          "nullable": true,
                          "type": "string",
                          "enum": [
                            "off",
                            "adaptive",
                            "minimal",
                            "low",
                            "medium",
                            "high"
                          ],
                          "x-enumNames": [
                            "OFF",
                            "ADAPTIVE",
                            "MINIMAL",
                            "LOW",
                            "MEDIUM",
                            "HIGH"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "runScope": {
                      "description": "Which transcripts this evaluation runs on automatically, by the publish state of their version.",
                      "type": "string",
                      "enum": [
                        "both",
                        "draft",
                        "published"
                      ],
                      "x-enumNames": [
                        "BOTH",
                        "DRAFT",
                        "PUBLISHED"
                      ]
                    },
                    "type": {
                      "type": "string",
                      "enum": [
                        "number"
                      ],
                      "description": "The type of rating evaluations.",
                      "x-enumNames": [
                        "NUMBER"
                      ]
                    },
                    "minimumValue": {
                      "type": "number",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991,
                      "description": "The lowest rating that can be applied."
                    },
                    "minimumPrompt": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 10000,
                      "description": "This prompt describes which transcripts should receive lower ratings."
                    },
                    "maximumValue": {
                      "type": "number",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991,
                      "description": "The highest rating that can be applied."
                    },
                    "maximumPrompt": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 10000,
                      "description": "This prompt describes which transcripts should receive higher ratings."
                    },
                    "systemTag": {
                      "nullable": true,
                      "type": "string",
                      "maxLength": 255
                    },
                    "id": {
                      "type": "string"
                    },
                    "default": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "name",
                    "enabled",
                    "prompt",
                    "type",
                    "minimumValue",
                    "minimumPrompt",
                    "maximumValue",
                    "maximumPrompt",
                    "default"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 100,
                      "description": "Name of the evaluation."
                    },
                    "description": {
                      "description": "Description of the evaluation.",
                      "nullable": true,
                      "type": "string",
                      "maxLength": 250
                    },
                    "enabled": {
                      "type": "boolean",
                      "description": "When enabled, evaluations will be run on every new transcript."
                    },
                    "prompt": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 10000,
                      "description": "This prompt describes how the LLM should apply this evaluation."
                    },
                    "settings": {
                      "description": "The model settings passed when invoking this evaluation.",
                      "nullable": true,
                      "type": "object",
                      "properties": {
                        "model": {
                          "type": "string",
                          "enum": [
                            "gpt-3.5-turbo-1106",
                            "gpt-3.5-turbo",
                            "gpt-4",
                            "gpt-4o",
                            "gpt-4o-mini",
                            "gpt-4.1-2025-04-14",
                            "gpt-4.1-mini-2025-04-14",
                            "gpt-4.1-nano-2025-04-14",
                            "gpt-o3-mini",
                            "o3-2025-04-16",
                            "o4-mini-2025-04-16",
                            "gpt-5",
                            "gpt-5-mini",
                            "gpt-5-nano",
                            "gpt-5.2",
                            "gpt-5.4",
                            "gpt-5.4-mini",
                            "gpt-5.5",
                            "gpt-5.6-sol",
                            "gpt-5.6-terra",
                            "gpt-5.6-luna",
                            "gpt-realtime",
                            "gpt-live-1",
                            "claude-4-opus",
                            "claude-4-sonnet",
                            "claude-4.5-sonnet",
                            "claude-4.6-sonnet",
                            "claude-4.5-haiku",
                            "claude-4.5-opus",
                            "claude-4.7-opus",
                            "bedrock-claude-4-sonnet",
                            "bedrock-claude-4.5-sonnet",
                            "bedrock-claude-4.6-sonnet",
                            "bedrock-claude-5-sonnet",
                            "bedrock-claude-4.5-haiku",
                            "bedrock-claude-4.5-opus",
                            "bedrock-claude-4.7-opus",
                            "bedrock-claude-4.8-opus",
                            "voiceflow-core-4.0",
                            "voiceflow-core-4.1",
                            "voiceflow-flash-4.2",
                            "kimi-k3",
                            "gemini-2.5-pro",
                            "gemini-2.5-flash",
                            "gemini-live-2.5-flash",
                            "gemini-3-flash",
                            "gemini-3.5-flash",
                            "gemini-3.1-pro",
                            "gpt-oss-20b",
                            "gpt-oss-120b",
                            "llama-guard-4",
                            "llama-3.1-instant",
                            "llama-3.3-versatile",
                            "qwen3.6-27b",
                            "grok-4.6",
                            "voiceflow-flash-4.1",
                            "gemini-flash-2",
                            "gpt-4-turbo",
                            "claude-3.5-haiku",
                            "claude-3-opus",
                            "claude-3.7-sonnet",
                            "claude-v2",
                            "llama-3.2-1b-preview",
                            "gemini-pro-1.5",
                            "claude-3-haiku",
                            "claude-3-sonnet",
                            "text-davinci-003",
                            "claude-v1",
                            "claude-instant-v1",
                            "deep-seek-r1-distill-llama-70B",
                            "claude-3.5-sonnet"
                          ],
                          "x-enumNames": [
                            "GPT_3_5_TURBO_1106",
                            "GPT_3_5_TURBO",
                            "GPT_4",
                            "GPT_4_O",
                            "GPT_4_O_MINI",
                            "GPT_4_1_2025_04_14",
                            "GPT_4_1_MINI_2025_04_14",
                            "GPT_4_1_NANO_2025_04_14",
                            "GPT_O_3_MINI",
                            "O_3_2025_04_16",
                            "O_4_MINI_2025_04_16",
                            "GPT_5",
                            "GPT_5_MINI",
                            "GPT_5_NANO",
                            "GPT_5_2",
                            "GPT_5_4",
                            "GPT_5_4_MINI",
                            "GPT_5_5",
                            "GPT_5_6_SOL",
                            "GPT_5_6_TERRA",
                            "GPT_5_6_LUNA",
                            "GPT_REALTIME",
                            "GPT_LIVE_1",
                            "CLAUDE_4_OPUS",
                            "CLAUDE_4_SONNET",
                            "CLAUDE_4_5_SONNET",
                            "CLAUDE_4_6_SONNET",
                            "CLAUDE_4_5_HAIKU",
                            "CLAUDE_4_5_OPUS",
                            "CLAUDE_4_7_OPUS",
                            "BEDROCK_CLAUDE_4_SONNET",
                            "BEDROCK_CLAUDE_4_5_SONNET",
                            "BEDROCK_CLAUDE_4_6_SONNET",
                            "BEDROCK_CLAUDE_5_SONNET",
                            "BEDROCK_CLAUDE_4_5_HAIKU",
                            "BEDROCK_CLAUDE_4_5_OPUS",
                            "BEDROCK_CLAUDE_4_7_OPUS",
                            "BEDROCK_CLAUDE_4_8_OPUS",
                            "VOICEFLOW_CORE_4_0",
                            "VOICEFLOW_CORE_4_1",
                            "VOICEFLOW_FLASH_4_2",
                            "KIMI_K_3",
                            "GEMINI_2_5_PRO",
                            "GEMINI_2_5_FLASH",
                            "GEMINI_LIVE_2_5_FLASH",
                            "GEMINI_3_FLASH",
                            "GEMINI_3_5_FLASH",
                            "GEMINI_3_1_PRO",
                            "GPT_OSS_20_B",
                            "GPT_OSS_120_B",
                            "LLAMA_GUARD_4",
                            "LLAMA_3_1_INSTANT",
                            "LLAMA_3_3_VERSATILE",
                            "QWEN_3_6_27_B",
                            "GROK_4_6",
                            "VOICEFLOW_FLASH_4_1",
                            "GEMINI_FLASH_2",
                            "GPT_4_TURBO",
                            "CLAUDE_3_5_HAIKU",
                            "CLAUDE_3_OPUS",
                            "CLAUDE_3_7_SONNET",
                            "CLAUDE_V_2",
                            "LLAMA_3_2_1_B_PREVIEW",
                            "GEMINI_PRO_1_5",
                            "CLAUDE_3_HAIKU",
                            "CLAUDE_3_SONNET",
                            "TEXT_DAVINCI_003",
                            "CLAUDE_V_1",
                            "CLAUDE_INSTANT_V_1",
                            "DEEP_SEEK_R_1_DISTILL_LLAMA_70_B",
                            "CLAUDE_3_5_SONNET"
                          ]
                        },
                        "realtime": {
                          "type": "object",
                          "properties": {
                            "voice": {
                              "type": "string"
                            },
                            "eagerness": {
                              "type": "string"
                            }
                          },
                          "additionalProperties": false
                        },
                        "maxTokens": {
                          "type": "number"
                        },
                        "temperature": {
                          "type": "number"
                        },
                        "reasoningEffort": {
                          "nullable": true,
                          "type": "string",
                          "enum": [
                            "off",
                            "adaptive",
                            "minimal",
                            "low",
                            "medium",
                            "high"
                          ],
                          "x-enumNames": [
                            "OFF",
                            "ADAPTIVE",
                            "MINIMAL",
                            "LOW",
                            "MEDIUM",
                            "HIGH"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "runScope": {
                      "description": "Which transcripts this evaluation runs on automatically, by the publish state of their version.",
                      "type": "string",
                      "enum": [
                        "both",
                        "draft",
                        "published"
                      ],
                      "x-enumNames": [
                        "BOTH",
                        "DRAFT",
                        "PUBLISHED"
                      ]
                    },
                    "type": {
                      "type": "string",
                      "enum": [
                        "string"
                      ],
                      "description": "The type of text evaluations.",
                      "x-enumNames": [
                        "STRING"
                      ]
                    },
                    "systemTag": {
                      "nullable": true,
                      "type": "string",
                      "maxLength": 255
                    },
                    "id": {
                      "type": "string"
                    },
                    "default": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "name",
                    "enabled",
                    "prompt",
                    "type",
                    "default"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 100,
                      "description": "Name of the evaluation."
                    },
                    "description": {
                      "description": "Description of the evaluation.",
                      "nullable": true,
                      "type": "string",
                      "maxLength": 250
                    },
                    "enabled": {
                      "type": "boolean",
                      "description": "When enabled, evaluations will be run on every new transcript."
                    },
                    "prompt": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 10000,
                      "description": "This prompt describes how the LLM should apply this evaluation."
                    },
                    "settings": {
                      "description": "The model settings passed when invoking this evaluation.",
                      "nullable": true,
                      "type": "object",
                      "properties": {
                        "model": {
                          "type": "string",
                          "enum": [
                            "gpt-3.5-turbo-1106",
                            "gpt-3.5-turbo",
                            "gpt-4",
                            "gpt-4o",
                            "gpt-4o-mini",
                            "gpt-4.1-2025-04-14",
                            "gpt-4.1-mini-2025-04-14",
                            "gpt-4.1-nano-2025-04-14",
                            "gpt-o3-mini",
                            "o3-2025-04-16",
                            "o4-mini-2025-04-16",
                            "gpt-5",
                            "gpt-5-mini",
                            "gpt-5-nano",
                            "gpt-5.2",
                            "gpt-5.4",
                            "gpt-5.4-mini",
                            "gpt-5.5",
                            "gpt-5.6-sol",
                            "gpt-5.6-terra",
                            "gpt-5.6-luna",
                            "gpt-realtime",
                            "gpt-live-1",
                            "claude-4-opus",
                            "claude-4-sonnet",
                            "claude-4.5-sonnet",
                            "claude-4.6-sonnet",
                            "claude-4.5-haiku",
                            "claude-4.5-opus",
                            "claude-4.7-opus",
                            "bedrock-claude-4-sonnet",
                            "bedrock-claude-4.5-sonnet",
                            "bedrock-claude-4.6-sonnet",
                            "bedrock-claude-5-sonnet",
                            "bedrock-claude-4.5-haiku",
                            "bedrock-claude-4.5-opus",
                            "bedrock-claude-4.7-opus",
                            "bedrock-claude-4.8-opus",
                            "voiceflow-core-4.0",
                            "voiceflow-core-4.1",
                            "voiceflow-flash-4.2",
                            "kimi-k3",
                            "gemini-2.5-pro",
                            "gemini-2.5-flash",
                            "gemini-live-2.5-flash",
                            "gemini-3-flash",
                            "gemini-3.5-flash",
                            "gemini-3.1-pro",
                            "gpt-oss-20b",
                            "gpt-oss-120b",
                            "llama-guard-4",
                            "llama-3.1-instant",
                            "llama-3.3-versatile",
                            "qwen3.6-27b",
                            "grok-4.6",
                            "voiceflow-flash-4.1",
                            "gemini-flash-2",
                            "gpt-4-turbo",
                            "claude-3.5-haiku",
                            "claude-3-opus",
                            "claude-3.7-sonnet",
                            "claude-v2",
                            "llama-3.2-1b-preview",
                            "gemini-pro-1.5",
                            "claude-3-haiku",
                            "claude-3-sonnet",
                            "text-davinci-003",
                            "claude-v1",
                            "claude-instant-v1",
                            "deep-seek-r1-distill-llama-70B",
                            "claude-3.5-sonnet"
                          ],
                          "x-enumNames": [
                            "GPT_3_5_TURBO_1106",
                            "GPT_3_5_TURBO",
                            "GPT_4",
                            "GPT_4_O",
                            "GPT_4_O_MINI",
                            "GPT_4_1_2025_04_14",
                            "GPT_4_1_MINI_2025_04_14",
                            "GPT_4_1_NANO_2025_04_14",
                            "GPT_O_3_MINI",
                            "O_3_2025_04_16",
                            "O_4_MINI_2025_04_16",
                            "GPT_5",
                            "GPT_5_MINI",
                            "GPT_5_NANO",
                            "GPT_5_2",
                            "GPT_5_4",
                            "GPT_5_4_MINI",
                            "GPT_5_5",
                            "GPT_5_6_SOL",
                            "GPT_5_6_TERRA",
                            "GPT_5_6_LUNA",
                            "GPT_REALTIME",
                            "GPT_LIVE_1",
                            "CLAUDE_4_OPUS",
                            "CLAUDE_4_SONNET",
                            "CLAUDE_4_5_SONNET",
                            "CLAUDE_4_6_SONNET",
                            "CLAUDE_4_5_HAIKU",
                            "CLAUDE_4_5_OPUS",
                            "CLAUDE_4_7_OPUS",
                            "BEDROCK_CLAUDE_4_SONNET",
                            "BEDROCK_CLAUDE_4_5_SONNET",
                            "BEDROCK_CLAUDE_4_6_SONNET",
                            "BEDROCK_CLAUDE_5_SONNET",
                            "BEDROCK_CLAUDE_4_5_HAIKU",
                            "BEDROCK_CLAUDE_4_5_OPUS",
                            "BEDROCK_CLAUDE_4_7_OPUS",
                            "BEDROCK_CLAUDE_4_8_OPUS",
                            "VOICEFLOW_CORE_4_0",
                            "VOICEFLOW_CORE_4_1",
                            "VOICEFLOW_FLASH_4_2",
                            "KIMI_K_3",
                            "GEMINI_2_5_PRO",
                            "GEMINI_2_5_FLASH",
                            "GEMINI_LIVE_2_5_FLASH",
                            "GEMINI_3_FLASH",
                            "GEMINI_3_5_FLASH",
                            "GEMINI_3_1_PRO",
                            "GPT_OSS_20_B",
                            "GPT_OSS_120_B",
                            "LLAMA_GUARD_4",
                            "LLAMA_3_1_INSTANT",
                            "LLAMA_3_3_VERSATILE",
                            "QWEN_3_6_27_B",
                            "GROK_4_6",
                            "VOICEFLOW_FLASH_4_1",
                            "GEMINI_FLASH_2",
                            "GPT_4_TURBO",
                            "CLAUDE_3_5_HAIKU",
                            "CLAUDE_3_OPUS",
                            "CLAUDE_3_7_SONNET",
                            "CLAUDE_V_2",
                            "LLAMA_3_2_1_B_PREVIEW",
                            "GEMINI_PRO_1_5",
                            "CLAUDE_3_HAIKU",
                            "CLAUDE_3_SONNET",
                            "TEXT_DAVINCI_003",
                            "CLAUDE_V_1",
                            "CLAUDE_INSTANT_V_1",
                            "DEEP_SEEK_R_1_DISTILL_LLAMA_70_B",
                            "CLAUDE_3_5_SONNET"
                          ]
                        },
                        "realtime": {
                          "type": "object",
                          "properties": {
                            "voice": {
                              "type": "string"
                            },
                            "eagerness": {
                              "type": "string"
                            }
                          },
                          "additionalProperties": false
                        },
                        "maxTokens": {
                          "type": "number"
                        },
                        "temperature": {
                          "type": "number"
                        },
                        "reasoningEffort": {
                          "nullable": true,
                          "type": "string",
                          "enum": [
                            "off",
                            "adaptive",
                            "minimal",
                            "low",
                            "medium",
                            "high"
                          ],
                          "x-enumNames": [
                            "OFF",
                            "ADAPTIVE",
                            "MINIMAL",
                            "LOW",
                            "MEDIUM",
                            "HIGH"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "runScope": {
                      "description": "Which transcripts this evaluation runs on automatically, by the publish state of their version.",
                      "type": "string",
                      "enum": [
                        "both",
                        "draft",
                        "published"
                      ],
                      "x-enumNames": [
                        "BOTH",
                        "DRAFT",
                        "PUBLISHED"
                      ]
                    },
                    "type": {
                      "type": "string",
                      "enum": [
                        "option"
                      ],
                      "description": "The type of options evaluations.",
                      "x-enumNames": [
                        "OPTION"
                      ]
                    },
                    "options": {
                      "minItems": 1,
                      "maxItems": 20,
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "value": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 100
                          },
                          "prompt": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 10000
                          },
                          "included": {
                            "type": "boolean"
                          },
                          "color": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "value",
                          "prompt",
                          "included",
                          "color"
                        ],
                        "additionalProperties": false
                      },
                      "description": "The options that should be evaluated for."
                    },
                    "systemTag": {
                      "nullable": true,
                      "type": "string",
                      "maxLength": 255
                    },
                    "id": {
                      "type": "string"
                    },
                    "default": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "name",
                    "enabled",
                    "prompt",
                    "type",
                    "options",
                    "default"
                  ],
                  "additionalProperties": false
                }
              ]
            }
          },
          "version": {
            "$ref": "#/components/schemas/Version"
          },
          "diagrams": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/Diagram"
            }
          },
          "intents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Intent"
            }
          },
          "utterances": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Utterance"
            }
          },
          "requiredEntities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RequiredEntity"
            }
          },
          "responses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Response"
            }
          },
          "responseMessages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ResponseMessage"
            }
          },
          "responseDiscriminators": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ResponseDiscriminator"
            }
          },
          "functions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Function"
            }
          },
          "functionPaths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FunctionPath"
            }
          },
          "functionVariables": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FunctionVariable"
            }
          },
          "flows": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Flow"
            }
          },
          "agents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Agent"
            }
          },
          "agentAPITools": {
            "default": [],
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AgentAPITool"
            }
          },
          "agentFlowTools": {
            "default": [],
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AgentFlowTool"
            }
          },
          "agentPathTools": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AgentPathTool"
            }
          },
          "agentFunctionTools": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AgentFunctionTool"
            }
          },
          "agentIntegrationTools": {
            "default": [],
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AgentIntegrationTool"
            }
          },
          "agentFlowToolVariables": {
            "default": [],
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AgentFlowToolVariable"
            }
          },
          "agentPathToolVariables": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AgentPathToolVariable"
            }
          },
          "agentMcpIntegrationTools": {
            "default": [],
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AgentMcpIntegrationTool"
            }
          },
          "events": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Event"
            }
          },
          "entities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Entity"
            }
          },
          "entityVariants": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EntityVariant"
            }
          },
          "folders": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Folder"
            }
          },
          "prompts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Prompt"
            }
          },
          "promptMessages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PromptMessage"
            }
          },
          "apiTools": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/APITool"
            }
          },
          "apiToolInputVariables": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/APIToolInputVariable"
            }
          },
          "simulations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Simulation"
            }
          },
          "simulationTurns": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SimulationTurn"
            }
          },
          "simulationTurnTests": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SimulationTurnTest"
            }
          },
          "variables": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Variable"
            }
          },
          "workflows": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Workflow"
            }
          },
          "attachments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AnyAttachment"
            }
          },
          "cardButtons": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CardButton"
            }
          },
          "integrationTools": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IntegrationTool"
            }
          },
          "mcpIntegrationTools": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/McpIntegrationTool"
            }
          },
          "mcpServers": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                },
                "updatedByID": {
                  "type": "number"
                },
                "assistantID": {
                  "type": "string"
                },
                "environmentID": {
                  "type": "string"
                },
                "name": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                },
                "folderID": {
                  "nullable": true,
                  "type": "string"
                },
                "createdByID": {
                  "type": "number"
                },
                "image": {
                  "default": null,
                  "nullable": true,
                  "type": "string"
                },
                "description": {
                  "default": null,
                  "nullable": true,
                  "type": "string"
                },
                "specification": {
                  "default": "2025-03-26",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/McpServerSpecification"
                    }
                  ]
                },
                "url": {
                  "default": null,
                  "nullable": true,
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Markup"
                    }
                  ]
                },
                "headers": {
                  "default": null,
                  "nullable": true,
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/McpServerHeaderEntry"
                  }
                },
                "authType": {
                  "default": "custom",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/McpServerAuthType"
                    }
                  ]
                },
                "oauthMetadata": {
                  "default": null,
                  "nullable": true,
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/McpServerOAuthMetadata"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "createdAt",
                "updatedAt",
                "updatedByID",
                "assistantID",
                "name",
                "folderID",
                "createdByID"
              ]
            }
          },
          "mcpServerTools": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/McpServerTool"
            }
          },
          "personas": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Persona"
            }
          },
          "kbDocumentVersions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KBDocumentVersionBackup"
            }
          },
          "kbSettings": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/KBSettingsBackup"
              }
            ]
          },
          "kbDocumentMetadataM2M": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KBDocumentMetadataM2MBackup"
            }
          }
        },
        "required": [
          "project",
          "version",
          "diagrams"
        ]
      },
      "StableAgentRead": {
        "type": "object",
        "properties": {
          "llm": {
            "type": "object",
            "properties": {
              "priorityProcessing": {
                "type": "boolean"
              },
              "defaults": {
                "type": "object",
                "properties": {
                  "model": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/AIModel"
                      }
                    ]
                  },
                  "maxTokens": {
                    "type": "number"
                  },
                  "temperature": {
                    "type": "number"
                  },
                  "reasoningEffort": {
                    "nullable": true,
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/AIReasoningEffort"
                      }
                    ]
                  }
                }
              }
            }
          },
          "prompt": {
            "type": "string",
            "description": "Markdown text. Backticked `Name` resolves to a tool, playbook, or workflow reference; braced {name} resolves to a variable or entity reference. Tokens that do not resolve are stored as literal text and reported back in the response."
          },
          "includeGuidelines": {
            "type": "boolean",
            "description": "Whether to append the default prompting guidelines to the global prompt."
          },
          "voice": {
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionSettingsVoice"
              }
            ]
          },
          "playbooks": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "condition": {
                  "nullable": true,
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ExpressionCondition"
                    }
                  ]
                },
                "description": {
                  "nullable": true,
                  "type": "string"
                },
                "requiredVariables": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CrewNodeDataRequiredVariable"
                  }
                },
                "playbookID": {
                  "type": "string"
                }
              },
              "required": [
                "description",
                "playbookID"
              ]
            },
            "description": "Playbooks available for the agent to invoke. This list REPLACES the registry: send the complete list you want, or omit the field to leave routing untouched. An agent with no playbooks AND no workflows registered cannot run - the runtime fails the conversation - so never send an empty list unless `workflows` still holds at least one."
          },
          "workflows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "condition": {
                  "nullable": true,
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ExpressionCondition"
                    }
                  ]
                },
                "description": {
                  "nullable": true,
                  "type": "string"
                },
                "requiredVariables": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CrewNodeDataRequiredVariable"
                  }
                },
                "workflowID": {
                  "type": "string"
                }
              },
              "required": [
                "description",
                "workflowID"
              ]
            },
            "description": "Workflows available for the agent to invoke. This list REPLACES the registry: send the complete list you want, or omit the field to leave routing untouched. An agent with no workflows AND no playbooks registered cannot run, so never send an empty list unless `playbooks` still holds at least one."
          },
          "endTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentEndTool"
              }
            ]
          },
          "cardTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentCardTool"
              }
            ]
          },
          "buttonTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentButtonTool"
              }
            ]
          },
          "instructions": {
            "nullable": true,
            "type": "string",
            "description": "Markdown text. Backticked `Name` resolves to a tool, playbook, or workflow reference; braced {name} resolves to a variable or entity reference. Tokens that do not resolve are stored as literal text and reported back in the response."
          },
          "carouselTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentCardTool"
              }
            ]
          },
          "skipTurnTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentSkipTurnTool"
              }
            ]
          },
          "pathToolOrder": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The ordered list of path tool IDs that controls the order of the agent exit paths."
          },
          "webSearchTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentWebSearchTool"
              }
            ]
          },
          "callForwardTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentCallForwardTool"
              }
            ]
          },
          "knowledgeBaseTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentKnowledgeBaseTool"
              }
            ]
          },
          "promptLineCount": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "How many lines the global prompt has."
          },
          "instructionsLineCount": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "How many lines the main agent's instructions have."
          }
        },
        "required": [
          "llm",
          "includeGuidelines",
          "playbooks",
          "workflows",
          "endTool",
          "cardTool",
          "buttonTool",
          "carouselTool",
          "skipTurnTool",
          "pathToolOrder",
          "webSearchTool",
          "callForwardTool",
          "knowledgeBaseTool",
          "promptLineCount",
          "instructionsLineCount"
        ]
      },
      "StableAgentResponse": {
        "type": "object",
        "properties": {
          "agent": {
            "$ref": "#/components/schemas/StableAgentRead"
          }
        },
        "required": [
          "agent"
        ]
      },
      "StableUpdateResponse": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "description": "A human-readable message confirming the update."
          }
        },
        "required": [
          "message"
        ]
      },
      "StableAgentUpdateRequest": {
        "type": "object",
        "properties": {
          "prompt": {
            "type": "string",
            "description": "Markdown text. Backticked `Name` resolves to a tool, playbook, or workflow reference; braced {name} resolves to a variable or entity reference. Tokens that do not resolve are stored as literal text and reported back in the response."
          },
          "endTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentEndTool"
              }
            ]
          },
          "cardTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentCardTool"
              }
            ]
          },
          "playbooks": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "condition": {
                  "nullable": true,
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ExpressionCondition"
                    }
                  ]
                },
                "description": {
                  "nullable": true,
                  "type": "string"
                },
                "requiredVariables": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CrewNodeDataRequiredVariable"
                  }
                },
                "playbookID": {
                  "type": "string"
                }
              },
              "required": [
                "description",
                "playbookID"
              ]
            },
            "description": "Playbooks available for the agent to invoke. This list REPLACES the registry: send the complete list you want, or omit the field to leave routing untouched. An agent with no playbooks AND no workflows registered cannot run - the runtime fails the conversation - so never send an empty list unless `workflows` still holds at least one."
          },
          "workflows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "condition": {
                  "nullable": true,
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ExpressionCondition"
                    }
                  ]
                },
                "description": {
                  "nullable": true,
                  "type": "string"
                },
                "requiredVariables": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CrewNodeDataRequiredVariable"
                  }
                },
                "workflowID": {
                  "type": "string"
                }
              },
              "required": [
                "description",
                "workflowID"
              ]
            },
            "description": "Workflows available for the agent to invoke. This list REPLACES the registry: send the complete list you want, or omit the field to leave routing untouched. An agent with no workflows AND no playbooks registered cannot run, so never send an empty list unless `playbooks` still holds at least one."
          },
          "buttonTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentButtonTool"
              }
            ]
          },
          "carouselTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentCardTool"
              }
            ]
          },
          "instructions": {
            "nullable": true,
            "type": "string",
            "description": "Markdown text. Backticked `Name` resolves to a tool, playbook, or workflow reference; braced {name} resolves to a variable or entity reference. Tokens that do not resolve are stored as literal text and reported back in the response."
          },
          "skipTurnTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentSkipTurnTool"
              }
            ]
          },
          "pathToolOrder": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The ordered list of path tool IDs that controls the order of the agent exit paths."
          },
          "webSearchTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentWebSearchTool"
              }
            ]
          },
          "callForwardTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentCallForwardTool"
              }
            ]
          },
          "knowledgeBaseTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentKnowledgeBaseTool"
              }
            ]
          },
          "includeGuidelines": {
            "type": "boolean",
            "description": "Whether to append the default prompting guidelines to the global prompt."
          },
          "llm": {
            "type": "object",
            "properties": {
              "priorityProcessing": {
                "type": "boolean"
              },
              "defaults": {
                "type": "object",
                "properties": {
                  "model": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/AIModel"
                      }
                    ]
                  },
                  "maxTokens": {
                    "type": "number"
                  },
                  "temperature": {
                    "type": "number"
                  },
                  "reasoningEffort": {
                    "nullable": true,
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/AIReasoningEffort"
                      }
                    ]
                  }
                }
              }
            }
          },
          "voice": {
            "type": "object",
            "properties": {
              "stt": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/STTSettings"
                  }
                ]
              },
              "tts": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/VoiceSettings"
                  }
                ]
              },
              "pronunciationDictionary": {
                "maxItems": 500,
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PronunciationDictionaryEntry"
                }
              },
              "failureMessage": {
                "nullable": true,
                "type": "string"
              },
              "hasCallRecording": {
                "default": true,
                "type": "boolean"
              },
              "audioCue": {
                "nullable": true,
                "type": "number"
              },
              "backgroundAudio": {
                "nullable": true,
                "type": "string"
              },
              "backgroundAudioSettings": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/BackgroundAudioSettings"
                  }
                ]
              },
              "audioSync": {
                "type": "boolean"
              },
              "keypadInput": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/VoiceKeypadSettings"
                  }
                ]
              },
              "silenceTimeoutMs": {
                "type": "number"
              },
              "maxDuration": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/VoiceMaxDurationSettings"
                  }
                ]
              }
            }
          }
        },
        "additionalProperties": false
      },
      "StableInstructionsReadResponse": {
        "type": "object",
        "properties": {
          "content": {
            "type": "string",
            "description": "The requested lines, each as its 1-based number, a tab, then the text, joined by newlines."
          },
          "offset": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "The line number this page actually starts at, after clamping."
          },
          "returnedLines": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "How many lines this page carries."
          },
          "totalLines": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "How many lines the whole document has."
          },
          "totalCharacters": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "How many characters the whole document has."
          },
          "hasMore": {
            "type": "boolean",
            "description": "Whether lines remain after this page."
          },
          "nextOffset": {
            "nullable": true,
            "description": "The first line not returned, or null when there is nothing more to read.",
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "content",
          "offset",
          "returnedLines",
          "totalLines",
          "totalCharacters",
          "hasMore",
          "nextOffset"
        ]
      },
      "StableInstructionsSearchMatch": {
        "type": "object",
        "properties": {
          "line": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "The 1-based line number of the match."
          },
          "count": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "How many times the pattern matched on this line."
          },
          "before": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The requested lines of context above this one."
          },
          "text": {
            "type": "string",
            "description": "The matching line."
          },
          "after": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The requested lines of context below this one."
          }
        },
        "required": [
          "line",
          "count",
          "before",
          "text",
          "after"
        ]
      },
      "StableInstructionsSearchResponse": {
        "type": "object",
        "properties": {
          "matches": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableInstructionsSearchMatch"
            }
          },
          "totalMatches": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Total occurrences across the whole document, not just this page."
          },
          "matchingLines": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Total lines with at least one occurrence, across the whole document."
          },
          "hasMore": {
            "type": "boolean",
            "description": "Whether matching lines were left out because of the limit."
          }
        },
        "required": [
          "matches",
          "totalMatches",
          "matchingLines",
          "hasMore"
        ]
      },
      "StableInstructionsSearchRequest": {
        "type": "object",
        "properties": {
          "pattern": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "description": "A JavaScript regular expression, evaluated against each line on its own."
          },
          "ignoreCase": {
            "default": false,
            "description": "Match case-insensitively. Defaults to false, like grep.",
            "type": "boolean"
          },
          "contextLines": {
            "default": 0,
            "description": "How many lines either side of each match to return.",
            "type": "integer",
            "minimum": 0,
            "maximum": 5
          },
          "limit": {
            "default": 50,
            "description": "The maximum number of matching LINES to return. The reported totals cover the whole document.",
            "type": "integer",
            "minimum": 1,
            "maximum": 200
          }
        },
        "required": [
          "pattern"
        ],
        "additionalProperties": false
      },
      "StableInstructionsPatchResponse": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "description": "A human-readable summary naming the lines that changed."
          },
          "replacements": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "How many occurrences were replaced."
          },
          "diff": {
            "type": "string",
            "description": "A unified diff of the changed lines, with 1-based hunk headers."
          },
          "totalLines": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "How many lines the document has AFTER the write."
          },
          "unresolvedReferences": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Braced {name} tokens anywhere in the document AFTER the patch that matched no variable or entity and were stored as literal text. The whole document is resolved, so a token the patch did not touch is reported too."
          },
          "unresolvedMentions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Backticked names anywhere in the document AFTER the patch that matched no attached tool, playbook or workflow. The whole document is resolved, so a name the patch did not touch is reported too."
          }
        },
        "required": [
          "message",
          "replacements",
          "diff",
          "totalLines",
          "unresolvedReferences",
          "unresolvedMentions"
        ]
      },
      "StableInstructionsPatchRequest": {
        "type": "object",
        "properties": {
          "oldString": {
            "type": "string",
            "minLength": 1,
            "description": "The exact text to replace, copied verbatim from a read or search result. Matching is literal — whitespace, punctuation and case must match. Do not include the line numbers a read adds."
          },
          "newString": {
            "type": "string",
            "description": "The text to put in its place. May be empty to delete."
          },
          "replaceAll": {
            "default": false,
            "description": "Replace every occurrence. When false, more than one match is an error rather than a guess.",
            "type": "boolean"
          }
        },
        "required": [
          "oldString",
          "newString"
        ],
        "additionalProperties": false
      },
      "StablePlaybookRead": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "settings": {
            "$ref": "#/components/schemas/AgentSettings"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "description": {
            "nullable": true,
            "description": "A human-readable description of what the playbook does.",
            "type": "string"
          },
          "instructions": {
            "nullable": true,
            "type": "string",
            "description": "Markdown text. Backticked `Name` resolves to a tool, playbook, or workflow reference; braced {name} resolves to a variable or entity reference. Tokens that do not resolve are stored as literal text and reported back in the response."
          },
          "pathToolOrder": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The IDs of the playbook's path tools, in display order."
          },
          "endTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentEndTool"
              }
            ]
          },
          "cardTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentCardTool"
              }
            ]
          },
          "buttonTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentButtonTool"
              }
            ]
          },
          "carouselTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentCardTool"
              }
            ]
          },
          "skipTurnTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentSkipTurnTool"
              }
            ]
          },
          "webSearchTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentWebSearchTool"
              }
            ]
          },
          "callForwardTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentCallForwardTool"
              }
            ]
          },
          "knowledgeBaseTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentKnowledgeBaseTool"
              }
            ]
          },
          "instructionsLineCount": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "How many lines the instructions have, so a caller can decide whether to page through them."
          }
        },
        "required": [
          "id",
          "name",
          "settings",
          "createdAt",
          "updatedAt",
          "description",
          "pathToolOrder",
          "endTool",
          "cardTool",
          "buttonTool",
          "carouselTool",
          "skipTurnTool",
          "webSearchTool",
          "callForwardTool",
          "knowledgeBaseTool",
          "instructionsLineCount"
        ]
      },
      "StablePlaybookReadListResponse": {
        "type": "object",
        "properties": {
          "playbooks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StablePlaybookRead"
            }
          }
        },
        "required": [
          "playbooks"
        ]
      },
      "StablePlaybook": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "settings": {
            "$ref": "#/components/schemas/AgentSettings"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "description": {
            "nullable": true,
            "description": "A human-readable description of what the playbook does.",
            "type": "string"
          },
          "instructions": {
            "nullable": true,
            "type": "string",
            "description": "Markdown text. Backticked `Name` resolves to a tool, playbook, or workflow reference; braced {name} resolves to a variable or entity reference. Tokens that do not resolve are stored as literal text and reported back in the response."
          },
          "pathToolOrder": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The IDs of the playbook's path tools, in display order."
          },
          "endTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentEndTool"
              }
            ]
          },
          "cardTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentCardTool"
              }
            ]
          },
          "buttonTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentButtonTool"
              }
            ]
          },
          "carouselTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentCardTool"
              }
            ]
          },
          "skipTurnTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentSkipTurnTool"
              }
            ]
          },
          "webSearchTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentWebSearchTool"
              }
            ]
          },
          "callForwardTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentCallForwardTool"
              }
            ]
          },
          "knowledgeBaseTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentKnowledgeBaseTool"
              }
            ]
          }
        },
        "required": [
          "id",
          "name",
          "settings",
          "createdAt",
          "updatedAt",
          "description",
          "instructions",
          "pathToolOrder",
          "endTool",
          "cardTool",
          "buttonTool",
          "carouselTool",
          "skipTurnTool",
          "webSearchTool",
          "callForwardTool",
          "knowledgeBaseTool"
        ]
      },
      "StablePlaybookResponse": {
        "type": "object",
        "properties": {
          "playbook": {
            "$ref": "#/components/schemas/StablePlaybook"
          },
          "unresolvedReferences": {
            "description": "Advisory naming any references in the submitted markdown that did not resolve.",
            "type": "string"
          }
        },
        "required": [
          "playbook"
        ]
      },
      "StablePlaybookCreateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "description": {
            "nullable": true,
            "description": "A human-readable description of what the playbook does.",
            "type": "string"
          },
          "instructions": {
            "nullable": true,
            "type": "string",
            "description": "Markdown text. Backticked `Name` resolves to a tool, playbook, or workflow reference; braced {name} resolves to a variable or entity reference. Tokens that do not resolve are stored as literal text and reported back in the response."
          },
          "endTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentEndTool"
              }
            ]
          },
          "cardTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentCardTool"
              }
            ]
          },
          "buttonTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentButtonTool"
              }
            ]
          },
          "carouselTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentCardTool"
              }
            ]
          },
          "skipTurnTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentSkipTurnTool"
              }
            ]
          },
          "webSearchTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentWebSearchTool"
              }
            ]
          },
          "callForwardTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentCallForwardTool"
              }
            ]
          },
          "knowledgeBaseTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentKnowledgeBaseTool"
              }
            ]
          },
          "settings": {
            "default": {},
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentSettings"
              }
            ]
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false
      },
      "StablePlaybookListResponse": {
        "type": "object",
        "properties": {
          "playbooks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StablePlaybook"
            }
          },
          "unresolvedReferences": {
            "description": "Advisory naming any references in the submitted markdown that did not resolve.",
            "type": "string"
          }
        },
        "required": [
          "playbooks"
        ]
      },
      "StablePlaybookCreateManyRequest": {
        "type": "object",
        "properties": {
          "playbooks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StablePlaybookCreateRequest"
            }
          }
        },
        "required": [
          "playbooks"
        ]
      },
      "StablePlaybookReadResponse": {
        "type": "object",
        "properties": {
          "playbook": {
            "$ref": "#/components/schemas/StablePlaybookRead"
          }
        },
        "required": [
          "playbook"
        ]
      },
      "StablePlaybookUpdateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "settings": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentSettings"
              }
            ]
          },
          "description": {
            "nullable": true,
            "description": "A human-readable description of what the playbook does.",
            "type": "string"
          },
          "instructions": {
            "nullable": true,
            "type": "string",
            "description": "Markdown text. Backticked `Name` resolves to a tool, playbook, or workflow reference; braced {name} resolves to a variable or entity reference. Tokens that do not resolve are stored as literal text and reported back in the response."
          },
          "endTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentEndTool"
              }
            ]
          },
          "cardTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentCardTool"
              }
            ]
          },
          "buttonTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentButtonTool"
              }
            ]
          },
          "carouselTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentCardTool"
              }
            ]
          },
          "skipTurnTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentSkipTurnTool"
              }
            ]
          },
          "webSearchTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentWebSearchTool"
              }
            ]
          },
          "callForwardTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentCallForwardTool"
              }
            ]
          },
          "knowledgeBaseTool": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AgentKnowledgeBaseTool"
              }
            ]
          }
        },
        "additionalProperties": false
      },
      "StableDeleteResponse": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "description": "A human-readable message confirming the deletion."
          }
        },
        "required": [
          "message"
        ]
      },
      "StableTool": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "createdAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "updatedAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "messages": {
                "nullable": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/AgentToolMessages"
                  }
                ]
              },
              "description": {
                "nullable": true,
                "description": "A description of what the tool does, used by the agent to decide when to call it.",
                "type": "string"
              },
              "captureInputVariables": {
                "nullable": true,
                "description": "A map of tool input names to the variables or entities whose values are captured into them.",
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/AgentToolCaptureInputVariable"
                }
              },
              "type": {
                "type": "string",
                "enum": [
                  "api"
                ],
                "description": "Discriminator indicating this tool executes a saved API request.",
                "x-enumNames": [
                  "API"
                ]
              },
              "apiToolID": {
                "type": "string",
                "description": "The ID of the API resource this tool executes."
              },
              "asyncExecution": {
                "type": "boolean",
                "description": "When enabled, the tool runs in the background without blocking the conversation."
              },
              "inputVariables": {
                "type": "object",
                "additionalProperties": {
                  "type": "object",
                  "properties": {
                    "description": {
                      "default": null,
                      "nullable": true,
                      "type": "string"
                    },
                    "defaultValue": {
                      "default": null,
                      "nullable": true,
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/Markup"
                        }
                      ]
                    },
                    "apiToolInputVariableID": {
                      "type": "string"
                    },
                    "captureType": {
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/ToolNodeCaptureType"
                        }
                      ]
                    },
                    "required": {
                      "type": "boolean",
                      "description": "Whether the agent must supply a value for this input. Omit it and the API infers: false when defaultValue holds a secret reference (the secret is injected and the model is never asked for it), true otherwise. Sending true together with a secret defaultValue is rejected."
                    }
                  },
                  "required": [
                    "apiToolInputVariableID",
                    "required"
                  ]
                },
                "description": "A map of input names to the values the agent supplies when calling the tool."
              },
              "captureResponse": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/ToolNodeDataAPICaptureResponse"
                },
                "description": "A map of variable names to the parts of the tool response captured into them."
              }
            },
            "required": [
              "id",
              "createdAt",
              "updatedAt",
              "messages",
              "description",
              "captureInputVariables",
              "type",
              "apiToolID",
              "asyncExecution",
              "inputVariables",
              "captureResponse"
            ]
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "createdAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "updatedAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "messages": {
                "nullable": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/AgentToolMessages"
                  }
                ]
              },
              "description": {
                "nullable": true,
                "description": "A description of what the tool does, used by the agent to decide when to call it.",
                "type": "string"
              },
              "captureInputVariables": {
                "nullable": true,
                "description": "A map of tool input names to the variables or entities whose values are captured into them.",
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/AgentToolCaptureInputVariable"
                }
              },
              "type": {
                "type": "string",
                "enum": [
                  "function"
                ],
                "description": "Discriminator indicating this tool executes a custom function.",
                "x-enumNames": [
                  "FUNCTION"
                ]
              },
              "functionID": {
                "type": "string",
                "description": "The ID of the function resource this tool executes."
              },
              "asyncExecution": {
                "type": "boolean",
                "description": "When enabled, the tool runs in the background without blocking the conversation."
              },
              "inputVariables": {
                "type": "object",
                "additionalProperties": {
                  "type": "object",
                  "properties": {
                    "description": {
                      "default": null,
                      "nullable": true,
                      "type": "string"
                    },
                    "defaultValue": {
                      "default": null,
                      "nullable": true,
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/Markup"
                        }
                      ]
                    },
                    "functionInputVariableID": {
                      "type": "string"
                    },
                    "captureType": {
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/ToolNodeCaptureType"
                        }
                      ]
                    },
                    "required": {
                      "type": "boolean",
                      "description": "Whether the agent must supply a value for this input. Omit it and the API infers: false when defaultValue holds a secret reference (the secret is injected and the model is never asked for it), true otherwise. Sending true together with a secret defaultValue is rejected."
                    }
                  },
                  "required": [
                    "functionInputVariableID",
                    "required"
                  ]
                },
                "description": "A map of input names to the values the agent supplies when calling the tool."
              },
              "captureResponse": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/ToolNodeDataFunctionCaptureResponse"
                },
                "description": "A map of variable names to the parts of the tool response captured into them."
              }
            },
            "required": [
              "id",
              "createdAt",
              "updatedAt",
              "messages",
              "description",
              "captureInputVariables",
              "type",
              "functionID",
              "asyncExecution",
              "inputVariables",
              "captureResponse"
            ]
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "createdAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "updatedAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "messages": {
                "nullable": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/AgentToolMessages"
                  }
                ]
              },
              "description": {
                "nullable": true,
                "description": "A description of what the tool does, used by the agent to decide when to call it.",
                "type": "string"
              },
              "captureInputVariables": {
                "nullable": true,
                "description": "A map of tool input names to the variables or entities whose values are captured into them.",
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/AgentToolCaptureInputVariable"
                }
              },
              "type": {
                "type": "string",
                "enum": [
                  "mcp"
                ],
                "description": "Discriminator indicating this tool calls a tool from an MCP server.",
                "x-enumNames": [
                  "MCP"
                ]
              },
              "mcpToolID": {
                "type": "string",
                "description": "The ID of the MCP tool resource this tool calls."
              },
              "inputVariables": {
                "type": "object",
                "additionalProperties": {
                  "type": "object",
                  "properties": {
                    "description": {
                      "default": null,
                      "nullable": true,
                      "type": "string"
                    },
                    "defaultValue": {
                      "default": null,
                      "nullable": true,
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/Markup"
                        }
                      ]
                    },
                    "mcpIntegrationVariableName": {
                      "type": "string"
                    },
                    "captureType": {
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/ToolNodeCaptureType"
                        }
                      ]
                    },
                    "required": {
                      "type": "boolean",
                      "description": "Whether the agent must supply a value for this input. Omit it and the API infers: false when defaultValue holds a secret reference (the secret is injected and the model is never asked for it), true otherwise. Sending true together with a secret defaultValue is rejected."
                    }
                  },
                  "required": [
                    "mcpIntegrationVariableName",
                    "required"
                  ]
                },
                "description": "A map of input names to the values the agent supplies when calling the tool."
              },
              "captureResponse": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/ToolNodeDataMcpIntegrationCaptureResponse"
                },
                "description": "A map of variable names to the parts of the tool response captured into them."
              }
            },
            "required": [
              "id",
              "createdAt",
              "updatedAt",
              "messages",
              "description",
              "captureInputVariables",
              "type",
              "mcpToolID",
              "inputVariables",
              "captureResponse"
            ]
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "createdAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "updatedAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "messages": {
                "nullable": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/AgentToolMessages"
                  }
                ]
              },
              "description": {
                "nullable": true,
                "description": "A description of what the tool does, used by the agent to decide when to call it.",
                "type": "string"
              },
              "captureInputVariables": {
                "nullable": true,
                "description": "A map of tool input names to the variables or entities whose values are captured into them.",
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/AgentToolCaptureInputVariable"
                }
              },
              "type": {
                "type": "string",
                "enum": [
                  "integration"
                ],
                "description": "Discriminator indicating this tool calls a connected first-party integration.",
                "x-enumNames": [
                  "INTEGRATION"
                ]
              },
              "integrationToolID": {
                "type": "string",
                "description": "The ID of the integration tool resource this tool calls."
              },
              "inputVariables": {
                "type": "object",
                "additionalProperties": {
                  "type": "object",
                  "properties": {
                    "description": {
                      "default": null,
                      "nullable": true,
                      "type": "string"
                    },
                    "defaultValue": {
                      "default": null,
                      "nullable": true,
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/Markup"
                        }
                      ]
                    },
                    "integrationToolVariableName": {
                      "type": "string"
                    },
                    "captureType": {
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/ToolNodeCaptureType"
                        }
                      ]
                    },
                    "required": {
                      "type": "boolean",
                      "description": "Whether the agent must supply a value for this input. Omit it and the API infers: false when defaultValue holds a secret reference (the secret is injected and the model is never asked for it), true otherwise. Sending true together with a secret defaultValue is rejected."
                    }
                  },
                  "required": [
                    "integrationToolVariableName",
                    "required"
                  ]
                },
                "description": "A map of input names to the values the agent supplies when calling the tool."
              },
              "captureResponse": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/ToolNodeDataIntegrationCaptureResponse"
                },
                "description": "A map of variable names to the parts of the tool response captured into them."
              }
            },
            "required": [
              "id",
              "createdAt",
              "updatedAt",
              "messages",
              "description",
              "captureInputVariables",
              "type",
              "integrationToolID",
              "inputVariables",
              "captureResponse"
            ]
          }
        ]
      },
      "StableToolListResponse": {
        "type": "object",
        "properties": {
          "tools": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableTool"
            }
          }
        },
        "required": [
          "tools"
        ]
      },
      "StableToolResponse": {
        "type": "object",
        "properties": {
          "tool": {
            "$ref": "#/components/schemas/StableTool"
          }
        },
        "required": [
          "tool"
        ]
      },
      "StableToolTarget": {
        "type": "object",
        "properties": {
          "global": {
            "description": "Target the agent. Cannot be used with playbookID.",
            "type": "boolean"
          },
          "playbookID": {
            "description": "Target a specific playbook. Cannot be used with global.",
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "StableToolCreateRequest": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "description": {
                "nullable": true,
                "description": "A description of what the tool does, used by the agent to decide when to call it.",
                "type": "string"
              },
              "target": {
                "$ref": "#/components/schemas/StableToolTarget"
              },
              "messages": {
                "default": null,
                "nullable": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/AgentToolMessages"
                  }
                ]
              },
              "captureInputVariables": {
                "default": {},
                "nullable": true,
                "description": "A map of tool input names to the variables or entities whose values are captured into them.",
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/AgentToolCaptureInputVariable"
                }
              },
              "asyncExecution": {
                "default": false,
                "description": "When enabled, the tool runs in the background without blocking the conversation.",
                "type": "boolean"
              },
              "inputVariables": {
                "default": {},
                "type": "object",
                "additionalProperties": {
                  "type": "object",
                  "properties": {
                    "description": {
                      "default": null,
                      "nullable": true,
                      "type": "string"
                    },
                    "defaultValue": {
                      "default": null,
                      "nullable": true,
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/Markup"
                        }
                      ]
                    },
                    "apiToolInputVariableID": {
                      "type": "string"
                    },
                    "captureType": {
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/ToolNodeCaptureType"
                        }
                      ]
                    },
                    "required": {
                      "type": "boolean",
                      "description": "Whether the agent must supply a value for this input. Omit it and the API infers: false when defaultValue holds a secret reference (the secret is injected and the model is never asked for it), true otherwise. Sending true together with a secret defaultValue is rejected."
                    }
                  },
                  "required": [
                    "apiToolInputVariableID"
                  ]
                }
              },
              "captureResponse": {
                "default": {},
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/ToolNodeDataAPICaptureResponse"
                },
                "description": "A map of variable names to the parts of the tool response captured into them."
              },
              "type": {
                "type": "string",
                "enum": [
                  "api"
                ],
                "description": "Discriminator indicating this tool executes a saved API request.",
                "x-enumNames": [
                  "API"
                ]
              },
              "apiToolID": {
                "type": "string",
                "description": "The ID of the API resource this tool executes."
              }
            },
            "required": [
              "target",
              "type",
              "apiToolID"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "description": {
                "nullable": true,
                "description": "A description of what the tool does, used by the agent to decide when to call it.",
                "type": "string"
              },
              "target": {
                "$ref": "#/components/schemas/StableToolTarget"
              },
              "messages": {
                "default": null,
                "nullable": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/AgentToolMessages"
                  }
                ]
              },
              "captureInputVariables": {
                "default": {},
                "nullable": true,
                "description": "A map of tool input names to the variables or entities whose values are captured into them.",
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/AgentToolCaptureInputVariable"
                }
              },
              "asyncExecution": {
                "default": false,
                "description": "When enabled, the tool runs in the background without blocking the conversation.",
                "type": "boolean"
              },
              "inputVariables": {
                "default": {},
                "type": "object",
                "additionalProperties": {
                  "type": "object",
                  "properties": {
                    "description": {
                      "default": null,
                      "nullable": true,
                      "type": "string"
                    },
                    "defaultValue": {
                      "default": null,
                      "nullable": true,
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/Markup"
                        }
                      ]
                    },
                    "functionInputVariableID": {
                      "type": "string"
                    },
                    "captureType": {
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/ToolNodeCaptureType"
                        }
                      ]
                    },
                    "required": {
                      "type": "boolean",
                      "description": "Whether the agent must supply a value for this input. Omit it and the API infers: false when defaultValue holds a secret reference (the secret is injected and the model is never asked for it), true otherwise. Sending true together with a secret defaultValue is rejected."
                    }
                  },
                  "required": [
                    "functionInputVariableID"
                  ]
                }
              },
              "captureResponse": {
                "default": {},
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/ToolNodeDataFunctionCaptureResponse"
                },
                "description": "A map of variable names to the parts of the tool response captured into them."
              },
              "type": {
                "type": "string",
                "enum": [
                  "function"
                ],
                "description": "Discriminator indicating this tool executes a custom function.",
                "x-enumNames": [
                  "FUNCTION"
                ]
              },
              "functionID": {
                "type": "string",
                "description": "The ID of the function resource this tool executes."
              }
            },
            "required": [
              "target",
              "type",
              "functionID"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "description": {
                "nullable": true,
                "description": "A description of what the tool does, used by the agent to decide when to call it.",
                "type": "string"
              },
              "target": {
                "$ref": "#/components/schemas/StableToolTarget"
              },
              "messages": {
                "default": null,
                "nullable": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/AgentToolMessages"
                  }
                ]
              },
              "captureInputVariables": {
                "default": {},
                "nullable": true,
                "description": "A map of tool input names to the variables or entities whose values are captured into them.",
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/AgentToolCaptureInputVariable"
                }
              },
              "inputVariables": {
                "default": {},
                "type": "object",
                "additionalProperties": {
                  "type": "object",
                  "properties": {
                    "description": {
                      "default": null,
                      "nullable": true,
                      "type": "string"
                    },
                    "defaultValue": {
                      "default": null,
                      "nullable": true,
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/Markup"
                        }
                      ]
                    },
                    "mcpIntegrationVariableName": {
                      "type": "string"
                    },
                    "captureType": {
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/ToolNodeCaptureType"
                        }
                      ]
                    },
                    "required": {
                      "type": "boolean",
                      "description": "Whether the agent must supply a value for this input. Omit it and the API infers: false when defaultValue holds a secret reference (the secret is injected and the model is never asked for it), true otherwise. Sending true together with a secret defaultValue is rejected."
                    }
                  },
                  "required": [
                    "mcpIntegrationVariableName"
                  ]
                }
              },
              "captureResponse": {
                "default": {},
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/ToolNodeDataMcpIntegrationCaptureResponse"
                },
                "description": "A map of variable names to the parts of the tool response captured into them."
              },
              "type": {
                "type": "string",
                "enum": [
                  "mcp"
                ],
                "description": "Discriminator indicating this tool calls a tool from an MCP server.",
                "x-enumNames": [
                  "MCP"
                ]
              },
              "mcpToolID": {
                "type": "string",
                "description": "The ID of the MCP tool resource this tool calls."
              }
            },
            "required": [
              "target",
              "type",
              "mcpToolID"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "description": {
                "nullable": true,
                "description": "A description of what the tool does, used by the agent to decide when to call it.",
                "type": "string"
              },
              "target": {
                "$ref": "#/components/schemas/StableToolTarget"
              },
              "messages": {
                "default": null,
                "nullable": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/AgentToolMessages"
                  }
                ]
              },
              "captureInputVariables": {
                "default": {},
                "nullable": true,
                "description": "A map of tool input names to the variables or entities whose values are captured into them.",
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/AgentToolCaptureInputVariable"
                }
              },
              "inputVariables": {
                "default": {},
                "type": "object",
                "additionalProperties": {
                  "type": "object",
                  "properties": {
                    "description": {
                      "default": null,
                      "nullable": true,
                      "type": "string"
                    },
                    "defaultValue": {
                      "default": null,
                      "nullable": true,
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/Markup"
                        }
                      ]
                    },
                    "integrationToolVariableName": {
                      "type": "string"
                    },
                    "captureType": {
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/ToolNodeCaptureType"
                        }
                      ]
                    },
                    "required": {
                      "type": "boolean",
                      "description": "Whether the agent must supply a value for this input. Omit it and the API infers: false when defaultValue holds a secret reference (the secret is injected and the model is never asked for it), true otherwise. Sending true together with a secret defaultValue is rejected."
                    }
                  },
                  "required": [
                    "integrationToolVariableName"
                  ]
                }
              },
              "captureResponse": {
                "default": {},
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/ToolNodeDataIntegrationCaptureResponse"
                },
                "description": "A map of variable names to the parts of the tool response captured into them."
              },
              "type": {
                "type": "string",
                "enum": [
                  "integration"
                ],
                "description": "Discriminator indicating this tool calls a connected first-party integration.",
                "x-enumNames": [
                  "INTEGRATION"
                ]
              },
              "integrationToolID": {
                "type": "string",
                "description": "The ID of the integration tool resource this tool calls."
              }
            },
            "required": [
              "target",
              "type",
              "integrationToolID"
            ],
            "additionalProperties": false
          }
        ]
      },
      "StableToolCreateManyRequest": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "api"
                ],
                "description": "Discriminator indicating that API tools are being created.",
                "x-enumNames": [
                  "API"
                ]
              },
              "target": {
                "$ref": "#/components/schemas/StableToolTarget"
              },
              "tools": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "description": {
                      "nullable": true,
                      "description": "A description of what the tool does, used by the agent to decide when to call it.",
                      "type": "string"
                    },
                    "messages": {
                      "default": null,
                      "nullable": true,
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/AgentToolMessages"
                        }
                      ]
                    },
                    "captureInputVariables": {
                      "default": {},
                      "nullable": true,
                      "description": "A map of tool input names to the variables or entities whose values are captured into them.",
                      "type": "object",
                      "additionalProperties": {
                        "$ref": "#/components/schemas/AgentToolCaptureInputVariable"
                      }
                    },
                    "asyncExecution": {
                      "default": false,
                      "description": "When enabled, the tool runs in the background without blocking the conversation.",
                      "type": "boolean"
                    },
                    "inputVariables": {
                      "default": {},
                      "type": "object",
                      "additionalProperties": {
                        "type": "object",
                        "properties": {
                          "description": {
                            "default": null,
                            "nullable": true,
                            "type": "string"
                          },
                          "defaultValue": {
                            "default": null,
                            "nullable": true,
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/Markup"
                              }
                            ]
                          },
                          "apiToolInputVariableID": {
                            "type": "string"
                          },
                          "captureType": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/ToolNodeCaptureType"
                              }
                            ]
                          },
                          "required": {
                            "type": "boolean",
                            "description": "Whether the agent must supply a value for this input. Omit it and the API infers: false when defaultValue holds a secret reference (the secret is injected and the model is never asked for it), true otherwise. Sending true together with a secret defaultValue is rejected."
                          }
                        },
                        "required": [
                          "apiToolInputVariableID"
                        ]
                      }
                    },
                    "captureResponse": {
                      "default": {},
                      "type": "object",
                      "additionalProperties": {
                        "$ref": "#/components/schemas/ToolNodeDataAPICaptureResponse"
                      },
                      "description": "A map of variable names to the parts of the tool response captured into them."
                    },
                    "apiToolID": {
                      "type": "string",
                      "description": "The ID of the API resource this tool executes."
                    }
                  },
                  "required": [
                    "apiToolID"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "type",
              "target",
              "tools"
            ]
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "function"
                ],
                "description": "Discriminator indicating that function tools are being created.",
                "x-enumNames": [
                  "FUNCTION"
                ]
              },
              "target": {
                "$ref": "#/components/schemas/StableToolTarget"
              },
              "tools": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "description": {
                      "nullable": true,
                      "description": "A description of what the tool does, used by the agent to decide when to call it.",
                      "type": "string"
                    },
                    "messages": {
                      "default": null,
                      "nullable": true,
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/AgentToolMessages"
                        }
                      ]
                    },
                    "captureInputVariables": {
                      "default": {},
                      "nullable": true,
                      "description": "A map of tool input names to the variables or entities whose values are captured into them.",
                      "type": "object",
                      "additionalProperties": {
                        "$ref": "#/components/schemas/AgentToolCaptureInputVariable"
                      }
                    },
                    "asyncExecution": {
                      "default": false,
                      "description": "When enabled, the tool runs in the background without blocking the conversation.",
                      "type": "boolean"
                    },
                    "inputVariables": {
                      "default": {},
                      "type": "object",
                      "additionalProperties": {
                        "type": "object",
                        "properties": {
                          "description": {
                            "default": null,
                            "nullable": true,
                            "type": "string"
                          },
                          "defaultValue": {
                            "default": null,
                            "nullable": true,
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/Markup"
                              }
                            ]
                          },
                          "functionInputVariableID": {
                            "type": "string"
                          },
                          "captureType": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/ToolNodeCaptureType"
                              }
                            ]
                          },
                          "required": {
                            "type": "boolean",
                            "description": "Whether the agent must supply a value for this input. Omit it and the API infers: false when defaultValue holds a secret reference (the secret is injected and the model is never asked for it), true otherwise. Sending true together with a secret defaultValue is rejected."
                          }
                        },
                        "required": [
                          "functionInputVariableID"
                        ]
                      }
                    },
                    "captureResponse": {
                      "default": {},
                      "type": "object",
                      "additionalProperties": {
                        "$ref": "#/components/schemas/ToolNodeDataFunctionCaptureResponse"
                      },
                      "description": "A map of variable names to the parts of the tool response captured into them."
                    },
                    "functionID": {
                      "type": "string",
                      "description": "The ID of the function resource this tool executes."
                    }
                  },
                  "required": [
                    "functionID"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "type",
              "target",
              "tools"
            ]
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "mcp"
                ],
                "description": "Discriminator indicating that MCP tools are being created.",
                "x-enumNames": [
                  "MCP"
                ]
              },
              "target": {
                "$ref": "#/components/schemas/StableToolTarget"
              },
              "tools": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "description": {
                      "nullable": true,
                      "description": "A description of what the tool does, used by the agent to decide when to call it.",
                      "type": "string"
                    },
                    "messages": {
                      "default": null,
                      "nullable": true,
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/AgentToolMessages"
                        }
                      ]
                    },
                    "captureInputVariables": {
                      "default": {},
                      "nullable": true,
                      "description": "A map of tool input names to the variables or entities whose values are captured into them.",
                      "type": "object",
                      "additionalProperties": {
                        "$ref": "#/components/schemas/AgentToolCaptureInputVariable"
                      }
                    },
                    "inputVariables": {
                      "default": {},
                      "type": "object",
                      "additionalProperties": {
                        "type": "object",
                        "properties": {
                          "description": {
                            "default": null,
                            "nullable": true,
                            "type": "string"
                          },
                          "defaultValue": {
                            "default": null,
                            "nullable": true,
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/Markup"
                              }
                            ]
                          },
                          "mcpIntegrationVariableName": {
                            "type": "string"
                          },
                          "captureType": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/ToolNodeCaptureType"
                              }
                            ]
                          },
                          "required": {
                            "type": "boolean",
                            "description": "Whether the agent must supply a value for this input. Omit it and the API infers: false when defaultValue holds a secret reference (the secret is injected and the model is never asked for it), true otherwise. Sending true together with a secret defaultValue is rejected."
                          }
                        },
                        "required": [
                          "mcpIntegrationVariableName"
                        ]
                      }
                    },
                    "captureResponse": {
                      "default": {},
                      "type": "object",
                      "additionalProperties": {
                        "$ref": "#/components/schemas/ToolNodeDataMcpIntegrationCaptureResponse"
                      },
                      "description": "A map of variable names to the parts of the tool response captured into them."
                    },
                    "mcpToolID": {
                      "type": "string",
                      "description": "The ID of the MCP tool resource this tool calls."
                    }
                  },
                  "required": [
                    "mcpToolID"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "type",
              "target",
              "tools"
            ]
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "integration"
                ],
                "description": "Discriminator indicating that integration tools are being created.",
                "x-enumNames": [
                  "INTEGRATION"
                ]
              },
              "target": {
                "$ref": "#/components/schemas/StableToolTarget"
              },
              "tools": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "description": {
                      "nullable": true,
                      "description": "A description of what the tool does, used by the agent to decide when to call it.",
                      "type": "string"
                    },
                    "messages": {
                      "default": null,
                      "nullable": true,
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/AgentToolMessages"
                        }
                      ]
                    },
                    "captureInputVariables": {
                      "default": {},
                      "nullable": true,
                      "description": "A map of tool input names to the variables or entities whose values are captured into them.",
                      "type": "object",
                      "additionalProperties": {
                        "$ref": "#/components/schemas/AgentToolCaptureInputVariable"
                      }
                    },
                    "inputVariables": {
                      "default": {},
                      "type": "object",
                      "additionalProperties": {
                        "type": "object",
                        "properties": {
                          "description": {
                            "default": null,
                            "nullable": true,
                            "type": "string"
                          },
                          "defaultValue": {
                            "default": null,
                            "nullable": true,
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/Markup"
                              }
                            ]
                          },
                          "integrationToolVariableName": {
                            "type": "string"
                          },
                          "captureType": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/ToolNodeCaptureType"
                              }
                            ]
                          },
                          "required": {
                            "type": "boolean",
                            "description": "Whether the agent must supply a value for this input. Omit it and the API infers: false when defaultValue holds a secret reference (the secret is injected and the model is never asked for it), true otherwise. Sending true together with a secret defaultValue is rejected."
                          }
                        },
                        "required": [
                          "integrationToolVariableName"
                        ]
                      }
                    },
                    "captureResponse": {
                      "default": {},
                      "type": "object",
                      "additionalProperties": {
                        "$ref": "#/components/schemas/ToolNodeDataIntegrationCaptureResponse"
                      },
                      "description": "A map of variable names to the parts of the tool response captured into them."
                    },
                    "integrationToolID": {
                      "type": "string",
                      "description": "The ID of the integration tool resource this tool calls."
                    }
                  },
                  "required": [
                    "integrationToolID"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "type",
              "target",
              "tools"
            ]
          }
        ]
      },
      "StableToolUpdateRequest": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "description": {
                "nullable": true,
                "description": "A description of what the tool does, used by the agent to decide when to call it.",
                "type": "string"
              },
              "captureInputVariables": {
                "nullable": true,
                "description": "A map of tool input names to the variables or entities whose values are captured into them.",
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/AgentToolCaptureInputVariable"
                }
              },
              "type": {
                "type": "string",
                "enum": [
                  "api"
                ],
                "description": "Discriminator indicating this tool executes a saved API request.",
                "x-enumNames": [
                  "API"
                ]
              },
              "asyncExecution": {
                "type": "boolean",
                "description": "When enabled, the tool runs in the background without blocking the conversation."
              },
              "inputVariables": {
                "type": "object",
                "additionalProperties": {
                  "type": "object",
                  "properties": {
                    "description": {
                      "default": null,
                      "nullable": true,
                      "type": "string"
                    },
                    "defaultValue": {
                      "default": null,
                      "nullable": true,
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/Markup"
                        }
                      ]
                    },
                    "apiToolInputVariableID": {
                      "type": "string"
                    },
                    "captureType": {
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/ToolNodeCaptureType"
                        }
                      ]
                    },
                    "required": {
                      "type": "boolean",
                      "description": "Whether the agent must supply a value for this input. Omit it and the API infers: false when defaultValue holds a secret reference (the secret is injected and the model is never asked for it), true otherwise. Sending true together with a secret defaultValue is rejected."
                    }
                  },
                  "required": [
                    "apiToolInputVariableID"
                  ]
                }
              },
              "captureResponse": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/ToolNodeDataAPICaptureResponse"
                },
                "description": "A map of variable names to the parts of the tool response captured into them."
              }
            },
            "required": [
              "type"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "description": {
                "nullable": true,
                "description": "A description of what the tool does, used by the agent to decide when to call it.",
                "type": "string"
              },
              "captureInputVariables": {
                "nullable": true,
                "description": "A map of tool input names to the variables or entities whose values are captured into them.",
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/AgentToolCaptureInputVariable"
                }
              },
              "type": {
                "type": "string",
                "enum": [
                  "function"
                ],
                "description": "Discriminator indicating this tool executes a custom function.",
                "x-enumNames": [
                  "FUNCTION"
                ]
              },
              "asyncExecution": {
                "type": "boolean",
                "description": "When enabled, the tool runs in the background without blocking the conversation."
              },
              "inputVariables": {
                "type": "object",
                "additionalProperties": {
                  "type": "object",
                  "properties": {
                    "description": {
                      "default": null,
                      "nullable": true,
                      "type": "string"
                    },
                    "defaultValue": {
                      "default": null,
                      "nullable": true,
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/Markup"
                        }
                      ]
                    },
                    "functionInputVariableID": {
                      "type": "string"
                    },
                    "captureType": {
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/ToolNodeCaptureType"
                        }
                      ]
                    },
                    "required": {
                      "type": "boolean",
                      "description": "Whether the agent must supply a value for this input. Omit it and the API infers: false when defaultValue holds a secret reference (the secret is injected and the model is never asked for it), true otherwise. Sending true together with a secret defaultValue is rejected."
                    }
                  },
                  "required": [
                    "functionInputVariableID"
                  ]
                }
              },
              "captureResponse": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/ToolNodeDataFunctionCaptureResponse"
                },
                "description": "A map of variable names to the parts of the tool response captured into them."
              }
            },
            "required": [
              "type"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "description": {
                "nullable": true,
                "description": "A description of what the tool does, used by the agent to decide when to call it.",
                "type": "string"
              },
              "captureInputVariables": {
                "nullable": true,
                "description": "A map of tool input names to the variables or entities whose values are captured into them.",
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/AgentToolCaptureInputVariable"
                }
              },
              "type": {
                "type": "string",
                "enum": [
                  "mcp"
                ],
                "description": "Discriminator indicating this tool calls a tool from an MCP server.",
                "x-enumNames": [
                  "MCP"
                ]
              },
              "inputVariables": {
                "type": "object",
                "additionalProperties": {
                  "type": "object",
                  "properties": {
                    "description": {
                      "default": null,
                      "nullable": true,
                      "type": "string"
                    },
                    "defaultValue": {
                      "default": null,
                      "nullable": true,
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/Markup"
                        }
                      ]
                    },
                    "mcpIntegrationVariableName": {
                      "type": "string"
                    },
                    "captureType": {
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/ToolNodeCaptureType"
                        }
                      ]
                    },
                    "required": {
                      "type": "boolean",
                      "description": "Whether the agent must supply a value for this input. Omit it and the API infers: false when defaultValue holds a secret reference (the secret is injected and the model is never asked for it), true otherwise. Sending true together with a secret defaultValue is rejected."
                    }
                  },
                  "required": [
                    "mcpIntegrationVariableName"
                  ]
                }
              },
              "captureResponse": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/ToolNodeDataMcpIntegrationCaptureResponse"
                },
                "description": "A map of variable names to the parts of the tool response captured into them."
              }
            },
            "required": [
              "type"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "description": {
                "nullable": true,
                "description": "A description of what the tool does, used by the agent to decide when to call it.",
                "type": "string"
              },
              "captureInputVariables": {
                "nullable": true,
                "description": "A map of tool input names to the variables or entities whose values are captured into them.",
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/AgentToolCaptureInputVariable"
                }
              },
              "type": {
                "type": "string",
                "enum": [
                  "integration"
                ],
                "description": "Discriminator indicating this tool calls a connected first-party integration.",
                "x-enumNames": [
                  "INTEGRATION"
                ]
              },
              "inputVariables": {
                "type": "object",
                "additionalProperties": {
                  "type": "object",
                  "properties": {
                    "description": {
                      "default": null,
                      "nullable": true,
                      "type": "string"
                    },
                    "defaultValue": {
                      "default": null,
                      "nullable": true,
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/Markup"
                        }
                      ]
                    },
                    "integrationToolVariableName": {
                      "type": "string"
                    },
                    "captureType": {
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/ToolNodeCaptureType"
                        }
                      ]
                    },
                    "required": {
                      "type": "boolean",
                      "description": "Whether the agent must supply a value for this input. Omit it and the API infers: false when defaultValue holds a secret reference (the secret is injected and the model is never asked for it), true otherwise. Sending true together with a secret defaultValue is rejected."
                    }
                  },
                  "required": [
                    "integrationToolVariableName"
                  ]
                }
              },
              "captureResponse": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/ToolNodeDataIntegrationCaptureResponse"
                },
                "description": "A map of variable names to the parts of the tool response captured into them."
              }
            },
            "required": [
              "type"
            ],
            "additionalProperties": false
          }
        ]
      },
      "SimulationRunLog": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/SimulationRunEndLog"
          },
          {
            "$ref": "#/components/schemas/SimulationRunTraceLog"
          },
          {
            "$ref": "#/components/schemas/SimulationRunActionLog"
          }
        ]
      },
      "SimulationRunEndLog": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "end"
            ],
            "x-enumNames": [
              "END"
            ]
          },
          "payload": {
            "type": "object",
            "properties": {
              "reason": {
                "type": "string"
              }
            }
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          }
        },
        "required": [
          "id",
          "type",
          "payload",
          "createdAt"
        ]
      },
      "SimulationRunTraceLog": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "trace"
            ],
            "x-enumNames": [
              "TRACE"
            ]
          },
          "payload": {
            "type": "object",
            "properties": {
              "type": {
                "type": "string"
              },
              "paths": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/TracePath"
                }
              },
              "defaultPath": {
                "type": "number"
              },
              "time": {
                "type": "number"
              },
              "turnID": {
                "type": "string"
              },
              "handleID": {
                "type": "string"
              }
            },
            "required": [
              "type"
            ],
            "additionalProperties": {}
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          }
        },
        "required": [
          "id",
          "type",
          "payload",
          "createdAt"
        ]
      },
      "SimulationRunActionLog": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "action"
            ],
            "x-enumNames": [
              "ACTION"
            ]
          },
          "payload": {
            "type": "object",
            "properties": {
              "type": {
                "type": "string"
              },
              "payload": {},
              "diagramID": {
                "type": "string"
              },
              "time": {
                "type": "number"
              },
              "metadata": {
                "type": "object",
                "additionalProperties": {}
              }
            },
            "required": [
              "type"
            ],
            "additionalProperties": {}
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          }
        },
        "required": [
          "id",
          "type",
          "payload",
          "createdAt"
        ]
      },
      "StableAnalyticsQueryCallCountResponse": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "count": {
                  "type": "number"
                },
                "durationMS": {
                  "type": "number"
                },
                "intervalStartDate": {
                  "type": "string",
                  "allOf": [
                    {
                      "type": "string",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                    },
                    {
                      "type": "string",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                    }
                  ]
                }
              },
              "required": [
                "count",
                "durationMS",
                "intervalStartDate"
              ]
            }
          }
        },
        "required": [
          "rows"
        ]
      },
      "StableAnalyticsQueryCallCountRequest": {
        "type": "object",
        "properties": {
          "endDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "startDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "timezone": {
            "type": "string"
          },
          "interval": {
            "type": "string",
            "enum": [
              "hour",
              "day",
              "week",
              "month"
            ],
            "x-enumNames": [
              "HOUR",
              "DAY",
              "WEEK",
              "MONTH"
            ]
          },
          "version": {
            "description": "Filters results to the draft or published version of the environment. Defaults to both.",
            "type": "string",
            "enum": [
              "draft",
              "published"
            ],
            "x-enumNames": [
              "DRAFT",
              "PUBLISHED"
            ]
          },
          "environmentAlias": {
            "description": "The ID or alias of the environment to filter results by. Defaults to all environments.",
            "type": "string"
          }
        },
        "required": [
          "endDate",
          "startDate",
          "interval"
        ],
        "additionalProperties": false
      },
      "StableAnalyticsQueryCallDurationResponse": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "durationMS": {
                  "type": "number"
                },
                "intervalStartDate": {
                  "type": "string",
                  "allOf": [
                    {
                      "type": "string",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                    },
                    {
                      "type": "string",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                    }
                  ]
                }
              },
              "required": [
                "durationMS",
                "intervalStartDate"
              ]
            }
          }
        },
        "required": [
          "rows"
        ]
      },
      "StableAnalyticsQueryCallDurationRequest": {
        "type": "object",
        "properties": {
          "endDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "startDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "timezone": {
            "type": "string"
          },
          "interval": {
            "type": "string",
            "enum": [
              "hour",
              "day",
              "week",
              "month"
            ],
            "x-enumNames": [
              "HOUR",
              "DAY",
              "WEEK",
              "MONTH"
            ]
          },
          "version": {
            "description": "Filters results to the draft or published version of the environment. Defaults to both.",
            "type": "string",
            "enum": [
              "draft",
              "published"
            ],
            "x-enumNames": [
              "DRAFT",
              "PUBLISHED"
            ]
          },
          "environmentAlias": {
            "description": "The ID or alias of the environment to filter results by. Defaults to all environments.",
            "type": "string"
          }
        },
        "required": [
          "endDate",
          "startDate",
          "interval"
        ],
        "additionalProperties": false
      },
      "StableAnalyticsQueryWorkspaceTranscriptCountResponse": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "count": {
                  "type": "number"
                },
                "version": {
                  "description": "Whether the transcripts in this row came from the draft or published version of the environment.",
                  "type": "string",
                  "enum": [
                    "draft",
                    "published"
                  ],
                  "x-enumNames": [
                    "DRAFT",
                    "PUBLISHED"
                  ]
                },
                "projectID": {
                  "description": "The ID of the project this row belongs to.",
                  "type": "string"
                },
                "environmentAlias": {
                  "description": "The alias of the environment this row belongs to.",
                  "type": "string"
                }
              },
              "required": [
                "count"
              ]
            }
          }
        },
        "required": [
          "rows"
        ]
      },
      "StableAnalyticsQueryWorkspaceTranscriptCountRequest": {
        "type": "object",
        "properties": {
          "endDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "startDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "timezone": {
            "type": "string"
          },
          "projectIDs": {
            "description": "The IDs of the projects to filter results by. Defaults to all projects in the workspace.",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "endDate",
          "startDate"
        ],
        "additionalProperties": false
      },
      "StableAnalyticsQueryProjectTranscriptCountResponse": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "count": {
                  "type": "number"
                },
                "intervalStartDate": {
                  "type": "string",
                  "allOf": [
                    {
                      "type": "string",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                    },
                    {
                      "type": "string",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                    }
                  ]
                }
              },
              "required": [
                "count",
                "intervalStartDate"
              ]
            }
          }
        },
        "required": [
          "rows"
        ]
      },
      "StableAnalyticsQueryProjectTranscriptCountRequest": {
        "type": "object",
        "properties": {
          "endDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "startDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "timezone": {
            "type": "string"
          },
          "interval": {
            "type": "string",
            "enum": [
              "hour",
              "day",
              "week",
              "month"
            ],
            "x-enumNames": [
              "HOUR",
              "DAY",
              "WEEK",
              "MONTH"
            ]
          },
          "version": {
            "description": "Filters results to the draft or published version of the environment. Defaults to both.",
            "type": "string",
            "enum": [
              "draft",
              "published"
            ],
            "x-enumNames": [
              "DRAFT",
              "PUBLISHED"
            ]
          },
          "environmentAlias": {
            "description": "The ID or alias of the environment to filter results by. Defaults to all environments.",
            "type": "string"
          }
        },
        "required": [
          "endDate",
          "startDate",
          "interval"
        ],
        "additionalProperties": false
      },
      "StableAnalyticsQueryProjectTranscriptCostResponse": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "intervalStartDate": {
                  "type": "string",
                  "allOf": [
                    {
                      "type": "string",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                    },
                    {
                      "type": "string",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                    }
                  ]
                },
                "transcriptCount": {
                  "type": "number"
                },
                "cost": {
                  "type": "number",
                  "description": "The total cost incurred by transcripts for this row."
                }
              },
              "required": [
                "intervalStartDate",
                "transcriptCount",
                "cost"
              ]
            }
          }
        },
        "required": [
          "rows"
        ]
      },
      "StableAnalyticsQueryProjectTranscriptCostRequest": {
        "type": "object",
        "properties": {
          "endDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "startDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "timezone": {
            "type": "string"
          },
          "interval": {
            "type": "string",
            "enum": [
              "hour",
              "day",
              "week",
              "month"
            ],
            "x-enumNames": [
              "HOUR",
              "DAY",
              "WEEK",
              "MONTH"
            ]
          },
          "usageClass": {
            "type": "string",
            "enum": [
              "Host",
              "Build",
              "Test",
              "Monitor"
            ],
            "x-enumNames": [
              "HOST",
              "BUILD",
              "TEST",
              "MONITOR"
            ]
          },
          "version": {
            "description": "Filters results to the draft or published version of the environment. Defaults to both.",
            "type": "string",
            "enum": [
              "draft",
              "published"
            ],
            "x-enumNames": [
              "DRAFT",
              "PUBLISHED"
            ]
          },
          "environmentAlias": {
            "description": "The ID or alias of the environment to filter results by. Defaults to all environments.",
            "type": "string"
          }
        },
        "required": [
          "endDate",
          "startDate",
          "interval"
        ],
        "additionalProperties": false
      },
      "StableAnalyticsQueryWorkspaceInteractionCountResponse": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string"
                },
                "count": {
                  "type": "number"
                }
              },
              "required": [
                "type",
                "count"
              ]
            }
          }
        },
        "required": [
          "rows"
        ]
      },
      "StableAnalyticsQueryWorkspaceInteractionCountRequest": {
        "type": "object",
        "properties": {
          "endDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "startDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "timezone": {
            "type": "string"
          },
          "projectIDs": {
            "description": "The IDs of the projects to filter results by. Defaults to all projects in the workspace.",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "endDate",
          "startDate"
        ],
        "additionalProperties": false
      },
      "StableAnalyticsQueryProjectInteractionCountResponse": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "count": {
                  "type": "number"
                },
                "averageLatencyMS": {
                  "type": "number"
                },
                "intervalStartDate": {
                  "type": "string",
                  "allOf": [
                    {
                      "type": "string",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                    },
                    {
                      "type": "string",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                    }
                  ]
                }
              },
              "required": [
                "count",
                "averageLatencyMS",
                "intervalStartDate"
              ]
            }
          }
        },
        "required": [
          "rows"
        ]
      },
      "StableAnalyticsQueryProjectInteractionCountRequest": {
        "type": "object",
        "properties": {
          "endDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "startDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "timezone": {
            "type": "string"
          },
          "interval": {
            "type": "string",
            "enum": [
              "hour",
              "day",
              "week",
              "month"
            ],
            "x-enumNames": [
              "HOUR",
              "DAY",
              "WEEK",
              "MONTH"
            ]
          },
          "version": {
            "description": "Filters results to the draft or published version of the environment. Defaults to both.",
            "type": "string",
            "enum": [
              "draft",
              "published"
            ],
            "x-enumNames": [
              "DRAFT",
              "PUBLISHED"
            ]
          },
          "environmentAlias": {
            "description": "The ID or alias of the environment to filter results by. Defaults to all environments.",
            "type": "string"
          }
        },
        "required": [
          "endDate",
          "startDate",
          "interval"
        ],
        "additionalProperties": false
      },
      "StableAnalyticsQueryOrganizationTokenUsageResponse": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "model": {
                  "type": "string"
                },
                "count": {
                  "type": "number"
                }
              },
              "required": [
                "model",
                "count"
              ]
            }
          }
        },
        "required": [
          "rows"
        ]
      },
      "StableAnalyticsQueryOrganizationTokenUsageRequest": {
        "type": "object",
        "properties": {
          "endDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "startDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "timezone": {
            "type": "string"
          },
          "workspaceIDs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "projectIDs": {
            "description": "The IDs of the projects to filter results by. Defaults to all projects in the workspace.",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "endDate",
          "startDate"
        ],
        "additionalProperties": false
      },
      "StableAnalyticsQueryWorkspaceTokenUsageResponse": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "model": {
                  "type": "string"
                },
                "count": {
                  "type": "number"
                }
              },
              "required": [
                "model",
                "count"
              ]
            }
          }
        },
        "required": [
          "rows"
        ]
      },
      "StableAnalyticsQueryWorkspaceTokenUsageRequest": {
        "type": "object",
        "properties": {
          "endDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "startDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "timezone": {
            "type": "string"
          },
          "projectIDs": {
            "description": "The IDs of the projects to filter results by. Defaults to all projects in the workspace.",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "endDate",
          "startDate"
        ],
        "additionalProperties": false
      },
      "StableAnalyticsQueryProjectTokenUsageResponse": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "model": {
                  "nullable": true,
                  "type": "string"
                },
                "count": {
                  "type": "number"
                },
                "intervalStartDate": {
                  "type": "string",
                  "allOf": [
                    {
                      "type": "string",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                    },
                    {
                      "type": "string",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                    }
                  ]
                }
              },
              "required": [
                "model",
                "count",
                "intervalStartDate"
              ]
            }
          }
        },
        "required": [
          "rows"
        ]
      },
      "StableAnalyticsQueryProjectTokenUsageRequest": {
        "type": "object",
        "properties": {
          "endDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "startDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "timezone": {
            "type": "string"
          },
          "interval": {
            "type": "string",
            "enum": [
              "hour",
              "day",
              "week",
              "month"
            ],
            "x-enumNames": [
              "HOUR",
              "DAY",
              "WEEK",
              "MONTH"
            ]
          },
          "version": {
            "description": "Filters results to the draft or published version of the environment. Defaults to both.",
            "type": "string",
            "enum": [
              "draft",
              "published"
            ],
            "x-enumNames": [
              "DRAFT",
              "PUBLISHED"
            ]
          },
          "environmentAlias": {
            "description": "The ID or alias of the environment to filter results by. Defaults to all environments.",
            "type": "string"
          }
        },
        "required": [
          "endDate",
          "startDate",
          "interval"
        ],
        "additionalProperties": false
      },
      "StableAnalyticsQueryOrganizationHourlyTokenUsageResponse": {
        "type": "object",
        "properties": {
          "usage": {
            "type": "object",
            "properties": {
              "totalCount": {
                "type": "number"
              },
              "filteredCount": {
                "type": "number"
              }
            },
            "required": [
              "totalCount",
              "filteredCount"
            ]
          }
        },
        "required": [
          "usage"
        ]
      },
      "StableAnalyticsQueryHourlyOrganizationTokenUsageRequest": {
        "type": "object",
        "properties": {
          "endDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "startDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "timezone": {
            "type": "string"
          },
          "workspaceIDs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "projectIDs": {
            "description": "The IDs of the projects to filter results by. Defaults to all projects in the workspace.",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "endDate",
          "startDate"
        ],
        "additionalProperties": false
      },
      "StableAnalyticsQueryProjectHourlyTokenUsageResponse": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "model": {
                  "nullable": true,
                  "type": "string"
                },
                "usageCategory": {
                  "nullable": true,
                  "type": "string"
                },
                "count": {
                  "type": "number"
                },
                "intervalStartDate": {
                  "type": "string",
                  "allOf": [
                    {
                      "type": "string",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                    },
                    {
                      "type": "string",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                    }
                  ]
                }
              },
              "required": [
                "model",
                "usageCategory",
                "count",
                "intervalStartDate"
              ]
            }
          }
        },
        "required": [
          "rows"
        ]
      },
      "StableAnalyticsQueryProjectHourlyTokenUsageRequest": {
        "type": "object",
        "properties": {
          "endDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "startDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "timezone": {
            "type": "string"
          },
          "interval": {
            "type": "string",
            "enum": [
              "hour",
              "day",
              "week",
              "month"
            ],
            "x-enumNames": [
              "HOUR",
              "DAY",
              "WEEK",
              "MONTH"
            ]
          },
          "usageClass": {
            "type": "string",
            "enum": [
              "Host",
              "Build",
              "Test",
              "Monitor"
            ],
            "x-enumNames": [
              "HOST",
              "BUILD",
              "TEST",
              "MONITOR"
            ]
          },
          "version": {
            "description": "Filters results to the draft or published version of the environment. Defaults to both.",
            "type": "string",
            "enum": [
              "draft",
              "published"
            ],
            "x-enumNames": [
              "DRAFT",
              "PUBLISHED"
            ]
          },
          "environmentAlias": {
            "description": "The ID or alias of the environment to filter results by. Defaults to all environments.",
            "type": "string"
          }
        },
        "required": [
          "endDate",
          "startDate",
          "interval"
        ],
        "additionalProperties": false
      },
      "StableAnalyticsQueryDailyTokenUsageResponse": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "intervalStartDate": {
                  "type": "string"
                },
                "usageClass": {
                  "nullable": true,
                  "type": "string"
                },
                "usageCategory": {
                  "nullable": true,
                  "type": "string"
                },
                "model": {
                  "nullable": true,
                  "type": "string"
                },
                "misclassified": {
                  "type": "boolean"
                },
                "count": {
                  "type": "number"
                }
              },
              "required": [
                "intervalStartDate",
                "usageClass",
                "usageCategory",
                "model",
                "misclassified",
                "count"
              ]
            }
          }
        },
        "required": [
          "rows"
        ]
      },
      "StableAnalyticsQueryDailyTokenUsageRequest": {
        "type": "object",
        "properties": {
          "endDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "startDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "timezone": {
            "type": "string"
          },
          "workspaceIDs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "projectIDs": {
            "description": "The IDs of the projects to filter results by. Defaults to all projects in the workspace.",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "endDate",
          "startDate"
        ],
        "additionalProperties": false
      },
      "StableAnalyticsQueryEntityTokenUsageResponse": {
        "type": "object",
        "properties": {
          "workspaces": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "workspaceID": {
                  "type": "string"
                },
                "count": {
                  "type": "number"
                }
              },
              "required": [
                "workspaceID",
                "count"
              ]
            }
          },
          "projects": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "projectID": {
                  "type": "string",
                  "description": "The ID of the project."
                },
                "count": {
                  "type": "number",
                  "description": "The number of tokens used by the project."
                }
              },
              "required": [
                "projectID",
                "count"
              ]
            },
            "description": "The token usage broken down by project."
          }
        },
        "required": [
          "workspaces",
          "projects"
        ]
      },
      "StableAnalyticsQueryEntityTokenUsageRequest": {
        "type": "object",
        "properties": {
          "endDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "startDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "timezone": {
            "type": "string"
          }
        },
        "required": [
          "endDate",
          "startDate"
        ],
        "additionalProperties": false
      },
      "StableAnalyticsQueryCategoryTokenUsageResponse": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "usageCategory": {
                  "nullable": true,
                  "type": "string"
                },
                "count": {
                  "type": "number"
                },
                "intervalStartDate": {
                  "type": "string",
                  "allOf": [
                    {
                      "type": "string",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                    },
                    {
                      "type": "string",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                    }
                  ]
                }
              },
              "required": [
                "usageCategory",
                "count",
                "intervalStartDate"
              ]
            }
          }
        },
        "required": [
          "rows"
        ]
      },
      "StableAnalyticsQueryCategoryTokenUsageRequest": {
        "type": "object",
        "properties": {
          "endDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "startDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "timezone": {
            "type": "string"
          },
          "interval": {
            "type": "string",
            "enum": [
              "hour",
              "day",
              "week",
              "month"
            ],
            "x-enumNames": [
              "HOUR",
              "DAY",
              "WEEK",
              "MONTH"
            ]
          },
          "usageClass": {
            "type": "string",
            "enum": [
              "Host",
              "Build",
              "Test",
              "Monitor"
            ],
            "x-enumNames": [
              "HOST",
              "BUILD",
              "TEST",
              "MONITOR"
            ]
          },
          "version": {
            "description": "Filters results to the draft or published version of the environment. Defaults to both.",
            "type": "string",
            "enum": [
              "draft",
              "published"
            ],
            "x-enumNames": [
              "DRAFT",
              "PUBLISHED"
            ]
          },
          "environmentAlias": {
            "description": "The ID or alias of the environment to filter results by. Defaults to all environments.",
            "type": "string"
          }
        },
        "required": [
          "endDate",
          "startDate",
          "interval"
        ],
        "additionalProperties": false
      },
      "StableAnalyticsQueryPlaybookUsageResponse": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "count": {
                  "type": "number"
                },
                "successCount": {
                  "type": "number"
                },
                "averageLatencyMS": {
                  "type": "number"
                },
                "playbookID": {
                  "type": "string",
                  "description": "The ID of the playbook this usage row refers to."
                }
              },
              "required": [
                "count",
                "successCount",
                "averageLatencyMS",
                "playbookID"
              ]
            }
          }
        },
        "required": [
          "rows"
        ]
      },
      "StableAnalyticsQueryPlaybookUsageRequest": {
        "type": "object",
        "properties": {
          "endDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "startDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "timezone": {
            "type": "string"
          },
          "excludeID": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "limit": {
            "default": 10,
            "type": "number",
            "maximum": 20
          },
          "orderDirection": {
            "type": "string",
            "enum": [
              "ASC",
              "DESC"
            ],
            "x-enumNames": [
              "ASC",
              "DESC"
            ]
          },
          "orderBy": {
            "type": "string",
            "enum": [
              "count",
              "averageLatencyMS"
            ],
            "x-enumNames": [
              "COUNT",
              "AVERAGE_LATENCY_MS"
            ]
          },
          "version": {
            "description": "Filters results to the draft or published version of the environment. Defaults to both.",
            "type": "string",
            "enum": [
              "draft",
              "published"
            ],
            "x-enumNames": [
              "DRAFT",
              "PUBLISHED"
            ]
          },
          "environmentAlias": {
            "description": "The ID or alias of the environment to filter results by. Defaults to all environments.",
            "type": "string"
          }
        },
        "required": [
          "endDate",
          "startDate"
        ],
        "additionalProperties": false
      },
      "StableAnalyticsQueryWorkflowUsageResponse": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "count": {
                  "type": "number"
                },
                "workflowID": {
                  "type": "string",
                  "description": "The ID of the workflow this usage row refers to."
                }
              },
              "required": [
                "count",
                "workflowID"
              ]
            }
          }
        },
        "required": [
          "rows"
        ]
      },
      "StableAnalyticsQueryWorkflowUsageRequest": {
        "type": "object",
        "properties": {
          "endDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "startDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "timezone": {
            "type": "string"
          },
          "excludeID": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "limit": {
            "default": 10,
            "type": "number",
            "maximum": 20
          },
          "orderDirection": {
            "type": "string",
            "enum": [
              "ASC",
              "DESC"
            ],
            "x-enumNames": [
              "ASC",
              "DESC"
            ]
          },
          "version": {
            "description": "Filters results to the draft or published version of the environment. Defaults to both.",
            "type": "string",
            "enum": [
              "draft",
              "published"
            ],
            "x-enumNames": [
              "DRAFT",
              "PUBLISHED"
            ]
          },
          "environmentAlias": {
            "description": "The ID or alias of the environment to filter results by. Defaults to all environments.",
            "type": "string"
          }
        },
        "required": [
          "endDate",
          "startDate"
        ],
        "additionalProperties": false
      },
      "StableAnalyticsQueryPromptUsageResponse": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "count": {
                  "type": "number"
                },
                "promptID": {
                  "type": "string"
                },
                "successCount": {
                  "type": "number"
                },
                "averageLatencyMS": {
                  "type": "number"
                }
              },
              "required": [
                "count",
                "promptID",
                "successCount",
                "averageLatencyMS"
              ]
            }
          }
        },
        "required": [
          "rows"
        ]
      },
      "StableAnalyticsQueryPromptUsageRequest": {
        "type": "object",
        "properties": {
          "endDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "startDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "timezone": {
            "type": "string"
          },
          "excludeID": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "limit": {
            "default": 10,
            "type": "number",
            "maximum": 20
          },
          "orderDirection": {
            "type": "string",
            "enum": [
              "ASC",
              "DESC"
            ],
            "x-enumNames": [
              "ASC",
              "DESC"
            ]
          },
          "orderBy": {
            "type": "string",
            "enum": [
              "count",
              "averageLatencyMS"
            ],
            "x-enumNames": [
              "COUNT",
              "AVERAGE_LATENCY_MS"
            ]
          },
          "version": {
            "description": "Filters results to the draft or published version of the environment. Defaults to both.",
            "type": "string",
            "enum": [
              "draft",
              "published"
            ],
            "x-enumNames": [
              "DRAFT",
              "PUBLISHED"
            ]
          },
          "environmentAlias": {
            "description": "The ID or alias of the environment to filter results by. Defaults to all environments.",
            "type": "string"
          }
        },
        "required": [
          "endDate",
          "startDate"
        ],
        "additionalProperties": false
      },
      "StableAnalyticsQueryIntentUsageResponse": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "count": {
                  "type": "number"
                },
                "intentID": {
                  "type": "string"
                }
              },
              "required": [
                "count",
                "intentID"
              ]
            }
          }
        },
        "required": [
          "rows"
        ]
      },
      "StableAnalyticsQueryIntentUsageRequest": {
        "type": "object",
        "properties": {
          "endDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "startDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "timezone": {
            "type": "string"
          },
          "excludeID": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "limit": {
            "default": 10,
            "type": "number",
            "maximum": 20
          },
          "orderDirection": {
            "type": "string",
            "enum": [
              "ASC",
              "DESC"
            ],
            "x-enumNames": [
              "ASC",
              "DESC"
            ]
          },
          "version": {
            "description": "Filters results to the draft or published version of the environment. Defaults to both.",
            "type": "string",
            "enum": [
              "draft",
              "published"
            ],
            "x-enumNames": [
              "DRAFT",
              "PUBLISHED"
            ]
          },
          "environmentAlias": {
            "description": "The ID or alias of the environment to filter results by. Defaults to all environments.",
            "type": "string"
          }
        },
        "required": [
          "endDate",
          "startDate"
        ],
        "additionalProperties": false
      },
      "StableAnalyticsQueryFunctionUsageResponse": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "count": {
                  "type": "number"
                },
                "functionID": {
                  "type": "string"
                },
                "successCount": {
                  "type": "number"
                },
                "averageLatencyMS": {
                  "type": "number"
                }
              },
              "required": [
                "count",
                "functionID",
                "successCount",
                "averageLatencyMS"
              ]
            }
          }
        },
        "required": [
          "rows"
        ]
      },
      "StableAnalyticsQueryFunctionUsageRequest": {
        "type": "object",
        "properties": {
          "endDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "startDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "timezone": {
            "type": "string"
          },
          "excludeID": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "limit": {
            "default": 10,
            "type": "number",
            "maximum": 20
          },
          "orderDirection": {
            "type": "string",
            "enum": [
              "ASC",
              "DESC"
            ],
            "x-enumNames": [
              "ASC",
              "DESC"
            ]
          },
          "orderBy": {
            "type": "string",
            "enum": [
              "count",
              "averageLatencyMS"
            ],
            "x-enumNames": [
              "COUNT",
              "AVERAGE_LATENCY_MS"
            ]
          },
          "version": {
            "description": "Filters results to the draft or published version of the environment. Defaults to both.",
            "type": "string",
            "enum": [
              "draft",
              "published"
            ],
            "x-enumNames": [
              "DRAFT",
              "PUBLISHED"
            ]
          },
          "environmentAlias": {
            "description": "The ID or alias of the environment to filter results by. Defaults to all environments.",
            "type": "string"
          }
        },
        "required": [
          "endDate",
          "startDate"
        ],
        "additionalProperties": false
      },
      "StableAnalyticsQueryAPIToolUsageResponse": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "count": {
                  "type": "number"
                },
                "apiToolID": {
                  "type": "string"
                },
                "successCount": {
                  "type": "number"
                },
                "averageLatencyMS": {
                  "type": "number"
                }
              },
              "required": [
                "count",
                "apiToolID",
                "successCount",
                "averageLatencyMS"
              ]
            }
          }
        },
        "required": [
          "rows"
        ]
      },
      "StableAnalyticsQueryAPIToolUsageRequest": {
        "type": "object",
        "properties": {
          "endDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "startDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "timezone": {
            "type": "string"
          },
          "excludeID": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "limit": {
            "default": 10,
            "type": "number",
            "maximum": 20
          },
          "orderDirection": {
            "type": "string",
            "enum": [
              "ASC",
              "DESC"
            ],
            "x-enumNames": [
              "ASC",
              "DESC"
            ]
          },
          "orderBy": {
            "type": "string",
            "enum": [
              "count",
              "averageLatencyMS"
            ],
            "x-enumNames": [
              "COUNT",
              "AVERAGE_LATENCY_MS"
            ]
          },
          "version": {
            "description": "Filters results to the draft or published version of the environment. Defaults to both.",
            "type": "string",
            "enum": [
              "draft",
              "published"
            ],
            "x-enumNames": [
              "DRAFT",
              "PUBLISHED"
            ]
          },
          "environmentAlias": {
            "description": "The ID or alias of the environment to filter results by. Defaults to all environments.",
            "type": "string"
          }
        },
        "required": [
          "endDate",
          "startDate"
        ],
        "additionalProperties": false
      },
      "StableAnalyticsQueryMCPToolUsageResponse": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "count": {
                  "type": "number"
                },
                "mcpToolName": {
                  "type": "string"
                },
                "successCount": {
                  "type": "number"
                },
                "averageLatencyMS": {
                  "type": "number"
                }
              },
              "required": [
                "count",
                "mcpToolName",
                "successCount",
                "averageLatencyMS"
              ]
            }
          }
        },
        "required": [
          "rows"
        ]
      },
      "StableAnalyticsQueryMCPToolUsageRequest": {
        "type": "object",
        "properties": {
          "endDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "startDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "timezone": {
            "type": "string"
          },
          "excludeID": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "limit": {
            "default": 10,
            "type": "number",
            "maximum": 20
          },
          "orderDirection": {
            "type": "string",
            "enum": [
              "ASC",
              "DESC"
            ],
            "x-enumNames": [
              "ASC",
              "DESC"
            ]
          },
          "orderBy": {
            "type": "string",
            "enum": [
              "count",
              "averageLatencyMS"
            ],
            "x-enumNames": [
              "COUNT",
              "AVERAGE_LATENCY_MS"
            ]
          },
          "version": {
            "description": "Filters results to the draft or published version of the environment. Defaults to both.",
            "type": "string",
            "enum": [
              "draft",
              "published"
            ],
            "x-enumNames": [
              "DRAFT",
              "PUBLISHED"
            ]
          },
          "environmentAlias": {
            "description": "The ID or alias of the environment to filter results by. Defaults to all environments.",
            "type": "string"
          }
        },
        "required": [
          "endDate",
          "startDate"
        ],
        "additionalProperties": false
      },
      "StableAnalyticsQueryKnowledgeBaseDocumentUsageResponse": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "count": {
                  "type": "number"
                },
                "documentID": {
                  "type": "string"
                }
              },
              "required": [
                "count",
                "documentID"
              ]
            }
          }
        },
        "required": [
          "rows"
        ]
      },
      "StableAnalyticsQueryKnowledgeBaseDocumentUsageRequest": {
        "type": "object",
        "properties": {
          "endDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "startDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "timezone": {
            "type": "string"
          },
          "excludeID": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "limit": {
            "default": 10,
            "type": "number",
            "maximum": 20
          },
          "orderDirection": {
            "type": "string",
            "enum": [
              "ASC",
              "DESC"
            ],
            "x-enumNames": [
              "ASC",
              "DESC"
            ]
          },
          "version": {
            "description": "Filters results to the draft or published version of the environment. Defaults to both.",
            "type": "string",
            "enum": [
              "draft",
              "published"
            ],
            "x-enumNames": [
              "DRAFT",
              "PUBLISHED"
            ]
          },
          "environmentAlias": {
            "description": "The ID or alias of the environment to filter results by. Defaults to all environments.",
            "type": "string"
          }
        },
        "required": [
          "endDate",
          "startDate"
        ],
        "additionalProperties": false
      },
      "StableAnalyticsQueryIntegrationUsageResponse": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "count": {
                  "type": "number"
                },
                "integrationToolName": {
                  "type": "string"
                },
                "successCount": {
                  "type": "number"
                },
                "averageLatencyMS": {
                  "type": "number"
                }
              },
              "required": [
                "count",
                "integrationToolName",
                "successCount",
                "averageLatencyMS"
              ]
            }
          }
        },
        "required": [
          "rows"
        ]
      },
      "StableAnalyticsQueryIntegrationUsageRequest": {
        "type": "object",
        "properties": {
          "endDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "startDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "timezone": {
            "type": "string"
          },
          "excludeID": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "limit": {
            "default": 10,
            "type": "number",
            "maximum": 20
          },
          "orderDirection": {
            "type": "string",
            "enum": [
              "ASC",
              "DESC"
            ],
            "x-enumNames": [
              "ASC",
              "DESC"
            ]
          },
          "orderBy": {
            "type": "string",
            "enum": [
              "count",
              "averageLatencyMS"
            ],
            "x-enumNames": [
              "COUNT",
              "AVERAGE_LATENCY_MS"
            ]
          },
          "version": {
            "description": "Filters results to the draft or published version of the environment. Defaults to both.",
            "type": "string",
            "enum": [
              "draft",
              "published"
            ],
            "x-enumNames": [
              "DRAFT",
              "PUBLISHED"
            ]
          },
          "environmentAlias": {
            "description": "The ID or alias of the environment to filter results by. Defaults to all environments.",
            "type": "string"
          }
        },
        "required": [
          "endDate",
          "startDate"
        ],
        "additionalProperties": false
      },
      "StableAnalyticsQueryUniqueUsersResponse": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "count": {
                  "type": "number"
                },
                "intervalStartDate": {
                  "type": "string",
                  "allOf": [
                    {
                      "type": "string",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                    },
                    {
                      "type": "string",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                    }
                  ]
                }
              },
              "required": [
                "count",
                "intervalStartDate"
              ]
            }
          }
        },
        "required": [
          "rows"
        ]
      },
      "StableAnalyticsQueryUniqueUserCountRequest": {
        "type": "object",
        "properties": {
          "endDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "startDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "timezone": {
            "type": "string"
          },
          "interval": {
            "type": "string",
            "enum": [
              "hour",
              "day",
              "week",
              "month"
            ],
            "x-enumNames": [
              "HOUR",
              "DAY",
              "WEEK",
              "MONTH"
            ]
          },
          "version": {
            "description": "Filters results to the draft or published version of the environment. Defaults to both.",
            "type": "string",
            "enum": [
              "draft",
              "published"
            ],
            "x-enumNames": [
              "DRAFT",
              "PUBLISHED"
            ]
          },
          "environmentAlias": {
            "description": "The ID or alias of the environment to filter results by. Defaults to all environments.",
            "type": "string"
          }
        },
        "required": [
          "endDate",
          "startDate",
          "interval"
        ],
        "additionalProperties": false
      },
      "ObjectiveMetrics": {
        "type": "object",
        "properties": {
          "rate": {
            "nullable": true,
            "description": "Percentage (0-100) of evaluated sessions that met the objective, rounded to one decimal. Null when no session was evaluated; never report a null as 0%.",
            "type": "number"
          },
          "matchedSessions": {
            "type": "number",
            "description": "Sessions that met the objective. The numerator of the rate."
          },
          "evaluatedSessions": {
            "type": "number",
            "description": "Sessions evaluated against the objective. The denominator of the rate."
          },
          "interval": {
            "type": "string",
            "enum": [
              "hour",
              "day",
              "week",
              "month"
            ],
            "description": "The bucket size of every `buckets` entry, derived from the requested range: hour up to a day, day up to 31 days, week up to 56 days, month beyond that.",
            "x-enumNames": [
              "HOUR",
              "DAY",
              "WEEK",
              "MONTH"
            ]
          },
          "buckets": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "date": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                },
                "matchedSessions": {
                  "type": "number"
                },
                "evaluatedSessions": {
                  "type": "number"
                }
              },
              "required": [
                "date",
                "matchedSessions",
                "evaluatedSessions"
              ]
            },
            "description": "Counts per `interval` bucket, not percentages. `date` is the start of the bucket. Divide within a bucket to get that bucket's rate."
          }
        },
        "required": [
          "rate",
          "matchedSessions",
          "evaluatedSessions",
          "interval",
          "buckets"
        ]
      },
      "StableAnalyticsQueryObjectiveMetricsResponse": {
        "type": "object",
        "properties": {
          "conversion": {
            "description": "Returned only when the assistant's objective is conversion.",
            "allOf": [
              {
                "$ref": "#/components/schemas/ObjectiveMetrics"
              }
            ]
          },
          "resolution": {
            "description": "Returned only when the assistant's objective is resolution.",
            "allOf": [
              {
                "$ref": "#/components/schemas/ObjectiveMetrics"
              }
            ]
          }
        }
      },
      "StableAnalyticsQueryObjectiveMetricsRequest": {
        "type": "object",
        "properties": {
          "endDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "startDate": {
            "type": "string",
            "allOf": [
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            ]
          },
          "timezone": {
            "type": "string"
          },
          "interfaces": {
            "description": "The channels to filter results by. Defaults to all channels.",
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "phone",
                "webchat",
                "api",
                "sms"
              ],
              "x-enumNames": [
                "PHONE",
                "WEBCHAT",
                "API",
                "SMS"
              ]
            }
          },
          "environmentAlias": {
            "description": "The ID or alias of the environment to filter results by. Defaults to all environments.",
            "type": "string"
          }
        },
        "required": [
          "endDate",
          "startDate"
        ],
        "additionalProperties": false
      },
      "StableAPITool": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "url": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/Markup"
              }
            ]
          },
          "body": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/APIToolBody"
              }
            ]
          },
          "image": {
            "nullable": true,
            "description": "The URL of the image displayed for the API tool in the UI.",
            "type": "string"
          },
          "headers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableAPIHeader"
            }
          },
          "settings": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/APIToolSettings"
              }
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "httpMethod": {
            "$ref": "#/components/schemas/APIToolHTTPMethodType"
          },
          "description": {
            "nullable": true,
            "description": "A description of what the API tool does, used by the agent to decide when to call it.",
            "type": "string"
          },
          "queryParameters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableAPIQueryParameter"
            }
          }
        },
        "required": [
          "id",
          "name",
          "url",
          "body",
          "image",
          "headers",
          "createdAt",
          "updatedAt",
          "httpMethod",
          "description",
          "queryParameters"
        ]
      },
      "StableAPIHeader": {
        "type": "object",
        "properties": {
          "key": {
            "nullable": true,
            "description": "The name of the HTTP header to send with the request.",
            "type": "string"
          },
          "value": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/Markup"
              }
            ]
          }
        },
        "required": [
          "key",
          "value"
        ],
        "additionalProperties": false
      },
      "StableAPIQueryParameter": {
        "type": "object",
        "properties": {
          "key": {
            "nullable": true,
            "description": "The name of the query parameter to append to the request URL.",
            "type": "string"
          },
          "value": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/Markup"
              }
            ]
          }
        },
        "required": [
          "key",
          "value"
        ],
        "additionalProperties": false
      },
      "StableAPIToolListResponse": {
        "type": "object",
        "properties": {
          "apiTools": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableAPITool"
            }
          }
        },
        "required": [
          "apiTools"
        ]
      },
      "StableAPIToolResponse": {
        "type": "object",
        "properties": {
          "apiTool": {
            "$ref": "#/components/schemas/StableAPITool"
          }
        },
        "required": [
          "apiTool"
        ]
      },
      "StableAPIToolCreateRequest": {
        "type": "object",
        "properties": {
          "url": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/Markup"
              }
            ]
          },
          "name": {
            "type": "string"
          },
          "body": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/APIToolBody"
              }
            ]
          },
          "settings": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/APIToolSettings"
              }
            ]
          },
          "httpMethod": {
            "$ref": "#/components/schemas/APIToolHTTPMethodType"
          },
          "description": {
            "nullable": true,
            "description": "A description of what the API tool does, used by the agent to decide when to call it.",
            "type": "string"
          },
          "headers": {
            "default": [],
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableAPIHeader"
            }
          },
          "queryParameters": {
            "default": [],
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableAPIQueryParameter"
            }
          }
        },
        "required": [
          "name",
          "httpMethod"
        ],
        "additionalProperties": false
      },
      "StableAPIToolCreateManyRequest": {
        "type": "object",
        "properties": {
          "apiTools": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableAPIToolCreateRequest"
            }
          }
        },
        "required": [
          "apiTools"
        ]
      },
      "StableAPIToolUpdateRequest": {
        "type": "object",
        "properties": {
          "url": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/Markup"
              }
            ]
          },
          "name": {
            "type": "string"
          },
          "body": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/APIToolBody"
              }
            ]
          },
          "headers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableAPIHeader"
            }
          },
          "settings": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/APIToolSettings"
              }
            ]
          },
          "httpMethod": {
            "allOf": [
              {
                "$ref": "#/components/schemas/APIToolHTTPMethodType"
              }
            ]
          },
          "description": {
            "nullable": true,
            "description": "A description of what the API tool does, used by the agent to decide when to call it.",
            "type": "string"
          },
          "queryParameters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableAPIQueryParameter"
            }
          }
        },
        "additionalProperties": false
      },
      "StableAPIToolVariable": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "description": "The name of the variable, referenced within the API tool request."
          },
          "apiToolID": {
            "type": "string",
            "description": "The ID of the API tool this variable belongs to."
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "description": {
            "nullable": true,
            "description": "A description of the variable, used by the agent to determine what value to provide.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "apiToolID",
          "createdAt",
          "updatedAt",
          "description"
        ]
      },
      "StableAPIToolVariableListResponse": {
        "type": "object",
        "properties": {
          "variables": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableAPIToolVariable"
            }
          }
        },
        "required": [
          "variables"
        ]
      },
      "StableAPIToolVariableResponse": {
        "type": "object",
        "properties": {
          "variable": {
            "$ref": "#/components/schemas/StableAPIToolVariable"
          }
        },
        "required": [
          "variable"
        ]
      },
      "StableAPIToolVariableCreateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the variable, referenced within the API tool request."
          },
          "apiToolID": {
            "type": "string",
            "description": "The ID of the API tool this variable belongs to."
          },
          "description": {
            "nullable": true,
            "description": "A description of the variable, used by the agent to determine what value to provide.",
            "type": "string"
          }
        },
        "required": [
          "name",
          "apiToolID"
        ],
        "additionalProperties": false
      },
      "StableAPIToolVariableCreateManyRequest": {
        "type": "object",
        "properties": {
          "apiToolID": {
            "type": "string",
            "description": "The ID of the API tool to create the variables under."
          },
          "variables": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "description": "The name of the variable, referenced within the API tool request."
                },
                "description": {
                  "nullable": true,
                  "description": "A description of the variable, used by the agent to determine what value to provide.",
                  "type": "string"
                }
              },
              "required": [
                "name"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "apiToolID",
          "variables"
        ]
      },
      "StableAPIToolVariableUpdateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the variable, referenced within the API tool request."
          },
          "description": {
            "nullable": true,
            "description": "A description of the variable, used by the agent to determine what value to provide.",
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "StableConversationState": {
        "type": "object",
        "properties": {
          "stack": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "nodeID": {
                  "description": "The ID of the node currently being executed in this stack frame.",
                  "nullable": true,
                  "type": "string"
                },
                "diagramID": {
                  "type": "string",
                  "description": "The ID of the diagram this stack frame is executing."
                },
                "name": {
                  "nullable": true,
                  "description": "The name of the diagram this stack frame is executing.",
                  "type": "string"
                },
                "storage": {
                  "type": "object",
                  "additionalProperties": {},
                  "description": "Internal runtime storage scoped to this stack frame."
                },
                "variables": {
                  "type": "object",
                  "additionalProperties": {},
                  "description": "Variable values scoped to this stack frame."
                },
                "commands": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "type"
                    ],
                    "additionalProperties": {}
                  }
                },
                "dynamicCommands": {
                  "description": "Commands registered dynamically at runtime, keyed by command name.",
                  "type": "object",
                  "additionalProperties": {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "type"
                    ],
                    "additionalProperties": {}
                  }
                }
              },
              "required": [
                "diagramID",
                "name",
                "storage",
                "variables"
              ]
            },
            "description": "The execution stack for the conversation, from root to innermost frame."
          },
          "storage": {
            "type": "object",
            "additionalProperties": {},
            "description": "Internal runtime storage persisted across turns of the session."
          },
          "variables": {
            "type": "object",
            "additionalProperties": {},
            "description": "The current values of the agent variables for this session."
          }
        },
        "required": [
          "stack",
          "storage",
          "variables"
        ]
      },
      "StableConversationStateResponse": {
        "type": "object",
        "properties": {
          "state": {
            "$ref": "#/components/schemas/StableConversationState"
          }
        },
        "required": [
          "state"
        ]
      },
      "StableConversationUpdateStateRequest": {
        "type": "object",
        "properties": {
          "stack": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "nodeID": {
                  "description": "The ID of the node currently being executed in this stack frame.",
                  "nullable": true,
                  "type": "string"
                },
                "diagramID": {
                  "type": "string",
                  "description": "The ID of the diagram this stack frame is executing."
                },
                "name": {
                  "nullable": true,
                  "description": "The name of the diagram this stack frame is executing.",
                  "type": "string"
                },
                "storage": {
                  "type": "object",
                  "additionalProperties": {},
                  "description": "Internal runtime storage scoped to this stack frame."
                },
                "variables": {
                  "type": "object",
                  "additionalProperties": {},
                  "description": "Variable values scoped to this stack frame."
                },
                "commands": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "type"
                    ],
                    "additionalProperties": {}
                  }
                },
                "dynamicCommands": {
                  "description": "Commands registered dynamically at runtime, keyed by command name.",
                  "type": "object",
                  "additionalProperties": {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "type"
                    ],
                    "additionalProperties": {}
                  }
                }
              },
              "required": [
                "diagramID",
                "name",
                "storage",
                "variables"
              ]
            },
            "description": "The execution stack for the conversation, from root to innermost frame."
          },
          "storage": {
            "type": "object",
            "additionalProperties": {},
            "description": "Internal runtime storage persisted across turns of the session."
          },
          "variables": {
            "type": "object",
            "additionalProperties": {},
            "description": "The current values of the agent variables for this session."
          }
        },
        "required": [
          "stack",
          "storage",
          "variables"
        ],
        "additionalProperties": false
      },
      "StableConversationUpdateVariablesRequest": {
        "type": "object",
        "properties": {
          "variables": {
            "type": "object",
            "additionalProperties": {},
            "description": "Variable values to set on the conversation session, keyed by variable name."
          }
        },
        "required": [
          "variables"
        ],
        "additionalProperties": false
      },
      "StableDocument": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "data": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/KBDocumentData"
              }
            ]
          },
          "status": {
            "$ref": "#/components/schemas/KBDocumentStatus"
          },
          "smartChunking": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/SmartChunking"
              }
            ]
          }
        },
        "required": [
          "id",
          "data",
          "status",
          "smartChunking"
        ]
      },
      "SmartChunking": {
        "type": "object",
        "properties": {
          "markdownConversion": {
            "description": "When enabled, HTML is automatically converted to markdown to generate better chunks.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "string",
                "enum": [
                  "true",
                  "false"
                ],
                "x-enumNames": [
                  "TRUE",
                  "FALSE"
                ]
              }
            ]
          },
          "llmBasedChunks": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "string",
                "enum": [
                  "true",
                  "false"
                ],
                "x-enumNames": [
                  "TRUE",
                  "FALSE"
                ]
              }
            ]
          },
          "llmGeneratedQ": {
            "description": "When enabled, an LLM will be used to generate a question based on the document context and specific chunk, then prepend it to the chunk. This enhances retrieval by aligning chunks with potential user queries.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "string",
                "enum": [
                  "true",
                  "false"
                ],
                "x-enumNames": [
                  "TRUE",
                  "FALSE"
                ]
              }
            ]
          },
          "llmContentSummarization": {
            "description": "When enabled, an LLM summarizes and rewrites the content, removing unnecessary information and focusing on important parts to optimize for retrieval. Limited to 15 rows per table upload.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "string",
                "enum": [
                  "true",
                  "false"
                ],
                "x-enumNames": [
                  "TRUE",
                  "FALSE"
                ]
              }
            ]
          },
          "llmPrependContext": {
            "description": "When enabled, an LLM generates a context summary based on the document and chunk context, and prepends it to each chunk. This improves retrieval by providing additional context to each chunk. Note: If both llmGeneratedQ and llmPrependContext are set to true, llmGeneratedQ takes precedence, and the context summarization will not be applied.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "string",
                "enum": [
                  "true",
                  "false"
                ],
                "x-enumNames": [
                  "TRUE",
                  "FALSE"
                ]
              }
            ]
          }
        }
      },
      "StableDocumentListResponse": {
        "type": "object",
        "properties": {
          "documents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableDocument"
            }
          }
        },
        "required": [
          "documents"
        ]
      },
      "StableDocumentResponse": {
        "type": "object",
        "properties": {
          "document": {
            "$ref": "#/components/schemas/StableDocument"
          }
        },
        "required": [
          "document"
        ]
      },
      "StableDocumentCreateURLRequest": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "The URL of the web page to crawl and ingest into the knowledge base."
          },
          "metadata": {
            "default": [],
            "description": "Metadata tags attached to the document, used to filter knowledge base retrieval at runtime.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "key": {
                  "type": "string",
                  "description": "The name of the metadata field."
                },
                "values": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "The values assigned to this metadata field."
                }
              },
              "required": [
                "key",
                "values"
              ]
            }
          },
          "refreshRate": {
            "description": "How often the URL is automatically re-crawled to refresh the document content.",
            "type": "string",
            "enum": [
              "daily",
              "weekly",
              "monthly",
              "never"
            ],
            "x-enumNames": [
              "DAILY",
              "WEEKLY",
              "MONTHLY",
              "NEVER"
            ]
          }
        },
        "required": [
          "url"
        ],
        "additionalProperties": false
      },
      "StableDocumentCreateTableRequest": {
        "type": "object",
        "properties": {
          "url": {
            "description": "An optional source URL to associate with the table document.",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": {}
            },
            "description": "The table rows to ingest; each row is a flat object and becomes its own chunk."
          },
          "schema": {
            "type": "object",
            "properties": {
              "metadataFields": {
                "default": [],
                "description": "Per-row metadata, returned with results.",
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "searchableFields": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Full-text indexed; what semantic search matches against."
              }
            },
            "required": [
              "searchableFields"
            ],
            "description": "Declares which top-level keys of each row are full-text searchable versus row-level metadata."
          },
          "metadata": {
            "default": [],
            "description": "Metadata tags attached to the document, used to filter knowledge base retrieval at runtime.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "key": {
                  "type": "string",
                  "description": "The name of the metadata field."
                },
                "values": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "The values assigned to this metadata field."
                }
              },
              "required": [
                "key",
                "values"
              ]
            }
          }
        },
        "required": [
          "name",
          "items",
          "schema"
        ],
        "additionalProperties": false
      },
      "StableDocumentDetails": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "data": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/KBDocumentData"
              }
            ]
          },
          "status": {
            "$ref": "#/components/schemas/KBDocumentStatus"
          },
          "smartChunking": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/SmartChunking"
              }
            ]
          },
          "chunks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KBDocumentChunk"
            }
          },
          "metadata": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "key": {
                  "type": "string",
                  "description": "The name of the metadata field."
                },
                "values": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "The values assigned to this metadata field."
                }
              },
              "required": [
                "key",
                "values"
              ]
            },
            "description": "Metadata tags attached to the document, used to filter knowledge base retrieval at runtime."
          }
        },
        "required": [
          "id",
          "data",
          "status",
          "smartChunking",
          "chunks",
          "metadata"
        ]
      },
      "StableDocumentDetailsResponse": {
        "type": "object",
        "properties": {
          "document": {
            "$ref": "#/components/schemas/StableDocumentDetails"
          }
        },
        "required": [
          "document"
        ]
      },
      "StableDocumentUpdateRequest": {
        "type": "object",
        "properties": {
          "metadata": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "key": {
                  "type": "string",
                  "description": "The name of the metadata field."
                },
                "values": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "The values assigned to this metadata field."
                }
              },
              "required": [
                "key",
                "values"
              ]
            },
            "description": "Metadata tags attached to the document, used to filter knowledge base retrieval at runtime."
          }
        },
        "required": [
          "metadata"
        ],
        "additionalProperties": false
      },
      "StableEnvironment": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "alias": {
            "type": "string",
            "description": "The URL-safe alias that identifies the environment (e.g. `main`)."
          },
          "isMain": {
            "type": "boolean",
            "description": "Whether this is the main (default) environment of the project."
          },
          "releases": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "backupID": {
                  "type": "number",
                  "description": "The ID of the backup that snapshots the environment for this release."
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                },
                "description": {
                  "nullable": true,
                  "description": "An optional description of what changed in this release.",
                  "type": "string"
                },
                "autogenerated": {
                  "type": "boolean",
                  "description": "Whether the release was created automatically by the system rather than published manually."
                }
              },
              "required": [
                "name",
                "backupID",
                "createdAt",
                "description",
                "autogenerated"
              ]
            }
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "trafficPercentage": {
            "type": "number",
            "description": "The percentage of live traffic (0-100) currently routed to this environment."
          }
        },
        "required": [
          "name",
          "alias",
          "isMain",
          "releases",
          "createdAt",
          "trafficPercentage"
        ]
      },
      "StableEnvironmentListResponse": {
        "type": "object",
        "properties": {
          "environments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableEnvironment"
            }
          }
        },
        "required": [
          "environments"
        ]
      },
      "StableEnvironmentMergeResponse": {
        "type": "object",
        "properties": {
          "sourceEnvironment": {
            "$ref": "#/components/schemas/StableEnvironment"
          },
          "targetEnvironment": {
            "$ref": "#/components/schemas/StableEnvironment"
          },
          "targetRelease": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "backupID": {
                "type": "number",
                "description": "The ID of the backup that snapshots the environment for this release."
              },
              "createdAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "description": {
                "nullable": true,
                "description": "An optional description of what changed in this release.",
                "type": "string"
              },
              "autogenerated": {
                "type": "boolean",
                "description": "Whether the release was created automatically by the system rather than published manually."
              }
            },
            "required": [
              "name",
              "backupID",
              "createdAt",
              "description",
              "autogenerated"
            ]
          }
        },
        "required": [
          "sourceEnvironment",
          "targetEnvironment",
          "targetRelease"
        ]
      },
      "StableEnvironmentMergeRequest": {
        "type": "object",
        "properties": {
          "sourceEnvironmentAlias": {
            "type": "string",
            "description": "The alias of the environment whose changes are merged."
          },
          "targetEnvironmentAlias": {
            "type": "string",
            "description": "The alias of the environment that receives the merged changes."
          },
          "removeSourceEnvironment": {
            "default": false,
            "description": "If true, the source environment is deleted after the merge.",
            "type": "boolean"
          }
        },
        "required": [
          "sourceEnvironmentAlias",
          "targetEnvironmentAlias"
        ],
        "additionalProperties": false
      },
      "StableEnvironmentUpdateTrafficSplitRequest": {
        "type": "object",
        "properties": {
          "traffic": {
            "type": "object",
            "additionalProperties": {
              "type": "number",
              "minimum": 0,
              "maximum": 100
            },
            "description": "Map of environmentAlias → traffic percentage (0-100). Values must sum to 100."
          }
        },
        "required": [
          "traffic"
        ],
        "additionalProperties": false
      },
      "StableEnvironmentResponse": {
        "type": "object",
        "properties": {
          "environment": {
            "$ref": "#/components/schemas/StableEnvironment"
          }
        },
        "required": [
          "environment"
        ]
      },
      "StableEnvironmentUpdateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "StableEnvironmentExportResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/AssistantExportData"
          }
        ]
      },
      "StableEnvironmentCompileResponse": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "description": "A human-readable message confirming the update."
          },
          "durationMs": {
            "type": "number",
            "description": "How long the compilation took, in milliseconds."
          }
        },
        "required": [
          "message",
          "durationMs"
        ]
      },
      "StableEnvironmentCloneRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "The display name of the new environment."
          },
          "alias": {
            "type": "string",
            "description": "Short URL-safe identifier; cannot be 'main' (reserved)."
          }
        },
        "required": [
          "name",
          "alias"
        ],
        "additionalProperties": false
      },
      "StableEnvironmentPublishResponse": {
        "type": "object",
        "properties": {
          "environment": {
            "$ref": "#/components/schemas/StableEnvironment"
          },
          "release": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "backupID": {
                "type": "number",
                "description": "The ID of the backup that snapshots the environment for this release."
              },
              "createdAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "description": {
                "nullable": true,
                "description": "An optional description of what changed in this release.",
                "type": "string"
              },
              "autogenerated": {
                "type": "boolean",
                "description": "Whether the release was created automatically by the system rather than published manually."
              }
            },
            "required": [
              "name",
              "backupID",
              "createdAt",
              "description",
              "autogenerated"
            ]
          }
        },
        "required": [
          "environment",
          "release"
        ]
      },
      "StableEnvironmentPublishRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the release created by publishing."
          },
          "description": {
            "default": null,
            "description": "An optional description of what changed in this release.",
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false
      },
      "StableTranscript": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "userID": {
            "type": "string",
            "description": "The ID of the end user who had the conversation."
          },
          "endedAt": {
            "nullable": true,
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "projectID": {
            "type": "string",
            "description": "The ID of the project the conversation happened in."
          },
          "sessionID": {
            "type": "string",
            "description": "The ID of the conversation session this transcript was recorded from."
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "expiresAt": {
            "nullable": true,
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "properties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableTranscriptPropertyWithValue"
            }
          },
          "evaluations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableEvaluationWithResult"
            }
          },
          "recordingURL": {
            "nullable": true,
            "description": "The URL of the call recording for voice conversations.",
            "type": "string"
          },
          "version": {
            "nullable": true,
            "description": "Whether the conversation happened on the draft or published version of the environment. `null` for legacy conversations recorded before environments existed, or when the version is no longer tracked by the environment.",
            "type": "string",
            "enum": [
              "draft",
              "published"
            ],
            "x-enumNames": [
              "DRAFT",
              "PUBLISHED"
            ]
          },
          "environmentAlias": {
            "nullable": true,
            "description": "The alias of the environment the conversation happened in. `null` for legacy conversations recorded before environments existed, as well as deleted environments.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "userID",
          "endedAt",
          "projectID",
          "sessionID",
          "createdAt",
          "updatedAt",
          "expiresAt",
          "properties",
          "evaluations",
          "recordingURL",
          "version",
          "environmentAlias"
        ]
      },
      "StableTranscriptPropertyWithValue": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "default": {
            "type": "boolean",
            "description": "Whether this is a built-in property, which cannot be updated, deleted or have its value set."
          },
          "type": {
            "type": "string",
            "enum": [
              "boolean",
              "number",
              "string"
            ],
            "description": "The type of value the property holds.",
            "x-enumNames": [
              "BOOLEAN",
              "NUMBER",
              "STRING"
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "value": {
            "type": "string",
            "description": "The value of the property recorded for this transcript."
          }
        },
        "required": [
          "id",
          "name",
          "default",
          "type",
          "createdAt",
          "updatedAt",
          "value"
        ]
      },
      "StableEvaluationWithResult": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "default": {
                "type": "boolean",
                "description": "Whether this is a built-in default evaluation."
              },
              "description": {
                "nullable": true,
                "description": "A human-readable description of what this evaluation measures.",
                "type": "string"
              },
              "cost": {
                "type": "number",
                "description": "The cost incurred to run this evaluation against the transcript."
              },
              "value": {
                "anyOf": [
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "The result produced by the evaluation, typed according to the evaluation `type`."
              },
              "reason": {
                "type": "string",
                "description": "The explanation of why the evaluation produced this result."
              },
              "createdAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "updatedAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              }
            },
            "required": [
              "id",
              "name",
              "default",
              "description",
              "cost",
              "value",
              "reason",
              "createdAt",
              "updatedAt"
            ]
          },
          {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "boolean"
                    ],
                    "description": "Discriminator indicating the evaluation produces a boolean result.",
                    "x-enumNames": [
                      "BOOLEAN"
                    ]
                  }
                },
                "required": [
                  "type"
                ]
              },
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "number"
                    ],
                    "description": "Discriminator indicating the evaluation produces a numeric result.",
                    "x-enumNames": [
                      "NUMBER"
                    ]
                  },
                  "minimumValue": {
                    "type": "number",
                    "description": "The lowest value the evaluation result can take."
                  },
                  "maximumValue": {
                    "type": "number",
                    "description": "The highest value the evaluation result can take."
                  }
                },
                "required": [
                  "type",
                  "minimumValue",
                  "maximumValue"
                ]
              },
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "string"
                    ],
                    "description": "Discriminator indicating the evaluation produces a free-form text result.",
                    "x-enumNames": [
                      "STRING"
                    ]
                  }
                },
                "required": [
                  "type"
                ]
              },
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "option"
                    ],
                    "description": "Discriminator indicating the evaluation picks a result from a predefined set of options.",
                    "x-enumNames": [
                      "OPTION"
                    ]
                  },
                  "options": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "value": {
                          "type": "string",
                          "description": "The value assigned to the evaluation result when this option is selected."
                        },
                        "prompt": {
                          "type": "string",
                          "description": "The criteria describing when the evaluator should select this option."
                        },
                        "included": {
                          "type": "boolean",
                          "description": "Whether this option is available for the evaluator to select."
                        },
                        "color": {
                          "type": "string",
                          "description": "The color used to display this option in the Voiceflow UI."
                        }
                      },
                      "required": [
                        "value",
                        "prompt",
                        "included",
                        "color"
                      ]
                    }
                  }
                },
                "required": [
                  "type",
                  "options"
                ]
              }
            ]
          }
        ]
      },
      "StableTranscriptListResponse": {
        "type": "object",
        "properties": {
          "transcripts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableTranscript"
            }
          }
        },
        "required": [
          "transcripts"
        ]
      },
      "TranscriptFilterArray": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/TranscriptFilter"
        }
      },
      "TranscriptFilter": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "op": {
                "type": "string",
                "enum": [
                  "gt",
                  "gte",
                  "lt",
                  "lte"
                ],
                "x-enumNames": [
                  "GREATER_THAN",
                  "GREATER_THAN_OR_EQUAL",
                  "LESS_THAN",
                  "LESS_THAN_OR_EQUAL"
                ]
              },
              "value": {
                "type": "number"
              }
            },
            "required": [
              "id",
              "op",
              "value"
            ]
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "op": {
                "type": "string",
                "enum": [
                  "eq",
                  "neq"
                ],
                "x-enumNames": [
                  "EQUALS",
                  "NOT_EQUALS"
                ]
              },
              "value": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "number"
                      }
                    ]
                  },
                  {
                    "type": "boolean"
                  }
                ]
              }
            },
            "required": [
              "id",
              "op",
              "value"
            ]
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "op": {
                "type": "string",
                "enum": [
                  "between"
                ],
                "x-enumNames": [
                  "BETWEEN"
                ]
              },
              "value": {
                "type": "array",
                "items": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "number"
                    }
                  ]
                },
                "minItems": 2,
                "maxItems": 2
              }
            },
            "required": [
              "id",
              "op",
              "value"
            ]
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "op": {
                "type": "string",
                "enum": [
                  "in",
                  "nin"
                ],
                "x-enumNames": [
                  "IN",
                  "NOT_IN"
                ]
              },
              "value": {
                "type": "array",
                "items": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "number"
                    }
                  ]
                }
              }
            },
            "required": [
              "id",
              "op",
              "value"
            ]
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "op": {
                "type": "string",
                "enum": [
                  "contains"
                ],
                "x-enumNames": [
                  "CONTAINS"
                ]
              },
              "value": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "op",
              "value"
            ]
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "op": {
                "type": "string",
                "enum": [
                  "exists",
                  "not_exists"
                ],
                "x-enumNames": [
                  "EXISTS",
                  "NOT_EXISTS"
                ]
              }
            },
            "required": [
              "id",
              "op"
            ]
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "op": {
                "type": "string",
                "enum": [
                  "json_contains"
                ],
                "x-enumNames": [
                  "JSONB_ARRAY_CONTAINS"
                ]
              },
              "value": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": {}
                }
              }
            },
            "required": [
              "id",
              "op",
              "value"
            ]
          }
        ]
      },
      "StableTranscriptSearchRequest": {
        "type": "object",
        "properties": {
          "take": {
            "default": 20,
            "description": "The maximum number of results to return, used for pagination.",
            "type": "number",
            "minimum": 1,
            "maximum": 100
          },
          "skip": {
            "default": 0,
            "description": "The number of results to skip, used for pagination.",
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "endDate": {
            "description": "When provided, only transcripts created at or before this ISO 8601 timestamp are returned.",
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "version": {
            "description": "When provided, only transcripts from the draft or published version of the environment are returned. Applies within a single environment; the main environment is used when `environmentAlias` is omitted.",
            "type": "string",
            "enum": [
              "draft",
              "published"
            ],
            "x-enumNames": [
              "DRAFT",
              "PUBLISHED"
            ]
          },
          "filters": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TranscriptFilterArray"
              }
            ]
          },
          "sessionID": {
            "description": "When provided, only transcripts from this conversation session are returned.",
            "type": "string"
          },
          "startDate": {
            "description": "When provided, only transcripts created at or after this ISO 8601 timestamp are returned.",
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "environmentAlias": {
            "description": "When provided, only transcripts from the environment with this alias are returned.",
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "StableTranscriptWithLogsResponse": {
        "type": "object",
        "properties": {
          "transcript": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "userID": {
                "type": "string",
                "description": "The ID of the end user who had the conversation."
              },
              "endedAt": {
                "nullable": true,
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "projectID": {
                "type": "string",
                "description": "The ID of the project the conversation happened in."
              },
              "sessionID": {
                "type": "string",
                "description": "The ID of the conversation session this transcript was recorded from."
              },
              "createdAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "updatedAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "expiresAt": {
                "nullable": true,
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "properties": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/StableTranscriptPropertyWithValue"
                }
              },
              "evaluations": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/StableEvaluationWithResult"
                }
              },
              "recordingURL": {
                "nullable": true,
                "description": "The URL of the call recording for voice conversations.",
                "type": "string"
              },
              "version": {
                "nullable": true,
                "description": "Whether the conversation happened on the draft or published version of the environment. `null` for legacy conversations recorded before environments existed, or when the version is no longer tracked by the environment.",
                "type": "string",
                "enum": [
                  "draft",
                  "published"
                ],
                "x-enumNames": [
                  "DRAFT",
                  "PUBLISHED"
                ]
              },
              "environmentAlias": {
                "nullable": true,
                "description": "The alias of the environment the conversation happened in. `null` for legacy conversations recorded before environments existed, as well as deleted environments.",
                "type": "string"
              },
              "logs": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "enum": [
                        "trace",
                        "action",
                        "end"
                      ],
                      "x-enumNames": [
                        "TRACE",
                        "ACTION",
                        "END"
                      ]
                    },
                    "data": {
                      "anyOf": [
                        {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "boolean"
                            }
                          ]
                        },
                        {
                          "type": "array",
                          "items": {}
                        },
                        {
                          "type": "object",
                          "additionalProperties": {}
                        }
                      ]
                    },
                    "createdAt": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                    },
                    "updatedAt": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                    }
                  },
                  "required": [
                    "type",
                    "data",
                    "createdAt",
                    "updatedAt"
                  ]
                }
              }
            },
            "required": [
              "id",
              "userID",
              "endedAt",
              "projectID",
              "sessionID",
              "createdAt",
              "updatedAt",
              "expiresAt",
              "properties",
              "evaluations",
              "recordingURL",
              "version",
              "environmentAlias",
              "logs"
            ]
          }
        },
        "required": [
          "transcript"
        ]
      },
      "StableTranscriptFile": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "A stable, opaque identifier for the file. Unlike `url`, it does not change between requests."
          },
          "filename": {
            "description": "The original name of the uploaded file, when recorded.",
            "type": "string"
          },
          "mimeType": {
            "type": "string",
            "description": "The MIME type of the file."
          },
          "size": {
            "description": "The size of the file in bytes, when recorded.",
            "type": "number"
          },
          "url": {
            "type": "string",
            "description": "A presigned GET URL for downloading the file."
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
            "description": "ISO 8601 timestamp after which the presigned `url` is no longer valid."
          }
        },
        "required": [
          "id",
          "mimeType",
          "url",
          "expiresAt"
        ]
      },
      "StableTranscriptFilesResponse": {
        "type": "object",
        "properties": {
          "files": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableTranscriptFile"
            },
            "description": "The files attached to the transcript that are stored on Voiceflow."
          }
        },
        "required": [
          "files"
        ]
      },
      "StableEvaluation": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "prompt": {
                "type": "string",
                "description": "The criteria the evaluator uses to judge a transcript."
              },
              "default": {
                "type": "boolean",
                "description": "Whether this is a built-in default evaluation."
              },
              "enabled": {
                "type": "boolean",
                "description": "Whether this evaluation runs automatically against new transcripts."
              },
              "projectID": {
                "type": "string",
                "description": "The ID of the project this evaluation belongs to."
              },
              "settings": {
                "nullable": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/AgentSettings"
                  }
                ]
              },
              "averageCost": {
                "nullable": true,
                "description": "The average LLM cost incurred each time this evaluation runs.",
                "type": "number"
              },
              "description": {
                "nullable": true,
                "description": "A human-readable description of what this evaluation measures.",
                "type": "string"
              }
            },
            "required": [
              "id",
              "name",
              "prompt",
              "default",
              "enabled",
              "projectID",
              "settings",
              "averageCost",
              "description"
            ]
          },
          {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "boolean"
                    ],
                    "description": "Identifies an evaluation that produces a true/false result.",
                    "x-enumNames": [
                      "BOOLEAN"
                    ]
                  },
                  "truePrompt": {
                    "type": "string",
                    "description": "The criteria describing when the evaluator should return `true`."
                  },
                  "falsePrompt": {
                    "type": "string",
                    "description": "The criteria describing when the evaluator should return `false`."
                  }
                },
                "required": [
                  "type",
                  "truePrompt",
                  "falsePrompt"
                ]
              },
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "number"
                    ],
                    "description": "Identifies an evaluation that produces a numeric score.",
                    "x-enumNames": [
                      "NUMBER"
                    ]
                  },
                  "minimumValue": {
                    "type": "number",
                    "description": "The lowest score the evaluator can assign."
                  },
                  "maximumValue": {
                    "type": "number",
                    "description": "The highest score the evaluator can assign."
                  },
                  "minimumPrompt": {
                    "type": "string",
                    "description": "The criteria describing what warrants the `minimumValue` score."
                  },
                  "maximumPrompt": {
                    "type": "string",
                    "description": "The criteria describing what warrants the `maximumValue` score."
                  }
                },
                "required": [
                  "type",
                  "minimumValue",
                  "maximumValue",
                  "minimumPrompt",
                  "maximumPrompt"
                ]
              },
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "string"
                    ],
                    "description": "Identifies an evaluation that produces a free-form text result.",
                    "x-enumNames": [
                      "STRING"
                    ]
                  }
                },
                "required": [
                  "type"
                ]
              },
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "option"
                    ],
                    "description": "Identifies an evaluation that selects one of a predefined set of options.",
                    "x-enumNames": [
                      "OPTION"
                    ]
                  },
                  "options": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "value": {
                          "type": "string",
                          "description": "The value assigned to the evaluation result when this option is selected."
                        },
                        "prompt": {
                          "type": "string",
                          "description": "The criteria describing when the evaluator should select this option."
                        },
                        "included": {
                          "type": "boolean",
                          "description": "Whether this option is available for the evaluator to select."
                        },
                        "color": {
                          "type": "string",
                          "description": "The color used to display this option in the Voiceflow UI."
                        }
                      },
                      "required": [
                        "value",
                        "prompt",
                        "included",
                        "color"
                      ]
                    }
                  }
                },
                "required": [
                  "type",
                  "options"
                ]
              }
            ]
          }
        ]
      },
      "StableEvaluationListResponse": {
        "type": "object",
        "properties": {
          "evaluations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableEvaluation"
            }
          }
        },
        "required": [
          "evaluations"
        ]
      },
      "StableEvaluationResponse": {
        "type": "object",
        "properties": {
          "evaluation": {
            "$ref": "#/components/schemas/StableEvaluation"
          }
        },
        "required": [
          "evaluation"
        ]
      },
      "StableEvaluationCreateRequest": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "boolean"
                ],
                "description": "Identifies an evaluation that produces a true/false result.",
                "x-enumNames": [
                  "BOOLEAN"
                ]
              },
              "truePrompt": {
                "type": "string",
                "description": "The criteria describing when the evaluator should return `true`."
              },
              "falsePrompt": {
                "type": "string",
                "description": "The criteria describing when the evaluator should return `false`."
              },
              "name": {
                "type": "string"
              },
              "prompt": {
                "type": "string",
                "description": "The criteria the evaluator uses to judge a transcript."
              },
              "enabled": {
                "type": "boolean",
                "description": "Whether this evaluation runs automatically against new transcripts."
              },
              "description": {
                "nullable": true,
                "description": "A human-readable description of what this evaluation measures.",
                "type": "string"
              }
            },
            "required": [
              "type",
              "truePrompt",
              "falsePrompt",
              "name",
              "prompt",
              "enabled"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "number"
                ],
                "description": "Identifies an evaluation that produces a numeric score.",
                "x-enumNames": [
                  "NUMBER"
                ]
              },
              "minimumValue": {
                "type": "number",
                "description": "The lowest score the evaluator can assign."
              },
              "maximumValue": {
                "type": "number",
                "description": "The highest score the evaluator can assign."
              },
              "minimumPrompt": {
                "type": "string",
                "description": "The criteria describing what warrants the `minimumValue` score."
              },
              "maximumPrompt": {
                "type": "string",
                "description": "The criteria describing what warrants the `maximumValue` score."
              },
              "name": {
                "type": "string"
              },
              "prompt": {
                "type": "string",
                "description": "The criteria the evaluator uses to judge a transcript."
              },
              "enabled": {
                "type": "boolean",
                "description": "Whether this evaluation runs automatically against new transcripts."
              },
              "description": {
                "nullable": true,
                "description": "A human-readable description of what this evaluation measures.",
                "type": "string"
              }
            },
            "required": [
              "type",
              "minimumValue",
              "maximumValue",
              "minimumPrompt",
              "maximumPrompt",
              "name",
              "prompt",
              "enabled"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "string"
                ],
                "description": "Identifies an evaluation that produces a free-form text result.",
                "x-enumNames": [
                  "STRING"
                ]
              },
              "name": {
                "type": "string"
              },
              "prompt": {
                "type": "string",
                "description": "The criteria the evaluator uses to judge a transcript."
              },
              "enabled": {
                "type": "boolean",
                "description": "Whether this evaluation runs automatically against new transcripts."
              },
              "description": {
                "nullable": true,
                "description": "A human-readable description of what this evaluation measures.",
                "type": "string"
              }
            },
            "required": [
              "type",
              "name",
              "prompt",
              "enabled"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "option"
                ],
                "description": "Identifies an evaluation that selects one of a predefined set of options.",
                "x-enumNames": [
                  "OPTION"
                ]
              },
              "options": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "value": {
                      "type": "string",
                      "description": "The value assigned to the evaluation result when this option is selected."
                    },
                    "prompt": {
                      "type": "string",
                      "description": "The criteria describing when the evaluator should select this option."
                    },
                    "included": {
                      "type": "boolean",
                      "description": "Whether this option is available for the evaluator to select."
                    },
                    "color": {
                      "type": "string",
                      "description": "The color used to display this option in the Voiceflow UI."
                    }
                  },
                  "required": [
                    "value",
                    "prompt",
                    "included",
                    "color"
                  ]
                }
              },
              "name": {
                "type": "string"
              },
              "prompt": {
                "type": "string",
                "description": "The criteria the evaluator uses to judge a transcript."
              },
              "enabled": {
                "type": "boolean",
                "description": "Whether this evaluation runs automatically against new transcripts."
              },
              "description": {
                "nullable": true,
                "description": "A human-readable description of what this evaluation measures.",
                "type": "string"
              }
            },
            "required": [
              "type",
              "options",
              "name",
              "prompt",
              "enabled"
            ],
            "additionalProperties": false
          }
        ]
      },
      "StableEvaluationUpdateRequest": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "truePrompt": {
                "type": "string",
                "description": "The criteria describing when the evaluator should return `true`."
              },
              "falsePrompt": {
                "type": "string",
                "description": "The criteria describing when the evaluator should return `false`."
              },
              "name": {
                "type": "string"
              },
              "prompt": {
                "type": "string",
                "description": "The criteria the evaluator uses to judge a transcript."
              },
              "enabled": {
                "type": "boolean",
                "description": "Whether this evaluation runs automatically against new transcripts."
              },
              "settings": {
                "nullable": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/AgentSettings"
                  }
                ]
              },
              "description": {
                "nullable": true,
                "description": "A human-readable description of what this evaluation measures.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "enum": [
                  "boolean"
                ],
                "description": "Identifies an evaluation that produces a true/false result.",
                "x-enumNames": [
                  "BOOLEAN"
                ]
              }
            },
            "required": [
              "type"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "minimumValue": {
                "type": "number",
                "description": "The lowest score the evaluator can assign."
              },
              "maximumValue": {
                "type": "number",
                "description": "The highest score the evaluator can assign."
              },
              "minimumPrompt": {
                "type": "string",
                "description": "The criteria describing what warrants the `minimumValue` score."
              },
              "maximumPrompt": {
                "type": "string",
                "description": "The criteria describing what warrants the `maximumValue` score."
              },
              "name": {
                "type": "string"
              },
              "prompt": {
                "type": "string",
                "description": "The criteria the evaluator uses to judge a transcript."
              },
              "enabled": {
                "type": "boolean",
                "description": "Whether this evaluation runs automatically against new transcripts."
              },
              "settings": {
                "nullable": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/AgentSettings"
                  }
                ]
              },
              "description": {
                "nullable": true,
                "description": "A human-readable description of what this evaluation measures.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "enum": [
                  "number"
                ],
                "description": "Identifies an evaluation that produces a numeric score.",
                "x-enumNames": [
                  "NUMBER"
                ]
              }
            },
            "required": [
              "type"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "prompt": {
                "type": "string",
                "description": "The criteria the evaluator uses to judge a transcript."
              },
              "enabled": {
                "type": "boolean",
                "description": "Whether this evaluation runs automatically against new transcripts."
              },
              "settings": {
                "nullable": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/AgentSettings"
                  }
                ]
              },
              "description": {
                "nullable": true,
                "description": "A human-readable description of what this evaluation measures.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "enum": [
                  "string"
                ],
                "description": "Identifies an evaluation that produces a free-form text result.",
                "x-enumNames": [
                  "STRING"
                ]
              }
            },
            "required": [
              "type"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "options": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "value": {
                      "type": "string",
                      "description": "The value assigned to the evaluation result when this option is selected."
                    },
                    "prompt": {
                      "type": "string",
                      "description": "The criteria describing when the evaluator should select this option."
                    },
                    "included": {
                      "type": "boolean",
                      "description": "Whether this option is available for the evaluator to select."
                    },
                    "color": {
                      "type": "string",
                      "description": "The color used to display this option in the Voiceflow UI."
                    }
                  },
                  "required": [
                    "value",
                    "prompt",
                    "included",
                    "color"
                  ]
                }
              },
              "name": {
                "type": "string"
              },
              "prompt": {
                "type": "string",
                "description": "The criteria the evaluator uses to judge a transcript."
              },
              "enabled": {
                "type": "boolean",
                "description": "Whether this evaluation runs automatically against new transcripts."
              },
              "settings": {
                "nullable": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/AgentSettings"
                  }
                ]
              },
              "description": {
                "nullable": true,
                "description": "A human-readable description of what this evaluation measures.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "enum": [
                  "option"
                ],
                "description": "Identifies an evaluation that selects one of a predefined set of options.",
                "x-enumNames": [
                  "OPTION"
                ]
              }
            },
            "required": [
              "type"
            ],
            "additionalProperties": false
          }
        ]
      },
      "StableEvaluationResult": {
        "type": "object",
        "properties": {
          "cost": {
            "type": "number",
            "description": "The LLM cost incurred by this evaluation run."
          },
          "value": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "number"
              },
              {
                "type": "string"
              }
            ],
            "description": "The result produced by the evaluator; its type matches the evaluation `type`."
          },
          "reason": {
            "type": "string",
            "description": "The evaluator's explanation for the returned `value`."
          },
          "transcriptID": {
            "type": "string",
            "description": "The ID of the transcript that was evaluated."
          },
          "evaluationID": {
            "type": "string",
            "description": "The ID of the evaluation that was run."
          }
        },
        "required": [
          "cost",
          "value",
          "reason",
          "transcriptID",
          "evaluationID"
        ]
      },
      "StableEvaluationRunResponse": {
        "type": "object",
        "properties": {
          "result": {
            "$ref": "#/components/schemas/StableEvaluationResult"
          }
        },
        "required": [
          "result"
        ]
      },
      "StableEvaluationRunRequest": {
        "type": "object",
        "properties": {
          "transcriptID": {
            "type": "string",
            "description": "The ID of the transcript to run the evaluation against."
          }
        },
        "required": [
          "transcriptID"
        ],
        "additionalProperties": false
      },
      "StableFunctionPath": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "description": "The name of the exit path, referenced by the function code when returning which path to take."
          },
          "label": {
            "nullable": true,
            "description": "The display label shown for this path in the Voiceflow UI; falls back to `name` when null.",
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "functionID": {
            "type": "string",
            "description": "The ID of the function this path belongs to."
          }
        },
        "required": [
          "id",
          "name",
          "label",
          "createdAt",
          "updatedAt",
          "functionID"
        ]
      },
      "StableFunctionPathListResponse": {
        "type": "object",
        "properties": {
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableFunctionPath"
            }
          }
        },
        "required": [
          "paths"
        ]
      },
      "StableFunctionPathResponse": {
        "type": "object",
        "properties": {
          "path": {
            "$ref": "#/components/schemas/StableFunctionPath"
          }
        },
        "required": [
          "path"
        ]
      },
      "StableFunctionPathCreateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the exit path, referenced by the function code when returning which path to take."
          },
          "functionID": {
            "type": "string",
            "description": "The ID of the function this path belongs to."
          },
          "label": {
            "default": null,
            "nullable": true,
            "description": "The display label shown for this path in the Voiceflow UI; falls back to `name` when null.",
            "type": "string"
          }
        },
        "required": [
          "name",
          "functionID"
        ],
        "additionalProperties": false
      },
      "StableFunctionPathCreateManyRequest": {
        "type": "object",
        "properties": {
          "functionID": {
            "type": "string",
            "description": "The ID of the function to create the paths for."
          },
          "paths": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "description": "The name of the exit path, referenced by the function code when returning which path to take."
                },
                "label": {
                  "default": null,
                  "nullable": true,
                  "description": "The display label shown for this path in the Voiceflow UI; falls back to `name` when null.",
                  "type": "string"
                }
              },
              "required": [
                "name"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "functionID",
          "paths"
        ]
      },
      "StableFunctionPathUpdateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the exit path, referenced by the function code when returning which path to take."
          },
          "label": {
            "nullable": true,
            "description": "The display label shown for this path in the Voiceflow UI; falls back to `name` when null.",
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "StableFunction": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "code": {
            "type": "string",
            "maxLength": 1048576,
            "description": "The JavaScript source code executed when the function runs."
          },
          "image": {
            "nullable": true,
            "description": "The URL of the image displayed for the function in the Voiceflow UI.",
            "type": "string"
          },
          "settings": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/FunctionSettings"
              }
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "pathOrder": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "An ordered list of path IDs controlling the display order of the function's exit paths."
          },
          "description": {
            "nullable": true,
            "description": "A human-readable description of what the function does.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "code",
          "image",
          "settings",
          "createdAt",
          "updatedAt",
          "pathOrder",
          "description"
        ]
      },
      "StableFunctionListResponse": {
        "type": "object",
        "properties": {
          "functions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableFunction"
            }
          }
        },
        "required": [
          "functions"
        ]
      },
      "StableFunctionResponse": {
        "type": "object",
        "properties": {
          "function": {
            "$ref": "#/components/schemas/StableFunction"
          }
        },
        "required": [
          "function"
        ]
      },
      "StableFunctionCreateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "code": {
            "type": "string",
            "maxLength": 1048576,
            "description": "The JavaScript source code executed when the function runs."
          },
          "settings": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/FunctionSettings"
              }
            ]
          },
          "description": {
            "nullable": true,
            "description": "A human-readable description of what the function does.",
            "type": "string"
          }
        },
        "required": [
          "name",
          "code"
        ],
        "additionalProperties": false
      },
      "StableFunctionCreateManyRequest": {
        "type": "object",
        "properties": {
          "functions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableFunctionCreateRequest"
            }
          }
        },
        "required": [
          "functions"
        ]
      },
      "StableFunctionUpdateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "code": {
            "type": "string",
            "maxLength": 1048576,
            "description": "The JavaScript source code executed when the function runs."
          },
          "settings": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/FunctionSettings"
              }
            ]
          },
          "pathOrder": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "An ordered list of path IDs controlling the display order of the function's exit paths."
          },
          "description": {
            "nullable": true,
            "description": "A human-readable description of what the function does.",
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "StableFunctionVariable": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "description": "The name used to reference the variable in the function code."
          },
          "type": {
            "$ref": "#/components/schemas/FunctionVariableKind"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "functionID": {
            "type": "string",
            "description": "The ID of the function this variable belongs to."
          },
          "description": {
            "nullable": true,
            "description": "A human-readable description of what the variable holds.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "type",
          "createdAt",
          "updatedAt",
          "functionID",
          "description"
        ]
      },
      "StableFunctionVariableListResponse": {
        "type": "object",
        "properties": {
          "variables": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableFunctionVariable"
            }
          }
        },
        "required": [
          "variables"
        ]
      },
      "StableFunctionVariableResponse": {
        "type": "object",
        "properties": {
          "variable": {
            "$ref": "#/components/schemas/StableFunctionVariable"
          }
        },
        "required": [
          "variable"
        ]
      },
      "StableFunctionVariableCreateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "The name used to reference the variable in the function code."
          },
          "type": {
            "$ref": "#/components/schemas/FunctionVariableKind"
          },
          "functionID": {
            "type": "string",
            "description": "The ID of the function this variable belongs to."
          },
          "description": {
            "nullable": true,
            "description": "A human-readable description of what the variable holds.",
            "type": "string"
          }
        },
        "required": [
          "name",
          "type",
          "functionID"
        ],
        "additionalProperties": false
      },
      "StableFunctionVariableCreateManyRequest": {
        "type": "object",
        "properties": {
          "functionID": {
            "type": "string",
            "description": "The ID of the function to create the variables for."
          },
          "variables": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "description": "The name used to reference the variable in the function code."
                },
                "type": {
                  "$ref": "#/components/schemas/FunctionVariableKind"
                },
                "description": {
                  "nullable": true,
                  "description": "A human-readable description of what the variable holds.",
                  "type": "string"
                }
              },
              "required": [
                "name",
                "type"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "functionID",
          "variables"
        ]
      },
      "StableFunctionVariableUpdateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "The name used to reference the variable in the function code."
          },
          "description": {
            "nullable": true,
            "description": "A human-readable description of what the variable holds.",
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "StableIntegration": {
        "type": "object",
        "properties": {
          "integration": {
            "description": "The integration identifier, used as the path segment when connecting or disconnecting.",
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectIntegration"
              }
            ],
            "enum": [
              "make",
              "zendesk",
              "shopify",
              "airtable",
              "salesforce",
              "hubspot",
              "google_gmail",
              "google_sheets",
              "twilio",
              "ujet",
              "genesys",
              "kustomer",
              "dixa",
              "sunshine",
              "example",
              "eleven_labs"
            ],
            "x-enumNames": [
              "MAKE",
              "ZENDESK",
              "SHOPIFY",
              "AIRTABLE",
              "SALESFORCE",
              "HUBSPOT",
              "GOOGLE_GMAIL",
              "GOOGLE_SHEETS",
              "TWILIO",
              "UJET",
              "GENESYS",
              "KUSTOMER",
              "DIXA",
              "SUNSHINE",
              "EXAMPLE",
              "ELEVEN_LABS"
            ]
          },
          "name": {
            "type": "string",
            "description": "The human-readable name of the integration."
          },
          "connectionType": {
            "description": "How credentials reach the integration: `oauth` and `app` are browser flows owned by the Voiceflow UI, `api-key` is a credential the caller supplies directly.",
            "allOf": [
              {
                "$ref": "#/components/schemas/IntegrationConnectionType"
              }
            ],
            "enum": [
              "app",
              "oauth",
              "api-key"
            ],
            "x-enumNames": [
              "APP",
              "OAUTH",
              "API_KEY"
            ]
          },
          "connected": {
            "type": "boolean",
            "description": "Whether this project currently has credentials stored for the integration."
          },
          "connectableViaAPI": {
            "type": "boolean",
            "description": "Whether this integration can be connected through this API. False for `oauth` and `app` integrations."
          }
        },
        "required": [
          "integration",
          "name",
          "connectionType",
          "connected",
          "connectableViaAPI"
        ]
      },
      "ProjectIntegration": {
        "type": "string",
        "enum": [
          "make",
          "zendesk",
          "shopify",
          "airtable",
          "salesforce",
          "hubspot",
          "google_gmail",
          "google_sheets",
          "twilio",
          "ujet",
          "genesys",
          "kustomer",
          "dixa",
          "sunshine",
          "example",
          "eleven_labs"
        ],
        "x-enumNames": [
          "MAKE",
          "ZENDESK",
          "SHOPIFY",
          "AIRTABLE",
          "SALESFORCE",
          "HUBSPOT",
          "GOOGLE_GMAIL",
          "GOOGLE_SHEETS",
          "TWILIO",
          "UJET",
          "GENESYS",
          "KUSTOMER",
          "DIXA",
          "SUNSHINE",
          "EXAMPLE",
          "ELEVEN_LABS"
        ]
      },
      "IntegrationConnectionType": {
        "type": "string",
        "enum": [
          "app",
          "oauth",
          "api-key"
        ],
        "x-enumNames": [
          "APP",
          "OAUTH",
          "API_KEY"
        ]
      },
      "StableIntegrationListResponse": {
        "type": "object",
        "properties": {
          "integrations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableIntegration"
            }
          }
        },
        "required": [
          "integrations"
        ]
      },
      "TwilioIntegrationAPIKeyValue": {
        "type": "object",
        "properties": {
          "apiKeySid": {
            "type": "string",
            "description": "Sid associated with the API key."
          },
          "apiKeySecret": {
            "type": "string",
            "description": "Twilio API key secret value."
          },
          "accountSid": {
            "type": "string",
            "description": "Sid associated with the Twilio account."
          }
        },
        "required": [
          "apiKeySid",
          "apiKeySecret",
          "accountSid"
        ]
      },
      "UjetIntegrationCredentialsValue": {
        "type": "object",
        "properties": {
          "domain": {
            "type": "string",
            "description": "UJET domain."
          },
          "subdomain": {
            "type": "string",
            "description": "UJET subdomain."
          },
          "apiKey": {
            "type": "string",
            "description": "UJET API key."
          },
          "secretKey": {
            "type": "string",
            "description": "UJET secret key."
          }
        },
        "required": [
          "domain",
          "subdomain",
          "apiKey",
          "secretKey"
        ]
      },
      "GenesysIntegrationCredentialsValue": {
        "type": "object",
        "properties": {
          "domain": {
            "type": "string",
            "description": "Genesys domain."
          },
          "clientId": {
            "type": "string",
            "description": "Genesys client ID."
          },
          "secretKey": {
            "type": "string",
            "description": "Genesys webhook secret."
          },
          "oauthSecretKey": {
            "type": "string",
            "description": "Genesys OAuth secret key."
          }
        },
        "required": [
          "domain",
          "clientId",
          "secretKey",
          "oauthSecretKey"
        ]
      },
      "KustomerIntegrationCredentialsValue": {
        "type": "object",
        "properties": {
          "orgName": {
            "type": "string",
            "description": "Kustomer org slug"
          },
          "apiKey": {
            "type": "string",
            "description": "Kustomer org-level Bearer API key."
          },
          "secretKey": {
            "type": "string",
            "description": "Kustomer outbound webhook signing secret."
          }
        },
        "required": [
          "orgName",
          "apiKey",
          "secretKey"
        ]
      },
      "DixaIntegrationCredentialsValue": {
        "type": "object",
        "properties": {
          "domain": {
            "description": "Dixa domain.",
            "type": "string"
          },
          "apiKey": {
            "type": "string",
            "description": "Dixa API key."
          },
          "webhookSecretKey": {
            "type": "string",
            "description": "Dixa webhook secret key."
          }
        },
        "required": [
          "apiKey",
          "webhookSecretKey"
        ]
      },
      "SunshineIntegrationCredentialsValue": {
        "type": "object",
        "properties": {
          "subdomain": {
            "type": "string",
            "description": "Zendesk subdomain, base of the Sunshine Conversations API."
          },
          "appId": {
            "type": "string",
            "description": "Sunshine Conversations app ID."
          },
          "keyId": {
            "type": "string",
            "description": "Sunshine API key ID, the Basic auth username."
          },
          "keySecret": {
            "type": "string",
            "description": "Sunshine API key secret, the Basic auth password."
          },
          "webhookSecret": {
            "type": "string",
            "description": "Sunshine webhook secret."
          }
        },
        "required": [
          "subdomain",
          "appId",
          "keyId",
          "keySecret",
          "webhookSecret"
        ]
      },
      "StableIntegrationConnectRequest": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "integration": {
                "type": "string",
                "enum": [
                  "eleven_labs"
                ],
                "x-enumNames": [
                  "ELEVEN_LABS"
                ]
              },
              "credentials": {
                "type": "string"
              }
            },
            "required": [
              "integration",
              "credentials"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "integration": {
                "type": "string",
                "enum": [
                  "twilio"
                ],
                "x-enumNames": [
                  "TWILIO"
                ]
              },
              "credentials": {
                "$ref": "#/components/schemas/TwilioIntegrationAPIKeyValue"
              }
            },
            "required": [
              "integration",
              "credentials"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "integration": {
                "type": "string",
                "enum": [
                  "ujet"
                ],
                "x-enumNames": [
                  "UJET"
                ]
              },
              "credentials": {
                "$ref": "#/components/schemas/UjetIntegrationCredentialsValue"
              }
            },
            "required": [
              "integration",
              "credentials"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "integration": {
                "type": "string",
                "enum": [
                  "genesys"
                ],
                "x-enumNames": [
                  "GENESYS"
                ]
              },
              "credentials": {
                "$ref": "#/components/schemas/GenesysIntegrationCredentialsValue"
              }
            },
            "required": [
              "integration",
              "credentials"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "integration": {
                "type": "string",
                "enum": [
                  "kustomer"
                ],
                "x-enumNames": [
                  "KUSTOMER"
                ]
              },
              "credentials": {
                "$ref": "#/components/schemas/KustomerIntegrationCredentialsValue"
              }
            },
            "required": [
              "integration",
              "credentials"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "integration": {
                "type": "string",
                "enum": [
                  "dixa"
                ],
                "x-enumNames": [
                  "DIXA"
                ]
              },
              "credentials": {
                "$ref": "#/components/schemas/DixaIntegrationCredentialsValue"
              }
            },
            "required": [
              "integration",
              "credentials"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "integration": {
                "type": "string",
                "enum": [
                  "sunshine"
                ],
                "x-enumNames": [
                  "SUNSHINE"
                ]
              },
              "credentials": {
                "$ref": "#/components/schemas/SunshineIntegrationCredentialsValue"
              }
            },
            "required": [
              "integration",
              "credentials"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "integration": {
                "type": "string",
                "enum": [
                  "zendesk"
                ],
                "x-enumNames": [
                  "ZENDESK"
                ]
              }
            },
            "required": [
              "integration"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "integration": {
                "type": "string",
                "enum": [
                  "salesforce"
                ],
                "x-enumNames": [
                  "SALESFORCE"
                ]
              }
            },
            "required": [
              "integration"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "integration": {
                "type": "string",
                "enum": [
                  "shopify"
                ],
                "x-enumNames": [
                  "SHOPIFY"
                ]
              }
            },
            "required": [
              "integration"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "integration": {
                "type": "string",
                "enum": [
                  "google_sheets"
                ],
                "x-enumNames": [
                  "GOOGLE_SHEETS"
                ]
              }
            },
            "required": [
              "integration"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "integration": {
                "type": "string",
                "enum": [
                  "google_gmail"
                ],
                "x-enumNames": [
                  "GOOGLE_GMAIL"
                ]
              }
            },
            "required": [
              "integration"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "integration": {
                "type": "string",
                "enum": [
                  "airtable"
                ],
                "x-enumNames": [
                  "AIRTABLE"
                ]
              }
            },
            "required": [
              "integration"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "integration": {
                "type": "string",
                "enum": [
                  "make"
                ],
                "x-enumNames": [
                  "MAKE"
                ]
              }
            },
            "required": [
              "integration"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "integration": {
                "type": "string",
                "enum": [
                  "hubspot"
                ],
                "x-enumNames": [
                  "HUBSPOT"
                ]
              }
            },
            "required": [
              "integration"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "integration": {
                "type": "string",
                "enum": [
                  "example"
                ],
                "x-enumNames": [
                  "EXAMPLE"
                ]
              }
            },
            "required": [
              "integration"
            ],
            "additionalProperties": false
          }
        ]
      },
      "StableKnowledgeBaseQueryResponse": {
        "type": "object",
        "properties": {
          "answer": {
            "type": "object",
            "properties": {
              "model": {
                "type": "string",
                "enum": [
                  "gpt-3.5-turbo-1106",
                  "gpt-3.5-turbo",
                  "gpt-4",
                  "gpt-4o",
                  "gpt-4o-mini",
                  "gpt-4.1-2025-04-14",
                  "gpt-4.1-mini-2025-04-14",
                  "gpt-4.1-nano-2025-04-14",
                  "gpt-o3-mini",
                  "o3-2025-04-16",
                  "o4-mini-2025-04-16",
                  "gpt-5",
                  "gpt-5-mini",
                  "gpt-5-nano",
                  "gpt-5.2",
                  "gpt-5.4",
                  "gpt-5.4-mini",
                  "gpt-5.5",
                  "gpt-5.6-sol",
                  "gpt-5.6-terra",
                  "gpt-5.6-luna",
                  "gpt-realtime",
                  "gpt-live-1",
                  "claude-4-opus",
                  "claude-4-sonnet",
                  "claude-4.5-sonnet",
                  "claude-4.6-sonnet",
                  "claude-4.5-haiku",
                  "claude-4.5-opus",
                  "claude-4.7-opus",
                  "bedrock-claude-4-sonnet",
                  "bedrock-claude-4.5-sonnet",
                  "bedrock-claude-4.6-sonnet",
                  "bedrock-claude-5-sonnet",
                  "bedrock-claude-4.5-haiku",
                  "bedrock-claude-4.5-opus",
                  "bedrock-claude-4.7-opus",
                  "bedrock-claude-4.8-opus",
                  "voiceflow-core-4.0",
                  "voiceflow-core-4.2",
                  "voiceflow-flash-4.2",
                  "kimi-k3",
                  "gemini-2.5-pro",
                  "gemini-2.5-flash",
                  "gemini-live-2.5-flash",
                  "gemini-3-flash",
                  "gemini-3.5-flash",
                  "gemini-3.1-pro",
                  "gpt-oss-20b",
                  "gpt-oss-120b",
                  "llama-guard-4",
                  "llama-3.1-instant",
                  "llama-3.3-versatile",
                  "qwen3.6-27b",
                  "grok-4.6",
                  "voiceflow-core-4.1",
                  "voiceflow-flash-4.1",
                  "gemini-flash-2",
                  "gpt-4-turbo",
                  "claude-3.5-haiku",
                  "claude-3-opus",
                  "claude-3.7-sonnet",
                  "claude-v2",
                  "llama-3.2-1b-preview",
                  "gemini-pro-1.5",
                  "claude-3-haiku",
                  "claude-3-sonnet",
                  "text-davinci-003",
                  "claude-v1",
                  "claude-instant-v1",
                  "deep-seek-r1-distill-llama-70B",
                  "claude-3.5-sonnet"
                ],
                "description": "The AI model used to answer the query.",
                "x-enumNames": [
                  "GPT_3_5_TURBO_1106",
                  "GPT_3_5_TURBO",
                  "GPT_4",
                  "GPT_4_O",
                  "GPT_4_O_MINI",
                  "GPT_4_1",
                  "GPT_4_1_MINI",
                  "GPT_4_1_NANO",
                  "GPT_O_3_MINI",
                  "GPT_O_3",
                  "GPT_O_4_MINI",
                  "GPT_5",
                  "GPT_5_MINI",
                  "GPT_5_NANO",
                  "GPT_5_2",
                  "GPT_5_4",
                  "GPT_5_4_MINI",
                  "GPT_5_5",
                  "GPT_5_6_SOL",
                  "GPT_5_6_TERRA",
                  "GPT_5_6_LUNA",
                  "GPT_REALTIME",
                  "GPT_LIVE_1",
                  "CLAUDE_4_OPUS",
                  "CLAUDE_4_SONNET",
                  "CLAUDE_4_5_SONNET",
                  "CLAUDE_4_6_SONNET",
                  "CLAUDE_4_5_HAIKU",
                  "CLAUDE_4_5_OPUS",
                  "CLAUDE_4_7_OPUS",
                  "BEDROCK_CLAUDE_4_SONNET",
                  "BEDROCK_CLAUDE_4_5_SONNET",
                  "BEDROCK_CLAUDE_4_6_SONNET",
                  "BEDROCK_CLAUDE_5_SONNET",
                  "BEDROCK_CLAUDE_4_5_HAIKU",
                  "BEDROCK_CLAUDE_4_5_OPUS",
                  "BEDROCK_CLAUDE_4_7_OPUS",
                  "BEDROCK_CLAUDE_4_8_OPUS",
                  "VOICEFLOW_CORE_4_0",
                  "VOICEFLOW_CORE_4_2",
                  "VOICEFLOW_FLASH_4_2",
                  "KIMI_K_3",
                  "GEMINI_2_5_PRO",
                  "GEMINI_2_5_FLASH",
                  "GEMINI_LIVE_2_5_FLASH",
                  "GEMINI_3_FLASH",
                  "GEMINI_3_5_FLASH",
                  "GEMINI_3_1_PRO",
                  "GPT_OSS_20_B",
                  "GPT_OSS_120_B",
                  "LLAMA_GUARD_4",
                  "LLAMA_3_1_INSTANT",
                  "LLAMA_3_3_VERSATILE",
                  "QWEN_3_6_27_B",
                  "GROK_4_6",
                  "VOICEFLOW_CORE_4_1",
                  "VOICEFLOW_FLASH_4_1",
                  "GEMINI_FLASH_2",
                  "GPT_4_TURBO",
                  "CLAUDE_3_5_HAIKU",
                  "CLAUDE_3_OPUS",
                  "CLAUDE_3_7_SONNET",
                  "CLAUDE_V_2",
                  "LLAMA_3_2_1_B_PREVIEW",
                  "GEMINI_PRO_1_5",
                  "CLAUDE_3_HAIKU",
                  "CLAUDE_3_SONNET",
                  "DA_VINCI_003",
                  "CLAUDE_V_1",
                  "CLAUDE_INSTANT_V_1",
                  "DEEP_SEEK_R_1_DISTILL_LLAMA_70_B",
                  "CLAUDE_3_5_SONNET"
                ]
              },
              "output": {
                "nullable": true,
                "description": "The synthesized answer text, or `null` when no answer was generated.",
                "type": "string"
              },
              "tokens": {
                "type": "number",
                "description": "The total number of tokens consumed by the query."
              },
              "duration": {
                "type": "number",
                "description": "The time it took to execute the query."
              },
              "queryTokens": {
                "type": "number",
                "description": "The number of input tokens consumed by the query, after multipliers."
              },
              "answerTokens": {
                "type": "number",
                "description": "The number of output tokens consumed by the answer, after multipliers."
              },
              "inputMultiplier": {
                "type": "number",
                "description": "The billing multiplier applied to input tokens."
              },
              "cacheMultiplier": {
                "type": "number",
                "description": "The billing multiplier applied to cached input tokens."
              },
              "outputMultiplier": {
                "type": "number",
                "description": "The billing multiplier applied to output tokens."
              },
              "cacheWriteTokens": {
                "type": "number",
                "description": "The number of input tokens written to the prompt cache."
              },
              "queryCachedTokens": {
                "type": "number",
                "description": "The number of input tokens read from the prompt cache."
              },
              "cacheWriteMultiplier": {
                "type": "number",
                "description": "The billing multiplier applied to cache-write tokens."
              },
              "queryRemainderTokens": {
                "type": "number",
                "description": "The number of input tokens that were not served from the prompt cache."
              },
              "base": {
                "type": "object",
                "properties": {
                  "queryTokens": {
                    "type": "number",
                    "description": "The raw number of input tokens consumed by the query."
                  },
                  "answerTokens": {
                    "type": "number",
                    "description": "The raw number of output tokens consumed by the answer."
                  },
                  "cacheWriteTokens": {
                    "type": "number",
                    "description": "The raw number of input tokens written to the prompt cache."
                  },
                  "queryCachedTokens": {
                    "type": "number",
                    "description": "The raw number of input tokens read from the prompt cache."
                  }
                },
                "required": [
                  "queryTokens",
                  "answerTokens",
                  "cacheWriteTokens",
                  "queryCachedTokens"
                ],
                "description": "The raw token counts before billing multipliers are applied."
              },
              "priorityMultipliers": {
                "description": "The billing multipliers applied when the query runs with priority processing.",
                "type": "object",
                "properties": {
                  "inputMultiplier": {
                    "type": "number",
                    "description": "The priority billing multiplier applied to input tokens."
                  },
                  "cacheMultiplier": {
                    "type": "number",
                    "description": "The priority billing multiplier applied to cached input tokens."
                  },
                  "outputMultiplier": {
                    "type": "number",
                    "description": "The priority billing multiplier applied to output tokens."
                  },
                  "cacheWriteMultiplier": {
                    "type": "number",
                    "description": "The priority billing multiplier applied to cache-write tokens."
                  }
                },
                "required": [
                  "inputMultiplier",
                  "cacheMultiplier",
                  "outputMultiplier",
                  "cacheWriteMultiplier"
                ]
              },
              "chunks": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "score": {
                      "type": "number"
                    },
                    "chunkID": {
                      "type": "string"
                    },
                    "documentID": {
                      "type": "string"
                    },
                    "content": {
                      "type": "string"
                    },
                    "source": {
                      "$ref": "#/components/schemas/KBDocumentData"
                    },
                    "metadata": {
                      "type": "object",
                      "additionalProperties": {}
                    }
                  },
                  "required": [
                    "score",
                    "chunkID",
                    "documentID",
                    "content",
                    "source",
                    "metadata"
                  ]
                }
              }
            },
            "required": [
              "model",
              "output",
              "tokens",
              "duration",
              "queryTokens",
              "answerTokens",
              "inputMultiplier",
              "cacheMultiplier",
              "outputMultiplier",
              "cacheWriteTokens",
              "queryCachedTokens",
              "cacheWriteMultiplier",
              "queryRemainderTokens",
              "base",
              "chunks"
            ],
            "description": "The result of the knowledge base query, including the synthesized answer and token usage."
          }
        },
        "required": [
          "answer"
        ]
      },
      "StableKnowledgeBaseQuerySettings": {
        "type": "object",
        "properties": {
          "model": {
            "description": "The AI model used to synthesize the answer.",
            "type": "string",
            "enum": [
              "gpt-3.5-turbo-1106",
              "gpt-3.5-turbo",
              "gpt-4",
              "gpt-4o",
              "gpt-4o-mini",
              "gpt-4.1-2025-04-14",
              "gpt-4.1-mini-2025-04-14",
              "gpt-4.1-nano-2025-04-14",
              "gpt-o3-mini",
              "o3-2025-04-16",
              "o4-mini-2025-04-16",
              "gpt-5",
              "gpt-5-mini",
              "gpt-5-nano",
              "gpt-5.2",
              "gpt-5.4",
              "gpt-5.4-mini",
              "gpt-5.5",
              "gpt-5.6-sol",
              "gpt-5.6-terra",
              "gpt-5.6-luna",
              "gpt-realtime",
              "gpt-live-1",
              "claude-4-opus",
              "claude-4-sonnet",
              "claude-4.5-sonnet",
              "claude-4.6-sonnet",
              "claude-4.5-haiku",
              "claude-4.5-opus",
              "claude-4.7-opus",
              "bedrock-claude-4-sonnet",
              "bedrock-claude-4.5-sonnet",
              "bedrock-claude-4.6-sonnet",
              "bedrock-claude-5-sonnet",
              "bedrock-claude-4.5-haiku",
              "bedrock-claude-4.5-opus",
              "bedrock-claude-4.7-opus",
              "bedrock-claude-4.8-opus",
              "voiceflow-core-4.0",
              "voiceflow-core-4.2",
              "voiceflow-flash-4.2",
              "kimi-k3",
              "gemini-2.5-pro",
              "gemini-2.5-flash",
              "gemini-live-2.5-flash",
              "gemini-3-flash",
              "gemini-3.5-flash",
              "gemini-3.1-pro",
              "gpt-oss-20b",
              "gpt-oss-120b",
              "llama-guard-4",
              "llama-3.1-instant",
              "llama-3.3-versatile",
              "qwen3.6-27b",
              "grok-4.6",
              "voiceflow-core-4.1",
              "voiceflow-flash-4.1",
              "gemini-flash-2",
              "gpt-4-turbo",
              "claude-3.5-haiku",
              "claude-3-opus",
              "claude-3.7-sonnet",
              "claude-v2",
              "llama-3.2-1b-preview",
              "gemini-pro-1.5",
              "claude-3-haiku",
              "claude-3-sonnet",
              "text-davinci-003",
              "claude-v1",
              "claude-instant-v1",
              "deep-seek-r1-distill-llama-70B",
              "claude-3.5-sonnet"
            ],
            "x-enumNames": [
              "GPT_3_5_TURBO_1106",
              "GPT_3_5_TURBO",
              "GPT_4",
              "GPT_4_O",
              "GPT_4_O_MINI",
              "GPT_4_1",
              "GPT_4_1_MINI",
              "GPT_4_1_NANO",
              "GPT_O_3_MINI",
              "GPT_O_3",
              "GPT_O_4_MINI",
              "GPT_5",
              "GPT_5_MINI",
              "GPT_5_NANO",
              "GPT_5_2",
              "GPT_5_4",
              "GPT_5_4_MINI",
              "GPT_5_5",
              "GPT_5_6_SOL",
              "GPT_5_6_TERRA",
              "GPT_5_6_LUNA",
              "GPT_REALTIME",
              "GPT_LIVE_1",
              "CLAUDE_4_OPUS",
              "CLAUDE_4_SONNET",
              "CLAUDE_4_5_SONNET",
              "CLAUDE_4_6_SONNET",
              "CLAUDE_4_5_HAIKU",
              "CLAUDE_4_5_OPUS",
              "CLAUDE_4_7_OPUS",
              "BEDROCK_CLAUDE_4_SONNET",
              "BEDROCK_CLAUDE_4_5_SONNET",
              "BEDROCK_CLAUDE_4_6_SONNET",
              "BEDROCK_CLAUDE_5_SONNET",
              "BEDROCK_CLAUDE_4_5_HAIKU",
              "BEDROCK_CLAUDE_4_5_OPUS",
              "BEDROCK_CLAUDE_4_7_OPUS",
              "BEDROCK_CLAUDE_4_8_OPUS",
              "VOICEFLOW_CORE_4_0",
              "VOICEFLOW_CORE_4_2",
              "VOICEFLOW_FLASH_4_2",
              "KIMI_K_3",
              "GEMINI_2_5_PRO",
              "GEMINI_2_5_FLASH",
              "GEMINI_LIVE_2_5_FLASH",
              "GEMINI_3_FLASH",
              "GEMINI_3_5_FLASH",
              "GEMINI_3_1_PRO",
              "GPT_OSS_20_B",
              "GPT_OSS_120_B",
              "LLAMA_GUARD_4",
              "LLAMA_3_1_INSTANT",
              "LLAMA_3_3_VERSATILE",
              "QWEN_3_6_27_B",
              "GROK_4_6",
              "VOICEFLOW_CORE_4_1",
              "VOICEFLOW_FLASH_4_1",
              "GEMINI_FLASH_2",
              "GPT_4_TURBO",
              "CLAUDE_3_5_HAIKU",
              "CLAUDE_3_OPUS",
              "CLAUDE_3_7_SONNET",
              "CLAUDE_V_2",
              "LLAMA_3_2_1_B_PREVIEW",
              "GEMINI_PRO_1_5",
              "CLAUDE_3_HAIKU",
              "CLAUDE_3_SONNET",
              "DA_VINCI_003",
              "CLAUDE_V_1",
              "CLAUDE_INSTANT_V_1",
              "DEEP_SEEK_R_1_DISTILL_LLAMA_70_B",
              "CLAUDE_3_5_SONNET"
            ]
          },
          "system": {
            "description": "The system prompt applied to the model when synthesizing the answer.",
            "type": "string"
          },
          "maxTokens": {
            "description": "The maximum number of tokens the model may generate when synthesizing the answer.",
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "temperature": {
            "description": "The sampling temperature applied to the model when synthesizing the answer.",
            "type": "number"
          },
          "reasoningEffort": {
            "description": "The reasoning effort applied to the model when synthesizing the answer.",
            "type": "string",
            "enum": [
              "off",
              "adaptive",
              "minimal",
              "low",
              "medium",
              "high"
            ],
            "x-enumNames": [
              "OFF",
              "ADAPTIVE",
              "MINIMAL",
              "LOW",
              "MEDIUM",
              "HIGH"
            ]
          }
        }
      },
      "StableKnowledgeBaseQueryRequest": {
        "type": "object",
        "properties": {
          "version": {
            "type": "string",
            "enum": [
              "draft",
              "published"
            ],
            "description": "Whether to query the draft or the published version of the knowledge base.",
            "x-enumNames": [
              "DRAFT",
              "PUBLISHED"
            ]
          },
          "filters": {
            "description": "Metadata filters used to narrow down which document chunks are searched.",
            "type": "object",
            "additionalProperties": {}
          },
          "question": {
            "type": "string",
            "description": "The natural-language question to ask the knowledge base."
          },
          "settings": {
            "allOf": [
              {
                "$ref": "#/components/schemas/StableKnowledgeBaseQuerySettings"
              }
            ]
          },
          "synthesis": {
            "description": "Whether to synthesize an answer from the retrieved chunks; when false, only raw chunks are returned.",
            "type": "boolean"
          },
          "chunkLimit": {
            "description": "The maximum number of document chunks to retrieve.",
            "type": "integer",
            "minimum": 1,
            "maximum": 30
          },
          "instruction": {
            "description": "An additional instruction applied when synthesizing the answer from the retrieved chunks.",
            "type": "string"
          }
        },
        "required": [
          "version",
          "question"
        ],
        "additionalProperties": false
      },
      "StableMCPServer": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "url": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/Markup"
              }
            ]
          },
          "name": {
            "type": "string"
          },
          "image": {
            "nullable": true,
            "description": "The URL of the MCP server icon image.",
            "type": "string"
          },
          "headers": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "key": {
                  "nullable": true,
                  "type": "string"
                },
                "value": {
                  "type": "string",
                  "enum": [
                    "[redacted]"
                  ],
                  "x-enumNames": [
                    "REDACTED"
                  ]
                }
              },
              "required": [
                "key",
                "value"
              ]
            }
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "description": {
            "nullable": true,
            "description": "A human-readable description of what the MCP server provides.",
            "type": "string"
          },
          "specification": {
            "$ref": "#/components/schemas/McpServerSpecification"
          }
        },
        "required": [
          "id",
          "url",
          "name",
          "image",
          "headers",
          "createdAt",
          "updatedAt",
          "description",
          "specification"
        ]
      },
      "StableMCPServerListResponse": {
        "type": "object",
        "properties": {
          "mcpServers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableMCPServer"
            }
          }
        },
        "required": [
          "mcpServers"
        ]
      },
      "StableMCPServerResponse": {
        "type": "object",
        "properties": {
          "mcpServer": {
            "$ref": "#/components/schemas/StableMCPServer"
          }
        },
        "required": [
          "mcpServer"
        ]
      },
      "StableMCPServerCreateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "description": {
            "default": null,
            "nullable": true,
            "description": "A human-readable description of what the MCP server provides.",
            "type": "string"
          },
          "url": {
            "$ref": "#/components/schemas/Markup"
          },
          "headers": {
            "default": [],
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "key": {
                  "type": "string",
                  "description": "The name of the HTTP header sent to the MCP server."
                },
                "value": {
                  "$ref": "#/components/schemas/Markup"
                }
              },
              "required": [
                "key",
                "value"
              ]
            }
          },
          "specification": {
            "default": "2025-06-18",
            "allOf": [
              {
                "$ref": "#/components/schemas/McpServerSpecification"
              }
            ]
          }
        },
        "required": [
          "name",
          "url"
        ],
        "additionalProperties": false,
        "x-vf-doc": {
          "description": "Header values are Markup and may reference a secret by ID; MCP clients must send every header value as such a reference rather than as literal text."
        },
        "description": "Header values are Markup and may reference a secret by ID; MCP clients must send every header value as such a reference rather than as literal text."
      },
      "StableMCPServerUpdateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "description": {
            "nullable": true,
            "description": "A human-readable description of what the MCP server provides.",
            "type": "string"
          },
          "specification": {
            "allOf": [
              {
                "$ref": "#/components/schemas/McpServerSpecification"
              }
            ]
          },
          "url": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Markup"
              }
            ]
          },
          "headers": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "key": {
                  "type": "string",
                  "description": "The name of the HTTP header sent to the MCP server."
                },
                "value": {
                  "$ref": "#/components/schemas/Markup"
                }
              },
              "required": [
                "key",
                "value"
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-vf-doc": {
          "description": "Header values are Markup and may reference a secret by ID; MCP clients must send every header value as such a reference rather than as literal text."
        },
        "description": "Header values are Markup and may reference a secret by ID; MCP clients must send every header value as such a reference rather than as literal text."
      },
      "StableMCPTool": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "description": "The name of the tool as exposed by the MCP server."
          },
          "serverID": {
            "type": "string",
            "description": "The ID of the MCP server this tool belongs to."
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "description": {
            "nullable": true,
            "description": "A human-readable description of what the tool does, as provided by the MCP server.",
            "type": "string"
          },
          "inputSchema": {
            "type": "object",
            "additionalProperties": {},
            "description": "The JSON Schema describing the tool's input arguments."
          }
        },
        "required": [
          "id",
          "name",
          "serverID",
          "createdAt",
          "updatedAt",
          "description",
          "inputSchema"
        ]
      },
      "StableMCPToolListResponse": {
        "type": "object",
        "properties": {
          "mcpTools": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableMCPTool"
            }
          }
        },
        "required": [
          "mcpTools"
        ]
      },
      "StableMCPToolResponse": {
        "type": "object",
        "properties": {
          "mcpTool": {
            "$ref": "#/components/schemas/StableMCPTool"
          }
        },
        "required": [
          "mcpTool"
        ]
      },
      "StableProject": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "image": {
            "nullable": true,
            "description": "The URL of the project image.",
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "workspaceID": {
            "type": "string",
            "description": "The ID of the workspace the project belongs to."
          },
          "description": {
            "nullable": true,
            "description": "A short description of the project.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "image",
          "createdAt",
          "updatedAt",
          "workspaceID",
          "description"
        ]
      },
      "StableProjectListResponse": {
        "type": "object",
        "properties": {
          "projects": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableProject"
            }
          }
        },
        "required": [
          "projects"
        ]
      },
      "StableProjectResponse": {
        "type": "object",
        "properties": {
          "project": {
            "$ref": "#/components/schemas/StableProject"
          }
        },
        "required": [
          "project"
        ]
      },
      "StableProjectCreateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "workspaceID": {
            "type": "string",
            "description": "The ID of the workspace the project belongs to."
          },
          "type": {
            "type": "string",
            "enum": [
              "webchat",
              "phone-call"
            ],
            "description": "The channel type of the project to create.",
            "x-enumNames": [
              "WEBCHAT",
              "PHONE_CALL"
            ]
          }
        },
        "required": [
          "name",
          "workspaceID",
          "type"
        ],
        "additionalProperties": false
      },
      "StableProjectUpdateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "StableSecret": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The ID of the secret. This is the value to put in a tool input default (`defaultValue: [{ secretID }]`) so the credential is injected at runtime."
          },
          "name": {
            "type": "string",
            "description": "The name of the secret, unique within the project."
          },
          "visibility": {
            "description": "`masked` secrets can be revealed in the Voiceflow UI by users with permission; `restricted` secrets can never be read back by anyone.",
            "allOf": [
              {
                "$ref": "#/components/schemas/SecretVisibility"
              }
            ],
            "enum": [
              "restricted",
              "masked"
            ],
            "x-enumNames": [
              "RESTRICTED",
              "MASKED"
            ]
          },
          "hasValue": {
            "type": "boolean",
            "description": "Whether a project-level default value is currently stored for this secret."
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          }
        },
        "required": [
          "id",
          "name",
          "visibility",
          "hasValue",
          "createdAt",
          "updatedAt"
        ]
      },
      "StableSecretListResponse": {
        "type": "object",
        "properties": {
          "secrets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableSecret"
            }
          }
        },
        "required": [
          "secrets"
        ]
      },
      "StableSecretOverride": {
        "type": "object",
        "properties": {
          "environmentAlias": {
            "type": "string",
            "description": "The alias of the environment carrying the override (e.g. `main`)."
          },
          "versionVariant": {
            "description": "Which version of the environment carries the override — its editable `draft` or its `published` copy.",
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionVariant"
              }
            ],
            "enum": [
              "draft",
              "published"
            ],
            "x-enumNames": [
              "DRAFT",
              "PUBLISHED"
            ]
          },
          "secretIDs": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The IDs of the secrets overridden on this environment version."
          }
        },
        "required": [
          "environmentAlias",
          "versionVariant",
          "secretIDs"
        ]
      },
      "StableSecretOverrideListResponse": {
        "type": "object",
        "properties": {
          "overrides": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableSecretOverride"
            }
          }
        },
        "required": [
          "overrides"
        ]
      },
      "StableSecretResponse": {
        "type": "object",
        "properties": {
          "secret": {
            "$ref": "#/components/schemas/StableSecret"
          }
        },
        "required": [
          "secret"
        ]
      },
      "StableSecretCreateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 64,
            "description": "The name of the secret. Must be unique within the project."
          },
          "defaultValue": {
            "description": "The project-level value. Omit to create the secret as a placeholder with no value — a teammate can fill it in later through the Voiceflow UI or CLI.",
            "type": "string"
          },
          "visibility": {
            "default": "masked",
            "description": "Whether the value can be revealed in the Voiceflow UI. `restricted` secrets can never be read back by anyone.",
            "allOf": [
              {
                "$ref": "#/components/schemas/SecretVisibility"
              }
            ]
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false
      },
      "StableSecretValueRequest": {
        "type": "object",
        "properties": {
          "value": {
            "type": "string",
            "minLength": 1,
            "description": "The secret value to store. Write-only — it can never be read back through this API."
          },
          "environmentAlias": {
            "description": "Set the value as an override on this environment (e.g. `main`) instead of as the project-wide default.",
            "type": "string",
            "minLength": 1
          },
          "versionVariant": {
            "description": "Which version of the environment the override applies to. Defaults to `draft`. Ignored without `environmentAlias`.",
            "allOf": [
              {
                "$ref": "#/components/schemas/VersionVariant"
              }
            ]
          }
        },
        "required": [
          "value"
        ],
        "additionalProperties": false
      },
      "StableTestCheck": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "turnID": {
                "type": "string",
                "description": "The ID of the turn this check belongs to."
              },
              "createdAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "updatedAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "type": {
                "type": "string",
                "enum": [
                  "response"
                ],
                "description": "Identifies a check that judges the agent's response text against expected criteria.",
                "x-enumNames": [
                  "RESPONSE"
                ]
              },
              "payload": {
                "$ref": "#/components/schemas/ResponseSimulationTurnTestPayload"
              }
            },
            "required": [
              "id",
              "turnID",
              "createdAt",
              "updatedAt",
              "type",
              "payload"
            ]
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "turnID": {
                "type": "string",
                "description": "The ID of the turn this check belongs to."
              },
              "createdAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "updatedAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "type": {
                "type": "string",
                "enum": [
                  "routing"
                ],
                "description": "Identifies a check that verifies whether the agent routed to a specific playbook or workflow.",
                "x-enumNames": [
                  "ROUTING"
                ]
              },
              "payload": {
                "type": "object",
                "properties": {
                  "routeTo": {
                    "nullable": true,
                    "description": "The routing target to check against, paired with shouldRoute. Null when asserting no routing at all.",
                    "type": "object",
                    "properties": {
                      "resourceID": {
                        "type": "string",
                        "description": "The ID of the playbook or workflow the check routes against."
                      },
                      "resourceType": {
                        "type": "string",
                        "enum": [
                          "playbook",
                          "workflow"
                        ],
                        "description": "Whether resourceID is a playbook or a workflow.",
                        "x-enumNames": [
                          "PLAYBOOK",
                          "WORKFLOW"
                        ]
                      }
                    },
                    "required": [
                      "resourceID",
                      "resourceType"
                    ]
                  },
                  "shouldRoute": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "routeTo",
                  "shouldRoute"
                ]
              }
            },
            "required": [
              "id",
              "turnID",
              "createdAt",
              "updatedAt",
              "type",
              "payload"
            ]
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "turnID": {
                "type": "string",
                "description": "The ID of the turn this check belongs to."
              },
              "createdAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "updatedAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "type": {
                "type": "string",
                "enum": [
                  "tool"
                ],
                "description": "Identifies a check that verifies whether the agent called a specific tool.",
                "x-enumNames": [
                  "TOOL"
                ]
              },
              "payload": {
                "$ref": "#/components/schemas/ToolSimulationTurnTestPayload"
              }
            },
            "required": [
              "id",
              "turnID",
              "createdAt",
              "updatedAt",
              "type",
              "payload"
            ]
          }
        ]
      },
      "StableTestCheckListResponse": {
        "type": "object",
        "properties": {
          "checks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableTestCheck"
            }
          }
        },
        "required": [
          "checks"
        ]
      },
      "StableTestCheckResponse": {
        "type": "object",
        "properties": {
          "check": {
            "$ref": "#/components/schemas/StableTestCheck"
          }
        },
        "required": [
          "check"
        ]
      },
      "StableTestCheckCreateRequest": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "response"
                ],
                "description": "Identifies a check that judges the agent's response text against expected criteria.",
                "x-enumNames": [
                  "RESPONSE"
                ]
              },
              "turnID": {
                "type": "string",
                "description": "The ID of the turn this check belongs to."
              },
              "payload": {
                "$ref": "#/components/schemas/ResponseSimulationTurnTestPayload"
              }
            },
            "required": [
              "type",
              "turnID",
              "payload"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "routing"
                ],
                "description": "Identifies a check that verifies whether the agent routed to a specific playbook or workflow.",
                "x-enumNames": [
                  "ROUTING"
                ]
              },
              "turnID": {
                "type": "string",
                "description": "The ID of the turn this check belongs to."
              },
              "payload": {
                "type": "object",
                "properties": {
                  "routeTo": {
                    "nullable": true,
                    "description": "The routing target to check against, paired with shouldRoute. Null when asserting no routing at all.",
                    "type": "object",
                    "properties": {
                      "resourceID": {
                        "type": "string",
                        "description": "The ID of the playbook or workflow the check routes against."
                      },
                      "resourceType": {
                        "type": "string",
                        "enum": [
                          "playbook",
                          "workflow"
                        ],
                        "description": "Whether resourceID is a playbook or a workflow.",
                        "x-enumNames": [
                          "PLAYBOOK",
                          "WORKFLOW"
                        ]
                      }
                    },
                    "required": [
                      "resourceID",
                      "resourceType"
                    ]
                  },
                  "shouldRoute": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "routeTo",
                  "shouldRoute"
                ]
              }
            },
            "required": [
              "type",
              "turnID",
              "payload"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "tool"
                ],
                "description": "Identifies a check that verifies whether the agent called a specific tool.",
                "x-enumNames": [
                  "TOOL"
                ]
              },
              "turnID": {
                "type": "string",
                "description": "The ID of the turn this check belongs to."
              },
              "payload": {
                "$ref": "#/components/schemas/ToolSimulationTurnTestPayload"
              }
            },
            "required": [
              "type",
              "turnID",
              "payload"
            ],
            "additionalProperties": false
          }
        ]
      },
      "StableTestCheckCreateManyRequest": {
        "type": "object",
        "properties": {
          "turnID": {
            "type": "string",
            "description": "The ID of the turn to attach these checks to."
          },
          "checks": {
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "enum": [
                        "response"
                      ],
                      "description": "Identifies a check that judges the agent's response text against expected criteria.",
                      "x-enumNames": [
                        "RESPONSE"
                      ]
                    },
                    "payload": {
                      "$ref": "#/components/schemas/ResponseSimulationTurnTestPayload"
                    }
                  },
                  "required": [
                    "type",
                    "payload"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "enum": [
                        "routing"
                      ],
                      "description": "Identifies a check that verifies whether the agent routed to a specific playbook or workflow.",
                      "x-enumNames": [
                        "ROUTING"
                      ]
                    },
                    "payload": {
                      "type": "object",
                      "properties": {
                        "routeTo": {
                          "nullable": true,
                          "description": "The routing target to check against, paired with shouldRoute. Null when asserting no routing at all.",
                          "type": "object",
                          "properties": {
                            "resourceID": {
                              "type": "string",
                              "description": "The ID of the playbook or workflow the check routes against."
                            },
                            "resourceType": {
                              "type": "string",
                              "enum": [
                                "playbook",
                                "workflow"
                              ],
                              "description": "Whether resourceID is a playbook or a workflow.",
                              "x-enumNames": [
                                "PLAYBOOK",
                                "WORKFLOW"
                              ]
                            }
                          },
                          "required": [
                            "resourceID",
                            "resourceType"
                          ]
                        },
                        "shouldRoute": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "routeTo",
                        "shouldRoute"
                      ]
                    }
                  },
                  "required": [
                    "type",
                    "payload"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "enum": [
                        "tool"
                      ],
                      "description": "Identifies a check that verifies whether the agent called a specific tool.",
                      "x-enumNames": [
                        "TOOL"
                      ]
                    },
                    "payload": {
                      "$ref": "#/components/schemas/ToolSimulationTurnTestPayload"
                    }
                  },
                  "required": [
                    "type",
                    "payload"
                  ],
                  "additionalProperties": false
                }
              ]
            }
          }
        },
        "required": [
          "turnID",
          "checks"
        ]
      },
      "StableTestCheckUpdateRequest": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "response"
                ],
                "description": "Identifies a check that judges the agent's response text against expected criteria.",
                "x-enumNames": [
                  "RESPONSE"
                ]
              },
              "payload": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ResponseSimulationTurnTestPayload"
                  }
                ]
              }
            },
            "required": [
              "type"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "routing"
                ],
                "description": "Identifies a check that verifies whether the agent routed to a specific playbook or workflow.",
                "x-enumNames": [
                  "ROUTING"
                ]
              },
              "payload": {
                "type": "object",
                "properties": {
                  "routeTo": {
                    "nullable": true,
                    "description": "The routing target to check against, paired with shouldRoute. Null when asserting no routing at all.",
                    "type": "object",
                    "properties": {
                      "resourceID": {
                        "type": "string",
                        "description": "The ID of the playbook or workflow the check routes against."
                      },
                      "resourceType": {
                        "type": "string",
                        "enum": [
                          "playbook",
                          "workflow"
                        ],
                        "description": "Whether resourceID is a playbook or a workflow.",
                        "x-enumNames": [
                          "PLAYBOOK",
                          "WORKFLOW"
                        ]
                      }
                    },
                    "required": [
                      "resourceID",
                      "resourceType"
                    ]
                  },
                  "shouldRoute": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "routeTo",
                  "shouldRoute"
                ]
              }
            },
            "required": [
              "type"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "tool"
                ],
                "description": "Identifies a check that verifies whether the agent called a specific tool.",
                "x-enumNames": [
                  "TOOL"
                ]
              },
              "payload": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ToolSimulationTurnTestPayload"
                  }
                ]
              }
            },
            "required": [
              "type"
            ],
            "additionalProperties": false
          }
        ]
      },
      "StableTestRun": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "logs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SimulationRunLog"
            },
            "description": "The trace, tool-call, and end events recorded as the run executed."
          },
          "status": {
            "type": "string",
            "enum": [
              "idle",
              "pending",
              "running",
              "failed",
              "passed",
              "canceled"
            ],
            "description": "Where the run is in its lifecycle, from queued through to a finished outcome.",
            "x-enumNames": [
              "IDLE",
              "PENDING",
              "RUNNING",
              "FAILED",
              "PASSED",
              "CANCELED"
            ]
          },
          "testID": {
            "type": "string",
            "description": "The ID of the test this run belongs to."
          },
          "failReason": {
            "nullable": true,
            "description": "Why the run failed. Null unless the run finished in a failed state.",
            "type": "string"
          },
          "totalChecks": {
            "type": "number",
            "description": "The number of checks across the test's turns that this run evaluated."
          },
          "passedChecks": {
            "nullable": true,
            "description": "How many of those checks passed. Null until the run reaches a finished state.",
            "type": "number"
          },
          "totalCredits": {
            "type": "number",
            "description": "The LLM credits consumed by this run."
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "startedAt": {
            "nullable": true,
            "description": "When execution actually began. Null while still queued.",
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "finishedAt": {
            "nullable": true,
            "description": "When the run reached a finished state. Null while in progress.",
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          }
        },
        "required": [
          "id",
          "logs",
          "status",
          "testID",
          "failReason",
          "totalChecks",
          "passedChecks",
          "totalCredits",
          "createdAt",
          "startedAt",
          "finishedAt"
        ]
      },
      "StableTestRunListResponse": {
        "type": "object",
        "properties": {
          "runs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableTestRun"
            }
          }
        },
        "required": [
          "runs"
        ]
      },
      "StableTestRunSearchRequest": {
        "type": "object",
        "properties": {
          "take": {
            "default": 20,
            "description": "The maximum number of results to return, used for pagination.",
            "type": "number",
            "minimum": 1,
            "maximum": 100
          },
          "skip": {
            "default": 0,
            "description": "The number of results to skip, used for pagination.",
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "testID": {
            "description": "Restrict results to runs of this test. Omit to search across all tests.",
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "StableTestRunResponse": {
        "type": "object",
        "properties": {
          "run": {
            "$ref": "#/components/schemas/StableTestRun"
          }
        },
        "required": [
          "run"
        ]
      },
      "StableTestRunCreateRequest": {
        "type": "object",
        "properties": {
          "testID": {
            "type": "string",
            "description": "The ID of the test to run."
          }
        },
        "required": [
          "testID"
        ],
        "additionalProperties": false
      },
      "StableTestRunCreateManyResponse": {
        "type": "object",
        "properties": {
          "runs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableTestRun"
            }
          },
          "bulkID": {
            "type": "string",
            "description": "Groups the runs created by this call so they can be searched or tracked together."
          }
        },
        "required": [
          "runs",
          "bulkID"
        ]
      },
      "StableTestRunCreateManyRequest": {
        "type": "object",
        "properties": {
          "testIDs": {
            "minItems": 1,
            "maxItems": 20,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The IDs of the tests to run, one run created per test."
          }
        },
        "required": [
          "testIDs"
        ],
        "additionalProperties": false
      },
      "StableTest": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "settings": {
            "$ref": "#/components/schemas/SimulationSettings"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "turnOrder": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The IDs of the test's turns, in execution order."
          }
        },
        "required": [
          "id",
          "name",
          "settings",
          "createdAt",
          "updatedAt",
          "turnOrder"
        ]
      },
      "StableTestListResponse": {
        "type": "object",
        "properties": {
          "tests": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableTest"
            }
          }
        },
        "required": [
          "tests"
        ]
      },
      "StableTestResponse": {
        "type": "object",
        "properties": {
          "test": {
            "$ref": "#/components/schemas/StableTest"
          }
        },
        "required": [
          "test"
        ]
      },
      "StableTestCreateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "settings": {
            "default": {
              "launchEvent": null,
              "variableStates": []
            },
            "allOf": [
              {
                "$ref": "#/components/schemas/SimulationSettings"
              }
            ]
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false
      },
      "StableTestCreateManyRequest": {
        "type": "object",
        "properties": {
          "tests": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableTestCreateRequest"
            }
          }
        },
        "required": [
          "tests"
        ]
      },
      "StableTestUpdateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "settings": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SimulationSettings"
              }
            ]
          },
          "turnOrder": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The IDs of the test's turns, in execution order."
          }
        },
        "additionalProperties": false
      },
      "StableTestTurn": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "testID": {
                "type": "string",
                "description": "The ID of the test this turn belongs to."
              },
              "createdAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "updatedAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "type": {
                "type": "string",
                "enum": [
                  "user"
                ],
                "description": "Identifies a turn that sends a scripted user message.",
                "x-enumNames": [
                  "USER"
                ]
              },
              "payload": {
                "type": "object",
                "properties": {
                  "response": {
                    "type": "string"
                  },
                  "variableStates": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "array",
                        "items": {
                          "$ref": "#/components/schemas/PersonaItem"
                        }
                      }
                    ]
                  }
                },
                "required": [
                  "response",
                  "variableStates"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "id",
              "testID",
              "createdAt",
              "updatedAt",
              "type",
              "payload"
            ]
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "testID": {
                "type": "string",
                "description": "The ID of the test this turn belongs to."
              },
              "createdAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "updatedAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "type": {
                "type": "string",
                "enum": [
                  "agent"
                ],
                "description": "Identifies a turn that asserts on the agent's behavior via its attached checks.",
                "x-enumNames": [
                  "AGENT"
                ]
              },
              "payload": {
                "type": "object",
                "properties": {
                  "sequential": {
                    "type": "boolean",
                    "description": "Whether the checks must pass in checkOrder rather than in any order."
                  }
                },
                "required": [
                  "sequential"
                ],
                "additionalProperties": false
              },
              "checkOrder": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "The IDs of the turn's checks, in evaluation order."
              }
            },
            "required": [
              "id",
              "testID",
              "createdAt",
              "updatedAt",
              "type",
              "payload",
              "checkOrder"
            ]
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "testID": {
                "type": "string",
                "description": "The ID of the test this turn belongs to."
              },
              "createdAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "updatedAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "type": {
                "type": "string",
                "enum": [
                  "simulation"
                ],
                "description": "Identifies a turn that hands off to an LLM-driven persona conversation.",
                "x-enumNames": [
                  "SIMULATION"
                ]
              },
              "payload": {
                "type": "object",
                "properties": {
                  "scenario": {
                    "type": "string"
                  },
                  "maxTurns": {
                    "type": "number"
                  },
                  "variableStates": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "array",
                        "items": {
                          "$ref": "#/components/schemas/PersonaItem"
                        }
                      }
                    ]
                  },
                  "successCriteria": {
                    "type": "string"
                  }
                },
                "required": [
                  "scenario",
                  "maxTurns",
                  "variableStates",
                  "successCriteria"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "id",
              "testID",
              "createdAt",
              "updatedAt",
              "type",
              "payload"
            ]
          }
        ]
      },
      "StableTestTurnListResponse": {
        "type": "object",
        "properties": {
          "turns": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableTestTurn"
            }
          }
        },
        "required": [
          "turns"
        ]
      },
      "StableTestTurnResponse": {
        "type": "object",
        "properties": {
          "turn": {
            "$ref": "#/components/schemas/StableTestTurn"
          }
        },
        "required": [
          "turn"
        ]
      },
      "StableTestTurnCreateRequest": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "user"
                ],
                "description": "Identifies a turn that sends a scripted user message.",
                "x-enumNames": [
                  "USER"
                ]
              },
              "testID": {
                "type": "string",
                "description": "The ID of the test this turn belongs to."
              },
              "payload": {
                "type": "object",
                "properties": {
                  "response": {
                    "type": "string"
                  },
                  "variableStates": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "array",
                        "items": {
                          "$ref": "#/components/schemas/PersonaItem"
                        }
                      }
                    ]
                  }
                },
                "required": [
                  "response",
                  "variableStates"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "type",
              "testID",
              "payload"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "agent"
                ],
                "description": "Identifies a turn that asserts on the agent's behavior via its attached checks.",
                "x-enumNames": [
                  "AGENT"
                ]
              },
              "testID": {
                "type": "string",
                "description": "The ID of the test this turn belongs to."
              },
              "payload": {
                "type": "object",
                "properties": {
                  "sequential": {
                    "type": "boolean",
                    "description": "Whether the checks must pass in checkOrder rather than in any order."
                  }
                },
                "required": [
                  "sequential"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "type",
              "testID",
              "payload"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "simulation"
                ],
                "description": "Identifies a turn that hands off to an LLM-driven persona conversation.",
                "x-enumNames": [
                  "SIMULATION"
                ]
              },
              "testID": {
                "type": "string",
                "description": "The ID of the test this turn belongs to."
              },
              "payload": {
                "type": "object",
                "properties": {
                  "scenario": {
                    "type": "string"
                  },
                  "maxTurns": {
                    "type": "number"
                  },
                  "variableStates": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "array",
                        "items": {
                          "$ref": "#/components/schemas/PersonaItem"
                        }
                      }
                    ]
                  },
                  "successCriteria": {
                    "type": "string"
                  }
                },
                "required": [
                  "scenario",
                  "maxTurns",
                  "variableStates",
                  "successCriteria"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "type",
              "testID",
              "payload"
            ],
            "additionalProperties": false
          }
        ]
      },
      "StableTestTurnCreateManyRequest": {
        "type": "object",
        "properties": {
          "testID": {
            "type": "string",
            "description": "The ID of the test to attach these turns to."
          },
          "turns": {
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "enum": [
                        "user"
                      ],
                      "description": "Identifies a turn that sends a scripted user message.",
                      "x-enumNames": [
                        "USER"
                      ]
                    },
                    "payload": {
                      "type": "object",
                      "properties": {
                        "response": {
                          "type": "string"
                        },
                        "variableStates": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "array",
                              "items": {
                                "$ref": "#/components/schemas/PersonaItem"
                              }
                            }
                          ]
                        }
                      },
                      "required": [
                        "response",
                        "variableStates"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "type",
                    "payload"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "enum": [
                        "agent"
                      ],
                      "description": "Identifies a turn that asserts on the agent's behavior via its attached checks.",
                      "x-enumNames": [
                        "AGENT"
                      ]
                    },
                    "payload": {
                      "type": "object",
                      "properties": {
                        "sequential": {
                          "type": "boolean",
                          "description": "Whether the checks must pass in checkOrder rather than in any order."
                        }
                      },
                      "required": [
                        "sequential"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "type",
                    "payload"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "enum": [
                        "simulation"
                      ],
                      "description": "Identifies a turn that hands off to an LLM-driven persona conversation.",
                      "x-enumNames": [
                        "SIMULATION"
                      ]
                    },
                    "payload": {
                      "type": "object",
                      "properties": {
                        "scenario": {
                          "type": "string"
                        },
                        "maxTurns": {
                          "type": "number"
                        },
                        "variableStates": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "array",
                              "items": {
                                "$ref": "#/components/schemas/PersonaItem"
                              }
                            }
                          ]
                        },
                        "successCriteria": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "scenario",
                        "maxTurns",
                        "variableStates",
                        "successCriteria"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "type",
                    "payload"
                  ],
                  "additionalProperties": false
                }
              ]
            }
          }
        },
        "required": [
          "testID",
          "turns"
        ]
      },
      "StableTestTurnUpdateRequest": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "user"
                ],
                "description": "Identifies a turn that sends a scripted user message.",
                "x-enumNames": [
                  "USER"
                ]
              },
              "payload": {
                "type": "object",
                "properties": {
                  "response": {
                    "type": "string"
                  },
                  "variableStates": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "array",
                        "items": {
                          "$ref": "#/components/schemas/PersonaItem"
                        }
                      }
                    ]
                  }
                },
                "required": [
                  "response",
                  "variableStates"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "type"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "agent"
                ],
                "description": "Identifies a turn that asserts on the agent's behavior via its attached checks.",
                "x-enumNames": [
                  "AGENT"
                ]
              },
              "payload": {
                "type": "object",
                "properties": {
                  "sequential": {
                    "type": "boolean",
                    "description": "Whether the checks must pass in checkOrder rather than in any order."
                  }
                },
                "required": [
                  "sequential"
                ],
                "additionalProperties": false
              },
              "checkOrder": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "The IDs of the turn's checks, in evaluation order."
              }
            },
            "required": [
              "type"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "simulation"
                ],
                "description": "Identifies a turn that hands off to an LLM-driven persona conversation.",
                "x-enumNames": [
                  "SIMULATION"
                ]
              },
              "payload": {
                "type": "object",
                "properties": {
                  "scenario": {
                    "type": "string"
                  },
                  "maxTurns": {
                    "type": "number"
                  },
                  "variableStates": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "array",
                        "items": {
                          "$ref": "#/components/schemas/PersonaItem"
                        }
                      }
                    ]
                  },
                  "successCriteria": {
                    "type": "string"
                  }
                },
                "required": [
                  "scenario",
                  "maxTurns",
                  "variableStates",
                  "successCriteria"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "type"
            ],
            "additionalProperties": false
          }
        ]
      },
      "StableTranscriptProperty": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "default": {
            "type": "boolean",
            "description": "Whether this is a built-in property, which cannot be updated, deleted or have its value set."
          },
          "type": {
            "type": "string",
            "enum": [
              "boolean",
              "number",
              "string"
            ],
            "description": "The type of value the property holds.",
            "x-enumNames": [
              "BOOLEAN",
              "NUMBER",
              "STRING"
            ]
          },
          "projectID": {
            "type": "string",
            "description": "The ID of the project the property belongs to."
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          }
        },
        "required": [
          "id",
          "name",
          "default",
          "type",
          "projectID",
          "createdAt",
          "updatedAt"
        ]
      },
      "StableTranscriptPropertyListResponse": {
        "type": "object",
        "properties": {
          "properties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableTranscriptProperty"
            }
          }
        },
        "required": [
          "properties"
        ]
      },
      "StableTranscriptPropertyResponse": {
        "type": "object",
        "properties": {
          "property": {
            "$ref": "#/components/schemas/StableTranscriptProperty"
          }
        },
        "required": [
          "property"
        ]
      },
      "StableTranscriptPropertyCreateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "boolean",
              "number",
              "string"
            ],
            "description": "The type of value the property holds.",
            "x-enumNames": [
              "BOOLEAN",
              "NUMBER",
              "STRING"
            ]
          }
        },
        "required": [
          "name",
          "type"
        ],
        "additionalProperties": false
      },
      "StableTranscriptPropertyUpdateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "StableTranscriptPropertySetValueRequest": {
        "type": "object",
        "properties": {
          "value": {
            "type": "string",
            "description": "The value to set for the property on the transcript."
          },
          "transcriptID": {
            "type": "string",
            "description": "The ID of the transcript to set the property value on."
          }
        },
        "required": [
          "value",
          "transcriptID"
        ],
        "additionalProperties": false
      },
      "StableVariable": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "color": {
            "type": "string",
            "description": "The display color of the variable in the Voiceflow editor."
          },
          "isSystem": {
            "type": "boolean",
            "description": "Whether this is a built-in system variable, which cannot be updated or deleted."
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "description": {
            "nullable": true,
            "description": "A short description of what the variable stores.",
            "type": "string"
          },
          "defaultValue": {
            "nullable": true,
            "description": "The initial value of the variable at the start of a conversation.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "color",
          "isSystem",
          "createdAt",
          "updatedAt",
          "description",
          "defaultValue"
        ]
      },
      "StableVariableListResponse": {
        "type": "object",
        "properties": {
          "variables": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableVariable"
            }
          }
        },
        "required": [
          "variables"
        ]
      },
      "StableVariableResponse": {
        "type": "object",
        "properties": {
          "variable": {
            "$ref": "#/components/schemas/StableVariable"
          }
        },
        "required": [
          "variable"
        ]
      },
      "StableVariableCreateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "color": {
            "type": "string",
            "description": "The display color of the variable in the Voiceflow editor."
          },
          "description": {
            "nullable": true,
            "description": "A short description of what the variable stores.",
            "type": "string"
          },
          "defaultValue": {
            "nullable": true,
            "description": "The initial value of the variable at the start of a conversation.",
            "type": "string"
          }
        },
        "required": [
          "name",
          "color"
        ],
        "additionalProperties": false
      },
      "StableVariableCreateManyRequest": {
        "type": "object",
        "properties": {
          "variables": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableVariableCreateRequest"
            }
          }
        },
        "required": [
          "variables"
        ]
      },
      "StableVariableUpdateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "color": {
            "type": "string",
            "description": "The display color of the variable in the Voiceflow editor."
          },
          "description": {
            "nullable": true,
            "description": "A short description of what the variable stores.",
            "type": "string"
          },
          "defaultValue": {
            "nullable": true,
            "description": "The initial value of the variable at the start of a conversation.",
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "StableWorkspace": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "image": {
            "nullable": true,
            "description": "The URL of the workspace image.",
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
          },
          "organizationID": {
            "type": "string",
            "description": "The ID of the organization the workspace belongs to."
          }
        },
        "required": [
          "id",
          "name",
          "image",
          "createdAt",
          "updatedAt",
          "organizationID"
        ]
      },
      "StableWorkspaceListResponse": {
        "type": "object",
        "properties": {
          "workspaces": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableWorkspace"
            }
          }
        },
        "required": [
          "workspaces"
        ]
      },
      "StableWorkspaceResponse": {
        "type": "object",
        "properties": {
          "workspace": {
            "$ref": "#/components/schemas/StableWorkspace"
          }
        },
        "required": [
          "workspace"
        ]
      },
      "StableWorkspaceCreateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "organizationID": {
            "type": "string",
            "description": "The ID of the organization the workspace belongs to."
          }
        },
        "required": [
          "name",
          "organizationID"
        ],
        "additionalProperties": false
      },
      "StableWorkspaceUpdateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    }
  }
}
