Syllable Tools API

Operations related to tool configuration. A tool is a function that an agent can call to perform actions like accessing databases, making API calls, or processing data. For an agent to have access to a tool, the prompt associated with that agent should be linked to the tool and include instructions to use it. For more information, see [Console docs](https://docs.syllable.ai/Resources/Tools).

OpenAPI Specification

syllable-tools-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: SyllableSDK Tools API
  description: "\n# Syllable Platform SDK\n\nSyllable SDK gives you the power of awesome AI agentry. \U0001F680\n\n## Overview\n\nThe Syllable SDK provides a comprehensive set of tools and APIs to integrate powerful AI\ncapabilities into your communication applications. Whether you're building phone agents, chatbots,\nvirtual assistants, or any other AI-driven solutions, Syllable SDK has got you covered.\n\n## Features\n\n- **Agent Configuration**: Create and manage agents that can interact with users across various \nchannels.\n- **Channel Management**: Configure channels like SMS, web chat, and more to connect agents with \nusers.\n- **Custom Messages**: Set up custom messages that agents can deliver as greetings or responses.\n- **Conversations**: Track and manage conversations between users and agents, including session \nmanagement.\n- **Tools and Workflows**: Leverage tools and workflows to enhance agent capabilities, such as data \nprocessing and API calls.\n- **Data Sources**: Integrate data sources to provide agents with additional context and \ninformation.\n- **Insights and Analytics**: Analyze conversations and sessions to gain insights into user \ninteractions.\n- **Permissions and Security**: Manage permissions to control access to various features and \nfunctionalities.\n- **Language Support**: Define language groups to enable multilingual support for agents.\n- **Outbound Campaigns**: Create and manage outbound communication campaigns to reach users \neffectively.\n- **Session Labels**: Label sessions with evaluations of quality and descriptions of issues \nencountered.\n- **Incident Management**: Track and manage incidents related to agent interactions.\n"
  version: 0.0.3
servers:
- url: https://api.syllable.cloud
  description: API server
tags:
- name: tools
  description: Operations related to tool configuration. A tool is a function that an           agent can call to perform actions like accessing databases, making API calls, or           processing data. For an agent to have access to a tool, the prompt associated with that           agent should be linked to the tool and include instructions to use it. For more           information, see [Console docs](https://docs.syllable.ai/Resources/Tools).
paths:
  /api/v1/tools/:
    get:
      tags:
      - tools
      summary: Tool List
      description: List the existing tools
      operationId: tool_list
      security:
      - APIKeyHeader: []
      parameters:
      - name: page
        in: query
        required: false
        schema:
          anyOf:
          - type: integer
            minimum: 0
          - type: 'null'
          description: The page number from which to start (0-based)
          examples:
          - 0
          default: 0
          title: Page
        description: The page number from which to start (0-based)
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          minimum: 0
          description: The maximum number of items to return
          examples:
          - 25
          default: 25
          title: Limit
        description: The maximum number of items to return
      - name: search_fields
        in: query
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/ToolProperties'
          description: String names of fields to search. Correspond by index to search field values
          examples:
          - name
          default: []
          title: Search Fields
        description: String names of fields to search. Correspond by index to search field values
      - name: search_field_values
        in: query
        required: false
        schema:
          type: array
          items:
            type: string
          description: Values of fields to search. Correspond by index to search fields. Unless field name contains "list", an individual search field value cannot be a list
          examples:
          - Some Object Name
          default: []
          title: Search Field Values
        description: Values of fields to search. Correspond by index to search fields. Unless field name contains "list", an individual search field value cannot be a list
      - name: order_by
        in: query
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/ToolProperties'
          - type: 'null'
          description: The field whose value should be used to order the results
          examples:
          - name
          title: Order By
        description: The field whose value should be used to order the results
      - name: order_by_direction
        in: query
        required: false
        schema:
          anyOf:
          - $ref: '#/components/schemas/OrderByDirection'
          - type: 'null'
          description: The direction in which to order the results
          title: Order By Direction
        description: The direction in which to order the results
      - name: fields
        in: query
        required: false
        schema:
          anyOf:
          - type: array
            items:
              $ref: '#/components/schemas/ToolProperties'
          - type: 'null'
          description: The fields to include in the response
          default: []
          title: Fields
        description: The fields to include in the response
      - name: start_datetime
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: The start datetime for filtering results
          examples:
          - '2023-01-01T00:00:00Z'
          title: Start Datetime
        description: The start datetime for filtering results
      - name: end_datetime
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: The end datetime for filtering results
          examples:
          - '2024-01-01T00:00:00Z'
          title: End Datetime
        description: The end datetime for filtering results
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListResponse_ToolResponse_'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      x-codeSamples:
      - lang: python
        label: Python (SDK)
        source: "import os\nfrom syllable_sdk import SyllableSDK, models\n\n\nwith SyllableSDK(\n    api_key_header=os.getenv(\"SYLLABLESDK_API_KEY_HEADER\", \"\"),\n) as ss_client:\n\n    res = ss_client.tools.list(page=0, limit=25, search_fields=[\n        models.ToolProperties.NAME,\n    ], search_field_values=[\n        \"Some Object Name\",\n    ], start_datetime=\"2023-01-01T00:00:00Z\", end_datetime=\"2024-01-01T00:00:00Z\")\n\n    # Handle response\n    print(res)"
      - lang: typescript
        label: Typescript (SDK)
        source: "import { SyllableSDK } from \"syllable-sdk\";\n\nconst syllableSDK = new SyllableSDK({\n  apiKeyHeader: process.env[\"SYLLABLESDK_API_KEY_HEADER\"] ?? \"\",\n});\n\nasync function run() {\n  const result = await syllableSDK.tools.list({\n    page: 0,\n    searchFields: [\n      \"name\",\n    ],\n    searchFieldValues: [\n      \"Some Object Name\",\n    ],\n    startDatetime: \"2023-01-01T00:00:00Z\",\n    endDatetime: \"2024-01-01T00:00:00Z\",\n  });\n\n  console.log(result);\n}\n\nrun();"
    post:
      tags:
      - tools
      summary: Create Tool
      description: Create a new tool
      operationId: tool_create
      security:
      - APIKeyHeader: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ToolCreateRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ToolResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      x-codeSamples:
      - lang: python
        label: Python (SDK)
        source: "import os\nfrom syllable_sdk import SyllableSDK, models\n\n\nwith SyllableSDK(\n    api_key_header=os.getenv(\"SYLLABLESDK_API_KEY_HEADER\", \"\"),\n) as ss_client:\n\n    res = ss_client.tools.create(request=models.ToolCreateRequest(\n        name=\"Weather Fetcher\",\n        definition=models.ToolDefinition(\n            type=models.ToolDefinitionType.ENDPOINT,\n            tool=models.InternalTool(\n                function=models.ToolFunction(\n                    name=\"get_weather\",\n                    description=\"Get the weather for a city\",\n                    parameters={\n\n                    },\n                ),\n            ),\n            endpoint=models.ToolHTTPEndpoint(\n                url=\"https://api.example.com\",\n                method=models.ToolHTTPMethod.POST,\n                argument_location=models.ToolArgumentLocation.QUERY,\n                timeout=45,\n            ),\n            context=models.Context(\n                task=[],\n            ),\n            defaults={\n                \"key\": {\n                    \"transform\": {\n                        \"action\": \"default\",\n                        \"when\": {\n                            \"key\": \"key\",\n                            \"value\": \"value\",\n                            \"operator\": \"eq\",\n                        },\n                    },\n                },\n            },\n            static_parameters=[\n                models.StaticToolParameter(\n                    name=\"temperature_unit\",\n                    description=\"Whether the temperature information should be fetched in Celsius or Fahrenheit\",\n                    required=False,\n                    type=models.StaticToolParameterType.STRING,\n                    default=\"fahrenheit\",\n                ),\n            ],\n        ),\n        service_id=1,\n    ))\n\n    # Handle response\n    print(res)"
      - lang: typescript
        label: Typescript (SDK)
        source: "import { SyllableSDK } from \"syllable-sdk\";\n\nconst syllableSDK = new SyllableSDK({\n  apiKeyHeader: process.env[\"SYLLABLESDK_API_KEY_HEADER\"] ?? \"\",\n});\n\nasync function run() {\n  const result = await syllableSDK.tools.create({\n    name: \"Weather Fetcher\",\n    definition: {\n      type: \"endpoint\",\n      tool: {\n        function: {\n          name: \"get_weather\",\n          description: \"Get the weather for a city\",\n          parameters: {\n\n          },\n        },\n      },\n      endpoint: {\n        url: \"https://api.example.com\",\n        method: \"post\",\n        argumentLocation: \"path\",\n        timeout: 45,\n      },\n      context: {\n        task: [],\n      },\n      defaults: \"<value>\",\n      staticParameters: [\n        {\n          name: \"temperature_unit\",\n          description: \"Whether the temperature information should be fetched in Celsius or Fahrenheit\",\n          required: false,\n          type: \"string\",\n          default: \"fahrenheit\",\n        },\n      ],\n    },\n    serviceId: 1,\n  });\n\n  console.log(result);\n}\n\nrun();"
    put:
      tags:
      - tools
      summary: Update Tool
      description: Update an existing tool
      operationId: tool_update
      security:
      - APIKeyHeader: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ToolUpdateRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ToolResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      x-codeSamples:
      - lang: python
        label: Python (SDK)
        source: "import os\nfrom syllable_sdk import SyllableSDK, models\n\n\nwith SyllableSDK(\n    api_key_header=os.getenv(\"SYLLABLESDK_API_KEY_HEADER\", \"\"),\n) as ss_client:\n\n    res = ss_client.tools.update(request=models.ToolUpdateRequest(\n        name=\"Weather Fetcher\",\n        definition=models.ToolDefinition(\n            type=models.ToolDefinitionType.ENDPOINT,\n            tool=models.InternalTool(\n                function=models.ToolFunction(\n                    name=\"get_weather\",\n                    description=\"Get the weather for a city\",\n                    parameters={\n\n                    },\n                ),\n            ),\n            endpoint=models.ToolHTTPEndpoint(\n                url=\"https://api.example.com\",\n                method=models.ToolHTTPMethod.GET,\n                argument_location=models.ToolArgumentLocation.FORM,\n                timeout=45,\n            ),\n            context=models.Context(\n                task=models.LoadToolFromFileTask(\n                    file=\"<value>\",\n                ),\n            ),\n            defaults=\"<value>\",\n            static_parameters=[\n                models.StaticToolParameter(\n                    name=\"temperature_unit\",\n                    description=\"Whether the temperature information should be fetched in Celsius or Fahrenheit\",\n                    required=False,\n                    type=models.StaticToolParameterType.STRING,\n                    default=\"fahrenheit\",\n                ),\n            ],\n        ),\n        service_id=1,\n        id=1,\n        last_updated_comments=\"Updated to use new API endpoint\",\n    ))\n\n    # Handle response\n    print(res)"
      - lang: typescript
        label: Typescript (SDK)
        source: "import { SyllableSDK } from \"syllable-sdk\";\n\nconst syllableSDK = new SyllableSDK({\n  apiKeyHeader: process.env[\"SYLLABLESDK_API_KEY_HEADER\"] ?? \"\",\n});\n\nasync function run() {\n  const result = await syllableSDK.tools.update({\n    name: \"Weather Fetcher\",\n    definition: {\n      type: \"endpoint\",\n      tool: {\n        function: {\n          name: \"get_weather\",\n          description: \"Get the weather for a city\",\n          parameters: {\n\n          },\n        },\n      },\n      endpoint: {\n        url: \"https://api.example.com\",\n        method: \"get\",\n        argumentLocation: \"form\",\n        timeout: 45,\n      },\n      context: {\n        task: {\n          type: \"import\",\n          version: \"v1alpha\",\n          file: \"<value>\",\n        },\n      },\n      defaults: \"<value>\",\n      staticParameters: [\n        {\n          name: \"temperature_unit\",\n          description: \"Whether the temperature information should be fetched in Celsius or Fahrenheit\",\n          required: false,\n          type: \"string\",\n          default: \"fahrenheit\",\n        },\n      ],\n    },\n    serviceId: 1,\n    id: 1,\n    lastUpdatedComments: \"Updated to use new API endpoint\",\n  });\n\n  console.log(result);\n}\n\nrun();"
  /api/v1/tools/{tool_id}/history:
    get:
      tags:
      - tools
      summary: Tool History
      description: Get version history for a tool.
      operationId: tool_history
      security:
      - APIKeyHeader: []
      parameters:
      - name: tool_id
        in: path
        required: true
        schema:
          type: integer
          title: Tool Id
      - name: page
        in: query
        required: false
        schema:
          type: integer
          minimum: 0
          description: Page number (0-based)
          default: 0
          title: Page
        description: Page number (0-based)
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          maximum: 100
          minimum: 1
          description: Items per page
          default: 25
          title: Limit
        description: Items per page
      - name: order_by_direction
        in: query
        required: false
        schema:
          $ref: '#/components/schemas/OrderByDirection'
          description: Sort by oldest first (asc) or newest first (desc). Version 1 is always the oldest.
          default: asc
        description: Sort by oldest first (asc) or newest first (desc). Version 1 is always the oldest.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListResponse_ToolHistoryResponse_'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      x-codeSamples:
      - lang: python
        label: Python (SDK)
        source: "import os\nfrom syllable_sdk import SyllableSDK\n\n\nwith SyllableSDK(\n    api_key_header=os.getenv(\"SYLLABLESDK_API_KEY_HEADER\", \"\"),\n) as ss_client:\n\n    res = ss_client.tools.tool_history(tool_id=217978, page=0, limit=25)\n\n    # Handle response\n    print(res)"
      - lang: typescript
        label: Typescript (SDK)
        source: "import { SyllableSDK } from \"syllable-sdk\";\n\nconst syllableSDK = new SyllableSDK({\n  apiKeyHeader: process.env[\"SYLLABLESDK_API_KEY_HEADER\"] ?? \"\",\n});\n\nasync function run() {\n  const result = await syllableSDK.tools.toolHistory({\n    toolId: 217978,\n  });\n\n  console.log(result);\n}\n\nrun();"
  /api/v1/tools/{tool_name}:
    get:
      tags:
      - tools
      summary: Tool Info
      description: Get the details of a specific tool
      operationId: tool_get_by_name
      security:
      - APIKeyHeader: []
      parameters:
      - name: tool_name
        in: path
        required: true
        schema:
          type: string
          title: Tool Name
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ToolDetailResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      x-codeSamples:
      - lang: python
        label: Python (SDK)
        source: "import os\nfrom syllable_sdk import SyllableSDK\n\n\nwith SyllableSDK(\n    api_key_header=os.getenv(\"SYLLABLESDK_API_KEY_HEADER\", \"\"),\n) as ss_client:\n\n    res = ss_client.tools.get_by_name(tool_name=\"<value>\")\n\n    # Handle response\n    print(res)"
      - lang: typescript
        label: Typescript (SDK)
        source: "import { SyllableSDK } from \"syllable-sdk\";\n\nconst syllableSDK = new SyllableSDK({\n  apiKeyHeader: process.env[\"SYLLABLESDK_API_KEY_HEADER\"] ?? \"\",\n});\n\nasync function run() {\n  const result = await syllableSDK.tools.getByName({\n    toolName: \"<value>\",\n  });\n\n  console.log(result);\n}\n\nrun();"
    delete:
      tags:
      - tools
      summary: Delete Tool
      description: Delete a tool.
      operationId: tool_delete
      security:
      - APIKeyHeader: []
      parameters:
      - name: tool_name
        in: path
        required: true
        schema:
          type: string
          title: Tool Name
      - name: reason
        in: query
        required: true
        schema:
          type: string
          title: Reason
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      x-codeSamples:
      - lang: python
        label: Python (SDK)
        source: "import os\nfrom syllable_sdk import SyllableSDK\n\n\nwith SyllableSDK(\n    api_key_header=os.getenv(\"SYLLABLESDK_API_KEY_HEADER\", \"\"),\n) as ss_client:\n\n    res = ss_client.tools.delete(tool_name=\"<value>\", reason=\"<value>\")\n\n    # Handle response\n    print(res)"
      - lang: typescript
        label: Typescript (SDK)
        source: "import { SyllableSDK } from \"syllable-sdk\";\n\nconst syllableSDK = new SyllableSDK({\n  apiKeyHeader: process.env[\"SYLLABLESDK_API_KEY_HEADER\"] ?? \"\",\n});\n\nasync function run() {\n  const result = await syllableSDK.tools.delete({\n    toolName: \"<value>\",\n    reason: \"<value>\",\n  });\n\n  console.log(result);\n}\n\nrun();"
components:
  schemas:
    SayAction:
      properties:
        if:
          anyOf:
          - oneOf:
            - $ref: '#/components/schemas/CelExpression'
            - $ref: '#/components/schemas/JMESPathExpression'
            discriminator:
              propertyName: type
              mapping:
                cel: '#/components/schemas/CelExpression'
                jmespath: '#/components/schemas/JMESPathExpression'
                jp: '#/components/schemas/JMESPathExpression'
          - $ref: '#/components/schemas/CaseExpression'
          - type: string
          - type: 'null'
          title: If
          description: 'Condition to decide whether this item executes. Supported expression forms: (1) JMESPath string (default for plain strings), (2) typed JMESPath object {"type":"jp"|"jmespath","expression":"..."}, or (3) typed CEL object {"type":"cel","expression":"..."}. Example JMESPath string: "inputs.can_sign_consent == `true`".'
          examples:
          - inputs.can_sign_consent == `true`
          - expression: inputs.can_sign_consent == `true`
            type: jp
          - expression: inputs.can_sign_consent == true
            type: cel
        text:
          type: string
          title: Text
          description: Text to apply if the condition is true.
        action:
          type: string
          const: say
          title: Action
          default: say
        role:
          type: string
          enum:
          - user
          - assistant
          title: Role
          description: The role of the message.
          default: assistant
      type: object
      required:
      - text
      title: SayAction
    CallAction:
      properties:
        if:
          anyOf:
          - oneOf:
            - $ref: '#/components/schemas/CelExpression'
            - $ref: '#/components/schemas/JMESPathExpression'
            discriminator:
              propertyName: type
              mapping:
                cel: '#/components/schemas/CelExpression'
                jmespath: '#/components/schemas/JMESPathExpression'
                jp: '#/components/schemas/JMESPathExpression'
          - $ref: '#/components/schemas/CaseExpression'
          - type: string
          - type: 'null'
          title: If
          description: 'Condition to decide whether this item executes. Supported expression forms: (1) JMESPath string (default for plain strings), (2) typed JMESPath object {"type":"jp"|"jmespath","expression":"..."}, or (3) typed CEL object {"type":"cel","expression":"..."}. Example JMESPath string: "inputs.can_sign_consent == `true`".'
          examples:
          - inputs.can_sign_consent == `true`
          - expression: inputs.can_sign_consent == `true`
            type: jp
          - expression: inputs.can_sign_consent == true
            type: cel
        action:
          type: string
          const: call
          title: Action
          default: call
        name:
          type: string
          title: Name
          description: The name of the tool to call.
        arguments:
          anyOf:
          - additionalProperties:
              $ref: '#/components/schemas/JsonValue'
            type: object
          - type: 'null'
          title: Arguments
          description: Optional arguments to pass to the tool (supports template strings)
        result:
          anyOf:
          - $ref: '#/components/schemas/CallResult'
          - type: 'null'
          description: Optional deterministic result-capture configuration. When present, selected fields from the tool response are saved into workflow state, so later transitions/conditions/validations can branch on them without the model re-deriving them from tool call history. Currently applied only when the call is routed in inject mode (arguments already complete); hinted/routed calls are not yet supported.
      type: object
      required:
      - name
      title: CallAction
    InputParameter:
      properties:
        name:
          type: string
          title: Name
          description: The name of the property.
        type:
          anyOf:
          - type: string
            enum:
            - string
            - number
            - integer
            - boolean
            - object
            - array
            - 'null'
          - type: 'null'
          title: Type
        description:
          anyOf:
          - type: string
          - type: 'null'
          title: Description
        title:
          anyOf:
          - type: string
          - type: 'null'
          title: Title
        format:
          anyOf:
          - type: string
          - type: 'null'
          title: Format
        pattern:
          anyOf:
          - type: string
          - type: 'null'
          title: Pattern
        enum:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          title: Enum
        examples:
          anyOf:
          - items:
              $ref: '#/components/schemas/JsonValue'
            type: array
          - type: 'null'
          title: Examples
        required:
          type: boolean
          title: Required
          default: true
      type: object
      required:
      - name
      title: InputParameter
    StepTools:
      properties:
        call:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Call
          description: Whether to force immediate tool call without user interaction.
        allow:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          title: Allow
          description: List of allowed tool names for this step.
        allowGoToStep:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Allowgotostep
          description: Whether to expose the go_to_step escape hatch to the LLM. Defaults to disabled.
      type: object
      title: StepTools
      description: Configuration for tools available in a step.
    ToolArgumentLocation:
      type: string
      enum:
      - body
      - form
      - path
      - query
      title: ToolArgumentLocation
      description: 'The location of the argument in a tool HTTP request.

        ''body'' is used for JSON data in the POST request body.

        ''form'' is used for form data in the POST request body.

        ''path'' is used for URL path parameters.

        ''query'' is used for query parameters in the URL.'
    ToolProperties:
      type: string
      enum:
      - id
      - name
      - service_name
      - definition
      - service_id
      - last_updated
      - last_updated_by
      title: ToolProperties
      description: Names of tool fields supported for filtering/sorting on list endpoint.
    GetValueAction:
      properties:
        value:
          anyOf:
          - $ref: '#/components/schemas/JsonValue'
          - type: 'null'
          description: Initial value of the variable.
        valueFrom:
          anyOf:
          - oneOf:
            - $ref: '#/components/schemas/CelExpression'
            - $ref: '#/components/schemas/JMESPathExpression'
            discriminator:
              propertyName: type
              mapping:
                cel: '#/components/schemas/CelExpression'
                jmespath: '#/components/schemas/JMESPathExpression'
                jp: '#/components/schemas/JMESPathExpression'
          - $ref: '#/components/schemas/CaseExpression'
          - type: string
          - type: 'null'
          title: Valuefrom
          description: 'Expression that computes the value. Supported expression forms: (1) JMESPath string (default for plain strings), (2) typed JMESPath object {"type":"jp"|"jmespath","expression":"..."}, or (3) typed CEL object {"type":"cel","expression":"..."}. Mutually exclusive with value.'
          examples:
          - inputs.provided_dob == patient_dob
          - expression: inputs.provided_dob == patient_dob
            type: jmespath
          - expression: inputs.count + 1
            type: cel
        if:
          anyOf:
          - oneOf:
            - $ref: '#/components/schemas/CelExpression'
            - $ref: '#/components/schemas/JMESPathExpression'
            discriminator:
              propertyName: type
              mapping:
                cel: '#/components/schemas/CelExpression'
                jmespath: '#/components/schemas/JMESPathExpression'
                jp: '#/components/schemas/JMESPathExpression'
          - $ref: '#/components/schemas/CaseExpression'
          - type: string
          - type: 'null'
          title: If
          description: 'Condition to decide whether this item executes. Supported expression forms: (1) JMESPath string (default for plain strings), (2) typed JMESPath object {"type":"jp"|"jmespath","expression":"..."}, or (3) typed CEL object {"type":"cel","expression":"..."}. Example JMESPath string: "inputs.can_sign_consent == `true`".'
          examples:
          - inputs.can_sign_consent == `true`
          - expression: inputs.can_sign_consent == `true`
            type: jp
          - expression: inputs.can_sign_consent == true
            type: cel
        action:
          type: string
          enum:
          - get
          - load
          title: Action
          description: Populate default input values.
          default: get
        inputs:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          title: Inputs
          description: Input field names to populate; None populates all step inputs.
        overwrite:
          type: boolean
          title: Overwrite
          description: If False (default), only populate empty inputs. If True, always overwrite.
          default: false
      type: object
      title: GetValueAction
    ToolOptions:
      properties:
        propagate_tool_result:
          type: boolean
          title: Propagate Tool Result
          description: Whether the tool call result should be propagated to the caller.
          default: false
      type: object
      title: ToolOptions
      description: The options for a tool call.
    CallResult:
      properties:
        save:
          items:
            $ref: '#/components/schemas/CallResultSaveMapping'
          type: array
          title: Save
          description: Field mappings extracted from the tool response into workflow state.
      type: object
      title: CallResult
      description: Deterministic result-capture configuration for a call action's tool response.
    ListResponse_ToolHistoryResponse_:
      properties:
        items:
          items:
            $ref: '#/components/schemas/ToolHistoryResponse'
          type: array
          title: Items
          description: List of items returned from the query
          examples: []
        page:
          type: integer
          title: Page
          description: The page number of the results (0-based)
          examples:
          - 0
        page_size:
          type: integer
          title: Page Size
          description: The number of items returned per page
          examples:
          - 25
        total_pages:
          anyOf:
          - type: integer
          - type: 'null'
          title: Total Pages
          description: The total number of pages of results given the indicated page size
          examples:
          - 4
        total_count:
          anyOf:
          - type: integer
          - type: 'null'
          title: Total Count
          description: The total number of items returned from the query
          examples:
     

# --- truncated at 32 KB (97 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/syllable/refs/heads/main/openapi/syllable-tools-api-openapi.yml