> ## Documentation Index
> Fetch the complete documentation index at: https://docs.threetone.in/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Tool

> Get tool that is available in the workspace.



## OpenAPI

````yaml GET /v1/voiceai/tools/{tool_id}
openapi: 3.1.0
info:
  title: Threetone API Documentation
  version: 1.0.0
servers:
  - url: https://api.threetone.in
    description: Production
security: []
paths:
  /v1/voiceai/tools/{tool_id}:
    get:
      tags:
        - Tools
      summary: Get Tool
      description: Get tool that is available in the workspace.
      operationId: get_tool_route
      parameters:
        - name: tool_id
          in: path
          required: true
          schema:
            type: string
            description: ID of the requested tool.
            title: Tool Id
          description: ID of the requested tool.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ToolResponseModel'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - APIKeyHeader: []
        - HTTPBearer: []
components:
  schemas:
    ToolResponseModel:
      properties:
        id:
          type: string
          title: Id
          description: The tool ID
        created_at_unix_secs:
          type: integer
          title: Created At Unix Secs
          description: Unix timestamp when the tool was created
        tool_config:
          oneOf:
            - $ref: '#/components/schemas/WebhookToolConfigOutput'
            - $ref: '#/components/schemas/ClientToolConfigOutput'
            - $ref: '#/components/schemas/SystemToolConfigOutput'
            - $ref: '#/components/schemas/MCPToolConfigOutput'
            - $ref: '#/components/schemas/ApiIntegrationWebhookToolConfigOutput'
          title: Tool Config
          description: The tool configuration
          discriminator:
            propertyName: type
            mapping:
              api_integration_webhook:
                $ref: '#/components/schemas/ApiIntegrationWebhookToolConfigOutput'
              client:
                $ref: '#/components/schemas/ClientToolConfigOutput'
              mcp:
                $ref: '#/components/schemas/MCPToolConfigOutput'
              system:
                $ref: '#/components/schemas/SystemToolConfigOutput'
              webhook:
                $ref: '#/components/schemas/WebhookToolConfigOutput'
        access_info:
          $ref: '#/components/schemas/ResourceAccessInfo'
          description: Access information for this tool
        usage_stats:
          $ref: '#/components/schemas/ToolUsageStatsResponseModel'
          description: Usage statistics for this tool
      type: object
      required:
        - id
        - created_at_unix_secs
        - tool_config
        - access_info
        - usage_stats
      title: ToolResponseModel
      description: Response model for a single tool
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    WebhookToolConfigOutput:
      properties:
        type:
          type: string
          const: webhook
          title: Type
          description: The type of tool
          default: webhook
        name:
          type: string
          pattern: ^[a-zA-Z0-9_-]{1,64}$
          title: Name
        description:
          type: string
          title: Description
          description: Description of when the tool should be used and what it does.
        response_timeout_secs:
          type: integer
          maximum: 120
          minimum: 5
          title: Response Timeout Secs
          description: >-
            The maximum time in seconds to wait for the tool call to complete.
            Must be between 5 and 120 seconds (inclusive).
          default: 20
        disable_interruptions:
          type: boolean
          title: Disable Interruptions
          description: >-
            If true, the user will not be able to interrupt the agent while this
            tool is running.
          default: false
        force_pre_tool_speech:
          type: boolean
          title: Force Pre Tool Speech
          description: If true, the agent will speak before the tool call.
          default: false
        assignments:
          items:
            $ref: '#/components/schemas/DynamicVariableAssignment'
          type: array
          title: Assignments
          description: >-
            Configuration for extracting values from tool responses and
            assigning them to dynamic variables
        tool_call_sound:
          anyOf:
            - $ref: '#/components/schemas/ToolCallSoundType'
            - type: 'null'
          description: >-
            Predefined tool call sound type to play during tool execution. If
            not specified, no tool call sound will be played.
        tool_call_sound_behavior:
          $ref: '#/components/schemas/ToolCallSoundBehavior'
          description: >-
            Determines when the tool call sound should play. 'auto' only plays
            when there's pre-tool speech, 'always' plays for every tool call.
          default: auto
        tool_error_handling_mode:
          $ref: '#/components/schemas/ToolErrorHandlingMode'
          description: >-
            Controls how tool errors are processed before being shared with the
            agent. 'auto' determines handling based on tool type (summarized for
            native integrations, hide for others), 'summarized' sends an
            LLM-generated summary, 'passthrough' sends the raw error, 'hide'
            does not share the error with the agent.
          default: auto
        dynamic_variables:
          anyOf:
            - $ref: '#/components/schemas/DynamicVariablesConfig'
            - type: 'null'
          description: Configuration for dynamic variables
        execution_mode:
          $ref: '#/components/schemas/ToolExecutionMode'
          description: >-
            Determines when and how the tool executes: 'immediate' executes the
            tool right away when requested by the LLM, 'post_tool_speech' waits
            for the agent to finish speaking before executing, 'async' runs the
            tool in the background without blocking - best for long-running
            operations.
          default: immediate
        api_schema:
          $ref: '#/components/schemas/WebhookToolApiSchemaConfigOutput'
          description: >-
            The schema for the outgoing webhook, including parameters and URL
            specification
      type: object
      required:
        - name
        - description
        - api_schema
      title: WebhookToolConfig
      description: A webhook tool is a tool that calls an external webhook from our server.
      example:
        api_schema:
          method: GET
          path_params_schema:
            agent_id:
              type: string
          url: https://example.com/agents/{agent_id}
        description: Loads agent details from your CRM.
        name: fetch_agent
        response_timeout_secs: 20
        type: webhook
    ClientToolConfigOutput:
      properties:
        type:
          type: string
          const: client
          title: Type
          description: The type of tool
          default: client
        name:
          type: string
          pattern: ^[a-zA-Z0-9_-]{1,64}$
          title: Name
        description:
          type: string
          title: Description
          description: Description of when the tool should be used and what it does.
        response_timeout_secs:
          type: integer
          maximum: 120
          minimum: 1
          title: Response Timeout Secs
          description: >-
            The maximum time in seconds to wait for the tool call to complete.
            Must be between 1 and 120 seconds (inclusive).
          default: 20
        disable_interruptions:
          type: boolean
          title: Disable Interruptions
          description: >-
            If true, the user will not be able to interrupt the agent while this
            tool is running.
          default: false
        force_pre_tool_speech:
          type: boolean
          title: Force Pre Tool Speech
          description: If true, the agent will speak before the tool call.
          default: false
        assignments:
          items:
            $ref: '#/components/schemas/DynamicVariableAssignment'
          type: array
          title: Assignments
          description: >-
            Configuration for extracting values from tool responses and
            assigning them to dynamic variables
        tool_call_sound:
          anyOf:
            - $ref: '#/components/schemas/ToolCallSoundType'
            - type: 'null'
          description: >-
            Predefined tool call sound type to play during tool execution. If
            not specified, no tool call sound will be played.
        tool_call_sound_behavior:
          $ref: '#/components/schemas/ToolCallSoundBehavior'
          description: >-
            Determines when the tool call sound should play. 'auto' only plays
            when there's pre-tool speech, 'always' plays for every tool call.
          default: auto
        parameters:
          anyOf:
            - $ref: '#/components/schemas/ObjectJsonSchemaPropertyOutput'
            - type: 'null'
          description: Schema for any parameters to pass to the client
        expects_response:
          type: boolean
          title: Expects Response
          description: >-
            If true, calling this tool should block the conversation until the
            client responds. If false, continue without waiting.
          default: false
        dynamic_variables:
          anyOf:
            - $ref: '#/components/schemas/DynamicVariablesConfig'
            - type: 'null'
          description: Configuration for dynamic variables
        execution_mode:
          $ref: '#/components/schemas/ToolExecutionMode'
          description: >-
            Determines when and how the tool executes: 'immediate' executes
            right away, 'post_tool_speech' waits for agent to finish speaking,
            'async' runs in background.
          default: immediate
      type: object
      required:
        - name
        - description
      title: ClientToolConfig
      description: >-
        A client tool is one that sends an event to the user's client to trigger
        something client side
    SystemToolConfigOutput:
      properties:
        type:
          type: string
          const: system
          title: Type
          description: The type of tool
          default: system
        name:
          type: string
          pattern: ^[a-zA-Z0-9_-]{1,64}$
          title: Name
        description:
          type: string
          title: Description
          description: >-
            Description of when the tool should be used and what it does. Leave
            empty to use the default description that's optimized for the
            specific tool type.
          default: ''
        response_timeout_secs:
          type: integer
          title: Response Timeout Secs
          description: The maximum time in seconds to wait for the tool call to complete.
          default: 20
        disable_interruptions:
          type: boolean
          title: Disable Interruptions
          description: >-
            If true, the user will not be able to interrupt the agent while this
            tool is running.
          default: false
        force_pre_tool_speech:
          type: boolean
          title: Force Pre Tool Speech
          description: If true, the agent will speak before the tool call.
          default: false
        assignments:
          items:
            $ref: '#/components/schemas/DynamicVariableAssignment'
          type: array
          title: Assignments
          description: >-
            Configuration for extracting values from tool responses and
            assigning them to dynamic variables
        tool_call_sound:
          anyOf:
            - $ref: '#/components/schemas/ToolCallSoundType'
            - type: 'null'
          description: >-
            Predefined tool call sound type to play during tool execution. If
            not specified, no tool call sound will be played.
        tool_call_sound_behavior:
          $ref: '#/components/schemas/ToolCallSoundBehavior'
          description: >-
            Determines when the tool call sound should play. 'auto' only plays
            when there's pre-tool speech, 'always' plays for every tool call.
          default: auto
        tool_error_handling_mode:
          $ref: '#/components/schemas/ToolErrorHandlingMode'
          description: >-
            Controls how tool errors are processed before being shared with the
            agent. 'auto' uses tool-type defaults; 'summarized' sends an LLM
            summary; 'passthrough' sends the raw error; 'hide' does not share
            errors with the agent.
          default: auto
        params:
          oneOf:
            - $ref: '#/components/schemas/EndCallToolConfig'
            - $ref: '#/components/schemas/LanguageDetectionToolConfig'
            - $ref: '#/components/schemas/SkipTurnToolConfig'
            - $ref: '#/components/schemas/TransferToAgentToolConfig'
            - $ref: '#/components/schemas/TransferToNumberToolConfigOutput'
            - $ref: '#/components/schemas/PlayDTMFToolConfig'
            - $ref: '#/components/schemas/VoicemailDetectionToolConfig'
          title: Params
          discriminator:
            propertyName: system_tool_type
            mapping:
              end_call:
                $ref: '#/components/schemas/EndCallToolConfig'
              language_detection:
                $ref: '#/components/schemas/LanguageDetectionToolConfig'
              play_keypad_touch_tone:
                $ref: '#/components/schemas/PlayDTMFToolConfig'
              skip_turn:
                $ref: '#/components/schemas/SkipTurnToolConfig'
              transfer_to_agent:
                $ref: '#/components/schemas/TransferToAgentToolConfig'
              transfer_to_number:
                $ref: '#/components/schemas/TransferToNumberToolConfigOutput'
              voicemail_detection:
                $ref: '#/components/schemas/VoicemailDetectionToolConfig'
      type: object
      required:
        - name
        - params
      title: SystemToolConfig
      description: >-
        A system tool is a tool that is used to call a system method in the
        server
    MCPToolConfigOutput:
      properties:
        type:
          type: string
          const: mcp
          title: Type
          description: The type of tool
          default: mcp
        name:
          type: string
          pattern: ^[a-zA-Z0-9_-]{1,64}$
          title: Name
        description:
          type: string
          title: Description
          description: Description of when the tool should be used and what it does.
        response_timeout_secs:
          type: integer
          title: Response Timeout Secs
          description: Maximum time in seconds to wait for tool completion
          default: 20
        disable_interruptions:
          type: boolean
          title: Disable Interruptions
          description: If true, user cannot interrupt while tool runs
          default: false
        force_pre_tool_speech:
          type: boolean
          title: Force Pre Tool Speech
          description: If true, agent speaks before tool call
          default: false
        assignments:
          items:
            $ref: '#/components/schemas/DynamicVariableAssignment'
          type: array
          title: Assignments
          description: Configuration for extracting values from tool responses
        tool_call_sound:
          anyOf:
            - $ref: '#/components/schemas/ToolCallSoundType'
            - type: 'null'
          description: Sound to play during tool execution
        tool_call_sound_behavior:
          $ref: '#/components/schemas/ToolCallSoundBehavior'
          description: When to play tool call sound
          default: auto
        integration_type:
          $ref: '#/components/schemas/IntegrationType'
          description: The type of MCP tool
        parameters:
          anyOf:
            - $ref: '#/components/schemas/ObjectJsonSchemaPropertyOutput'
            - type: 'null'
          description: Schema for parameters the LLM needs to provide
        approval_policy:
          $ref: '#/components/schemas/MCPApprovalPolicy'
          description: The approval policy for the MCP tool
          default: require_approval_all
        mcp_tool_name:
          type: string
          title: Mcp Tool Name
          description: The name of the MCP tool to call
        mcp_tool_description:
          type: string
          title: Mcp Tool Description
          description: The description of the MCP tool
        mcp_server_id:
          type: string
          title: Mcp Server Id
          description: The ID of the MCP server to call
        mcp_server_name:
          type: string
          title: Mcp Server Name
          description: The name of the MCP server to call
        mcp_input_schema:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Mcp Input Schema
          description: Original inputSchema dict for consistent hashing (pure MCP format)
        execution_mode:
          $ref: '#/components/schemas/ToolExecutionMode'
          description: When and how the tool executes
          default: immediate
      type: object
      required:
        - name
        - description
        - integration_type
        - mcp_tool_name
        - mcp_tool_description
        - mcp_server_id
        - mcp_server_name
      title: MCPToolConfig
      description: MCP tool configuration for calling MCP servers (Output)
    ApiIntegrationWebhookToolConfigOutput:
      properties:
        type:
          type: string
          const: api_integration_webhook
          title: Type
          description: The type of tool
          default: api_integration_webhook
        name:
          type: string
          pattern: ^[a-zA-Z0-9_-]{1,64}$
          title: Name
        description:
          type: string
          title: Description
          description: Description of when the tool should be used
        response_timeout_secs:
          type: integer
          maximum: 120
          minimum: 5
          title: Response Timeout Secs
          description: Maximum time in seconds to wait for tool completion
          default: 20
        disable_interruptions:
          type: boolean
          title: Disable Interruptions
          description: If true, user cannot interrupt while tool runs
          default: false
        force_pre_tool_speech:
          type: boolean
          title: Force Pre Tool Speech
          description: If true, agent speaks before tool call
          default: false
        assignments:
          items:
            $ref: '#/components/schemas/DynamicVariableAssignment'
          type: array
          title: Assignments
          description: Configuration for extracting values from tool responses
        tool_call_sound:
          anyOf:
            - $ref: '#/components/schemas/ToolCallSoundType'
            - type: 'null'
          description: Sound to play during tool execution
        tool_call_sound_behavior:
          $ref: '#/components/schemas/ToolCallSoundBehavior'
          description: When to play tool call sound
          default: auto
        dynamic_variables:
          anyOf:
            - $ref: '#/components/schemas/DynamicVariablesConfig'
            - type: 'null'
          description: Configuration for dynamic variables
        execution_mode:
          $ref: '#/components/schemas/ToolExecutionMode'
          description: When and how the tool executes
          default: immediate
        tool_version:
          type: string
          title: Tool Version
          description: Version of the API integration tool
          default: 1.0.0
        api_integration_id:
          type: string
          title: Api Integration Id
          description: The API integration ID
        api_integration_connection_id:
          type: string
          title: Api Integration Connection Id
          description: The API integration connection ID
        api_schema_overrides:
          anyOf:
            - $ref: '#/components/schemas/ApiIntegrationWebhookOverridesInput'
            - type: 'null'
          description: User overrides applied on top of the base api_schema
      type: object
      required:
        - name
        - description
        - api_integration_id
        - api_integration_connection_id
      title: ApiIntegrationWebhookToolConfig
      description: API Integration webhook tool configuration (Output)
    ResourceAccessInfo:
      properties:
        is_creator:
          type: boolean
          title: Is Creator
          description: Whether the user making the request is the creator of the resource
        creator_name:
          type: string
          title: Creator Name
          description: Name of the resource's creator
        creator_email:
          type: string
          title: Creator Email
          description: Email of the resource's creator
        role:
          $ref: '#/components/schemas/ResourceRole'
          description: The role of the user making the request
      type: object
      required:
        - is_creator
        - creator_name
        - creator_email
        - role
      title: ResourceAccessInfo
      description: Access information for a resource
    ToolUsageStatsResponseModel:
      properties:
        total_calls:
          type: integer
          title: Total Calls
          description: The total number of calls to the tool
          default: 0
        avg_latency_secs:
          anyOf:
            - type: number
            - type: 'null'
          title: Avg Latency Secs
          description: Average latency in seconds
      type: object
      title: ToolUsageStatsResponseModel
      description: Usage statistics for a tool
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
    DynamicVariableAssignment:
      properties:
        source:
          type: string
          const: response
          title: Source
          description: >-
            The source to extract the value from. Currently only 'response' is
            supported.
          default: response
        dynamic_variable:
          type: string
          title: Dynamic Variable
          description: The name of the dynamic variable to assign the extracted value to
        value_path:
          type: string
          title: Value Path
          description: >-
            Dot notation path to extract the value from the source (e.g.,
            'user.name' or 'data.0.id')
        sanitize:
          type: boolean
          title: Sanitize
          description: >-
            If true, this assignment's value will be removed from the tool
            response before sending to the LLM and transcript, but still
            processed for variable assignment.
          default: false
      type: object
      required:
        - dynamic_variable
        - value_path
      title: DynamicVariableAssignment
      description: >-
        Configuration for extracting values from tool responses and assigning
        them to dynamic variables.
      example:
        dynamic_variable: user_name
        sanitize: false
        source: response
        value_path: user.name
    ToolCallSoundType:
      type: string
      enum:
        - typing
        - elevator1
        - elevator2
        - elevator3
        - elevator4
      title: ToolCallSoundType
      description: Predefined sounds to play during tool execution
    ToolCallSoundBehavior:
      type: string
      enum:
        - auto
        - always
      title: ToolCallSoundBehavior
      description: 'Determines how the tool call sound should be played (default: auto).'
    ToolErrorHandlingMode:
      type: string
      enum:
        - auto
        - summarized
        - passthrough
        - hide
      title: ToolErrorHandlingMode
      description: >-
        Controls how tool errors are processed before being shared with the
        agent (default: auto).
    DynamicVariablesConfig:
      properties:
        dynamic_variable_placeholders:
          additionalProperties:
            anyOf:
              - type: string
              - type: integer
              - type: number
              - type: boolean
          type: object
          title: Dynamic Variable Placeholders
          description: A dictionary of dynamic variable placeholders and their values
      type: object
      title: DynamicVariablesConfig
      description: >-
        Configuration for dynamic variables with placeholder values.


        Variable naming rules:

        - system__* prefix is RESERVED for platform-generated variables

        - secret__* prefix is allowed (filtered from LLM prompts, available for
        tool headers)

        - All other names are user-defined and available everywhere
      example:
        dynamic_variable_placeholders:
          user_name: John Doe
    ToolExecutionMode:
      type: string
      enum:
        - immediate
        - post_tool_speech
        - async
      title: ToolExecutionMode
      description: 'Determines when and how a tool executes (default: immediate).'
    WebhookToolApiSchemaConfigOutput:
      properties:
        request_headers:
          anyOf:
            - additionalProperties:
                anyOf:
                  - type: string
                  - $ref: '#/components/schemas/ConvAISecretLocator'
                  - $ref: '#/components/schemas/ConvAIDynamicVariable'
                  - $ref: '#/components/schemas/ConvAIEnvVarLocator'
              type: object
            - type: 'null'
          title: Request Headers
          description: Headers that should be included in the request
        url:
          type: string
          title: Url
          description: >-
            The URL that the webhook will be sent to. May include path
            parameters, e.g. https://example.com/agents/{agent_id}
        method:
          $ref: '#/components/schemas/HttpMethod'
          description: The HTTP method to use for the webhook
          default: GET
        path_params_schema:
          anyOf:
            - additionalProperties:
                $ref: '#/components/schemas/LiteralJsonSchemaProperty'
              type: object
            - type: 'null'
          title: Path Params Schema
          description: >-
            Schema for path parameters, if any. The keys should match the
            placeholders in the URL.
        query_params_schema:
          anyOf:
            - $ref: '#/components/schemas/QueryParamsJsonSchema'
            - type: 'null'
          description: >-
            Schema for any query params, if any. These will be added to the end
            of the URL as query params. Note: properties in a query param must
            all be literal types.
        request_body_schema:
          anyOf:
            - $ref: '#/components/schemas/ObjectJsonSchemaPropertyOutput'
            - type: 'null'
          description: >-
            Schema for the body parameters, if any. Used for POST/PATCH/PUT
            requests. The schema should be an object which will be sent as the
            JSON body.
        content_type:
          $ref: '#/components/schemas/ContentType'
          description: >-
            Content type for the request body. Only applies to POST/PUT/PATCH
            requests.
          default: application/json
        auth_connection:
          anyOf:
            - $ref: '#/components/schemas/AuthConnectionLocator'
            - $ref: '#/components/schemas/EnvironmentAuthConnectionLocator'
            - type: 'null'
          title: Auth Connection
          description: Optional auth connection to use for authentication with this webhook
      type: object
      required:
        - url
      title: WebhookToolApiSchemaConfig
      description: Configuration for the webhook API call (Output)
      example:
        method: GET
        path_params_schema:
          agent_id:
            type: string
        query_params_schema:
          properties:
            param1:
              type: string
        request_body_schema:
          properties:
            param1:
              type: string
          type: object
        request_headers:
          Authorization: Bearer {api_key}
        url: https://example.com/agents/{agent_id}
    ObjectJsonSchemaPropertyOutput:
      properties:
        type:
          type: string
          const: object
          title: Type
          default: object
        description:
          type: string
          title: Description
          default: ''
        required:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Required
        properties:
          anyOf:
            - additionalProperties:
                anyOf:
                  - $ref: '#/components/schemas/LiteralJsonSchemaProperty'
                  - $ref: '#/components/schemas/ObjectJsonSchemaPropertyOutput'
                  - $ref: '#/components/schemas/ArrayJsonSchemaPropertyOutput'
              type: object
            - type: 'null'
          title: Properties
        required_constraints:
          anyOf:
            - $ref: '#/components/schemas/RequiredConstraints'
            - type: 'null'
      additionalProperties: false
      type: object
      title: ObjectJsonSchemaProperty
      description: Schema for object properties (Output).
    EndCallToolConfig:
      properties:
        system_tool_type:
          type: string
          const: end_call
          title: System Tool Type
          default: end_call
      type: object
      title: EndCallToolConfig
      description: Configuration for end_call system tool
    LanguageDetectionToolConfig:
      properties:
        system_tool_type:
          type: string
          const: language_detection
          title: System Tool Type
          default: language_detection
      type: object
      title: LanguageDetectionToolConfig
      description: Configuration for language_detection system tool
    SkipTurnToolConfig:
      properties:
        system_tool_type:
          type: string
          const: skip_turn
          title: System Tool Type
          default: skip_turn
      type: object
      title: SkipTurnToolConfig
      description: >-
        Allows the agent to explicitly skip its turn.


        This tool should be invoked by the LLM when the user indicates they
        would like

        to think or take a short pause before continuing the conversation.
    TransferToAgentToolConfig:
      properties:
        system_tool_type:
          type: string
          const: transfer_to_agent
          title: System Tool Type
          default: transfer_to_agent
        transfers:
          items:
            $ref: '#/components/schemas/AgentTransfer'
          type: array
          title: Transfers
      type: object
      required:
        - transfers
      title: TransferToAgentToolConfig
      description: Configuration for transfer_to_agent system tool
    TransferToNumberToolConfigOutput:
      properties:
        system_tool_type:
          type: string
          const: transfer_to_number
          title: System Tool Type
          default: transfer_to_number
        transfers:
          items:
            $ref: '#/components/schemas/PhoneNumberTransfer'
          type: array
          title: Transfers
        enable_client_message:
          type: boolean
          title: Enable Client Message
          description: >-
            Whether to play a message to the client while they wait for
            transfer. Defaults to true for backward compatibility.
          default: true
      type: object
      required:
        - transfers
      title: TransferToNumberToolConfig
      description: Configuration for transfer_to_number system tool (Output)
    PlayDTMFToolConfig:
      properties:
        system_tool_type:
          type: string
          const: play_keypad_touch_tone
          title: System Tool Type
          default: play_keypad_touch_tone
        use_out_of_band_dtmf:
          type: boolean
          title: Use Out Of Band Dtmf
          description: >-
            If true, send DTMF tones out-of-band using RFC 4733 (useful for SIP
            calls only). If false, send DTMF as in-band audio tones (works for
            all call types).
          default: true
        suppress_turn_after_dtmf:
          type: boolean
          title: Suppress Turn After Dtmf
          description: >-
            If true, the agent will not generate further speech after playing
            DTMF tones. This prevents the agent's speech from interfering with
            IVR systems.
          default: false
      type: object
      title: PlayDTMFToolConfig
      description: |-
        Allows the agent to play DTMF tones during a phone call.

        This tool can be used to interact with automated phone systems, such as
        navigating phone menus, entering extensions, or inputting numeric codes.
    VoicemailDetectionToolConfig:
      properties:
        system_tool_type:
          type: string
          const: voicemail_detection
          title: System Tool Type
          default: voicemail_detection
        voicemail_message:
          anyOf:
            - type: string
            - type: 'null'
          title: Voicemail Message
          description: >-
            Optional message to leave on voicemail when detected. If not
            provided, the call will end immediately when voicemail is detected.
            Supports dynamic variables.
      type: object
      title: VoicemailDetectionToolConfig
      description: >-
        Allows the agent to detect when a voicemail system is encountered.


        This tool should be invoked by the LLM when it detects that the call has
        been

        answered by a voicemail system rather than a human.
    IntegrationType:
      type: string
      enum:
        - mcp_server
        - mcp_integration
      title: IntegrationType
      description: Type of MCP integration
    MCPApprovalPolicy:
      type: string
      enum:
        - auto_approve_all
        - require_approval_all
        - require_approval_per_tool
      title: MCPApprovalPolicy
      description: Defines the MCP server-level approval policy for tool execution
    ApiIntegrationWebhookOverridesInput:
      properties:
        path_params_schema:
          anyOf:
            - additionalProperties:
                $ref: '#/components/schemas/LiteralOverride'
              type: object
            - type: 'null'
          title: Path Params Schema
        query_params_schema:
          anyOf:
            - $ref: '#/components/schemas/QueryOverride'
            - type: 'null'
        request_body_schema:
          anyOf:
            - $ref: '#/components/schemas/ObjectOverrideInput'
            - type: 'null'
        request_headers:
          anyOf:
            - additionalProperties:
                anyOf:
                  - type: string
                  - $ref: '#/components/schemas/ConvAIDynamicVariable'
              type: object
            - type: 'null'
          title: Request Headers
      type: object
      title: ApiIntegrationWebhookOverrides
      description: >-
        A whitelist of fields that can be overridden by users when configuring
        an API Integration Webhook Tool
    ResourceRole:
      type: string
      enum:
        - admin
        - editor
        - commenter
        - viewer
      title: ResourceRole
      description: Role for resource access control
    ConvAISecretLocator:
      properties:
        secret_id:
          type: string
          title: Secret Id
      type: object
      required:
        - secret_id
      title: ConvAISecretLocator
      example:
        secret_id: sec_workspace_abc123
    ConvAIDynamicVariable:
      properties:
        variable_name:
          type: string
          title: Variable Name
          description: The variable name
      type: object
      required:
        - variable_name
      title: ConvAIDynamicVariable
      description: Used to reference a dynamic variable.
      example:
        variable_name: customer_id
    ConvAIEnvVarLocator:
      properties:
        env_var_label:
          type: string
          title: Env Var Label
          description: The environment variable label
      type: object
      required:
        - env_var_label
      title: ConvAIEnvVarLocator
      description: Used to reference an environment variable by label.
      example:
        env_var_label: MY_API_TOKEN
    HttpMethod:
      type: string
      enum:
        - GET
        - POST
        - PUT
        - PATCH
        - DELETE
      title: HttpMethod
      description: HTTP methods for webhook tools
    LiteralJsonSchemaProperty:
      properties:
        type:
          type: string
          enum:
            - boolean
            - string
            - integer
            - number
          title: Type
        description:
          type: string
          title: Description
          description: >-
            The description of the property. When set, the LLM will provide the
            value based on this description. Mutually exclusive with
            dynamic_variable, is_system_provided, and constant_value.
          default: ''
        enum:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Enum
          description: List of allowed string values for string type parameters
        is_system_provided:
          type: boolean
          title: Is System Provided
          description: >-
            If true, the value will be populated by the system at runtime. Used
            by API Integration Webhook tools for templating. Mutually exclusive
            with description, dynamic_variable, and constant_value.
          default: false
        dynamic_variable:
          type: string
          title: Dynamic Variable
          description: >-
            The name of the dynamic variable to use for this property's value.
            Mutually exclusive with description, is_system_provided, and
            constant_value.
          default: ''
        constant_value:
          anyOf:
            - type: string
            - type: integer
            - type: number
            - type: boolean
            - type: 'null'
          title: Constant Value
          description: >-
            A constant value to use for this property. Mutually exclusive with
            description, dynamic_variable, and is_system_provided.
      additionalProperties: false
      type: object
      required:
        - type
      title: LiteralJsonSchemaProperty
      example:
        description: A user-provided message
        type: string
    QueryParamsJsonSchema:
      properties:
        properties:
          additionalProperties:
            $ref: '#/components/schemas/LiteralJsonSchemaProperty'
          type: object
          minProperties: 1
          title: Properties
        required:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Required
      additionalProperties: false
      type: object
      required:
        - properties
      title: QueryParamsJsonSchema
      description: Schema for query parameters (at least one property).
      example:
        properties:
          param1:
            type: string
        required: []
    ContentType:
      type: string
      enum:
        - application/json
        - application/x-www-form-urlencoded
      title: ContentType
      description: Content type for webhook request body
    AuthConnectionLocator:
      properties:
        auth_connection_id:
          type: string
          title: Auth Connection Id
          description: The auth connection ID
      type: object
      required:
        - auth_connection_id
      title: AuthConnectionLocator
      description: >-
        Used to reference an auth connection from the workspace's auth
        connection store.
      example:
        auth_connection_id: conn_oauth_google_01
    EnvironmentAuthConnectionLocator:
      properties:
        env_var_label:
          type: string
          title: Env Var Label
          description: Environment variable label
      type: object
      required:
        - env_var_label
      title: EnvironmentAuthConnectionLocator
      description: |-
        References an environment variable of type 'auth_connection' by label.

        At runtime, resolves to the auth connection for the current environment,
        falling back to the default environment.
      example:
        env_var_label: STAGING_OAUTH_CONN
    ArrayJsonSchemaPropertyOutput:
      properties:
        type:
          type: string
          const: array
          title: Type
          default: array
        description:
          type: string
          title: Description
          default: ''
        items:
          anyOf:
            - $ref: '#/components/schemas/LiteralJsonSchemaProperty'
            - $ref: '#/components/schemas/ObjectJsonSchemaPropertyOutput'
            - $ref: '#/components/schemas/ArrayJsonSchemaPropertyOutput'
          title: Items
      additionalProperties: false
      type: object
      required:
        - items
      title: ArrayJsonSchemaProperty
      description: Schema for array properties (Output).
    RequiredConstraints:
      properties:
        any_of:
          anyOf:
            - items:
                $ref: '#/components/schemas/RequiredConstraint'
              type: array
            - type: 'null'
          title: Any Of
        all_of:
          anyOf:
            - items:
                $ref: '#/components/schemas/RequiredConstraint'
              type: array
            - type: 'null'
          title: All Of
      additionalProperties: false
      type: object
      title: RequiredConstraints
      description: >-
        Wrapper for anyOf/allOf composition constraints scoped to required
        fields.
    AgentTransfer:
      properties:
        agent_id:
          type: string
          title: Agent Id
        condition:
          type: string
          title: Condition
        delay_ms:
          type: integer
          title: Delay Ms
          default: 0
        transfer_message:
          anyOf:
            - type: string
            - type: 'null'
          title: Transfer Message
        enable_transferred_agent_first_message:
          type: boolean
          title: Enable Transferred Agent First Message
          default: false
        is_workflow_node_transfer:
          type: boolean
          title: Is Workflow Node Transfer
          default: false
      type: object
      required:
        - agent_id
        - condition
      title: AgentTransfer
      description: Configuration for transferring to another agent
    PhoneNumberTransfer:
      properties:
        custom_sip_headers:
          items:
            oneOf:
              - $ref: '#/components/schemas/CustomSIPHeader'
              - $ref: '#/components/schemas/CustomSIPHeaderWithDynamicVariable'
            discriminator:
              propertyName: type
              mapping:
                dynamic:
                  $ref: '#/components/schemas/CustomSIPHeaderWithDynamicVariable'
                static:
                  $ref: '#/components/schemas/CustomSIPHeader'
          type: array
          maxItems: 20
          title: Custom Sip Headers
          description: >-
            Custom SIP headers to include when transferring the call. Each
            header can be either a static value or a dynamic variable reference.
        transfer_destination:
          anyOf:
            - $ref: '#/components/schemas/PhoneNumberTransferDestination'
            - $ref: '#/components/schemas/SIPUriTransferDestination'
            - $ref: >-
                #/components/schemas/PhoneNumberDynamicVariableTransferDestination
            - $ref: '#/components/schemas/SIPUriDynamicVariableTransferDestination'
            - type: 'null'
          title: Transfer Destination
        phone_number:
          anyOf:
            - type: string
            - type: 'null'
          title: Phone Number
          description: >-
            Legacy root-level E.164. Prefer `transfer_destination` with type
            `phone`. Still accepted when loading older agent tool configs.
        condition:
          type: string
          title: Condition
        transfer_type:
          $ref: '#/components/schemas/TransferTypeEnum'
          default: conference
        post_dial_digits:
          anyOf:
            - oneOf:
                - $ref: '#/components/schemas/PostDialDigitsStatic'
                - $ref: '#/components/schemas/PostDialDigitsDynamicVariable'
              discriminator:
                propertyName: type
                mapping:
                  dynamic:
                    $ref: '#/components/schemas/PostDialDigitsDynamicVariable'
                  static:
                    $ref: '#/components/schemas/PostDialDigitsStatic'
            - type: 'null'
          title: Post Dial Digits
          description: >-
            DTMF digits to send after call connects (e.g., 'ww1234' for
            extension). Can be either a static value or a dynamic variable
            reference. Use 'w' for 0.5s pause. Only supported for Twilio
            transfers.
      type: object
      required:
        - condition
      title: PhoneNumberTransfer
      description: >-
        Configuration for transferring to a phone number.


        Prefer `transfer_destination` (discriminated: phone, sip_uri, dynamic
        variants).

        `phone_number` is only for reading legacy stored rules; new configs
        should use `transfer_destination`.
    LiteralOverride:
      properties:
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        dynamic_variable:
          anyOf:
            - type: string
            - type: 'null'
          title: Dynamic Variable
        constant_value:
          anyOf:
            - type: string
            - type: integer
            - type: number
            - type: boolean
            - type: 'null'
          title: Constant Value
      type: object
      title: LiteralOverride
      description: Override for literal property values
    QueryOverride:
      properties:
        properties:
          anyOf:
            - additionalProperties:
                $ref: '#/components/schemas/LiteralOverride'
              type: object
            - type: 'null'
          title: Properties
        required:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Required
      type: object
      title: QueryOverride
      description: Override for query parameters
    ObjectOverrideInput:
      properties:
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        properties:
          anyOf:
            - additionalProperties:
                anyOf:
                  - $ref: '#/components/schemas/LiteralOverride'
                  - $ref: '#/components/schemas/ObjectOverrideInput'
              type: object
            - type: 'null'
          title: Properties
        required:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Required
      type: object
      title: ObjectOverride
      description: Override for object properties (Input)
    RequiredConstraint:
      properties:
        required:
          items:
            type: string
          type: array
          title: Required
          description: Field names that must appear together
      additionalProperties: false
      type: object
      required:
        - required
      title: RequiredConstraint
      description: A set of fields that must all be present to satisfy this constraint.
    CustomSIPHeader:
      properties:
        type:
          type: string
          const: static
          title: Type
          description: Header type discriminator
          default: static
        key:
          type: string
          maxLength: 64
          minLength: 1
          pattern: ^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$
          title: Key
          description: The SIP header name (e.g., 'X-Customer-ID')
        value:
          type: string
          maxLength: 512
          minLength: 1
          pattern: ^[\x09\x20-\x7E]+$
          title: Value
          description: The header value
      type: object
      required:
        - key
        - value
      title: CustomSIPHeader
      description: Custom SIP header for phone transfers with a static (validated) value.
    CustomSIPHeaderWithDynamicVariable:
      properties:
        type:
          type: string
          const: dynamic
          title: Type
          description: Header type discriminator
        key:
          type: string
          maxLength: 64
          minLength: 1
          pattern: ^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$
          title: Key
          description: The SIP header name (e.g., 'X-Customer-ID')
        value:
          type: string
          minLength: 1
          title: Value
          description: The dynamic variable name to resolve
      type: object
      required:
        - type
        - key
        - value
      title: CustomSIPHeaderWithDynamicVariable
      description: >-
        Custom SIP header for phone transfers with a dynamic variable reference.


        The value is a variable name that will be resolved at runtime.

        Value is not validated here since it will be substituted with actual
        value later.
    PhoneNumberTransferDestination:
      properties:
        type:
          type: string
          const: phone
          title: Type
          default: phone
        phone_number:
          type: string
          title: Phone Number
      type: object
      required:
        - phone_number
      title: PhoneNumberTransferDestination
      description: Transfer to a static phone number
    SIPUriTransferDestination:
      properties:
        type:
          type: string
          const: sip_uri
          title: Type
          default: sip_uri
        sip_uri:
          type: string
          title: Sip Uri
      type: object
      required:
        - sip_uri
      title: SIPUriTransferDestination
      description: Transfer to a static SIP URI
    PhoneNumberDynamicVariableTransferDestination:
      properties:
        type:
          type: string
          const: phone_dynamic_variable
          title: Type
          default: phone_dynamic_variable
        phone_number:
          type: string
          title: Phone Number
      type: object
      required:
        - phone_number
      title: PhoneNumberDynamicVariableTransferDestination
      description: Transfer to a phone number from dynamic variable
    SIPUriDynamicVariableTransferDestination:
      properties:
        type:
          type: string
          const: sip_uri_dynamic_variable
          title: Type
          default: sip_uri_dynamic_variable
        sip_uri:
          type: string
          title: Sip Uri
      type: object
      required:
        - sip_uri
      title: SIPUriDynamicVariableTransferDestination
      description: Transfer to a SIP URI from dynamic variable
    TransferTypeEnum:
      type: string
      enum:
        - blind
        - conference
        - sip_refer
      title: TransferTypeEnum
      description: Transfer type for phone number transfers
    PostDialDigitsStatic:
      properties:
        type:
          type: string
          const: static
          title: Type
          default: static
        value:
          type: string
          minLength: 1
          pattern: ^[0-9*#wW]*$
          title: Value
          description: >-
            DTMF digits to send after call connects (e.g., 'ww1234' for
            extension)
      type: object
      required:
        - value
      title: PostDialDigitsStatic
      description: Literal DTMF digits sent after the transfer leg connects.
    PostDialDigitsDynamicVariable:
      properties:
        type:
          type: string
          const: dynamic
          title: Type
          default: dynamic
        value:
          type: string
          minLength: 1
          title: Value
          description: The dynamic variable name to resolve
      type: object
      required:
        - value
      title: PostDialDigitsDynamicVariable
      description: Post-dial digit string supplied by a dynamic variable at runtime.
  securitySchemes:
    APIKeyHeader:
      type: apiKey
      description: API key for programmatic access
      in: header
      name: x-api-key
    HTTPBearer:
      type: http
      description: JWT Bearer token for dashboard access
      scheme: bearer

````