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).

Operations 6

GET /api/v1/tools/ Tool List #
POST /api/v1/tools/ Create Tool #
PUT /api/v1/tools/ Update Tool #
GET /api/v1/tools/{tool_id}/history Tool History #
GET /api/v1/tools/{tool_name} Tool Info #
DELETE /api/v1/tools/{tool_name} Delete Tool #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/syllable-tools-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

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:
    ToolHttpEndpoint:
      properties:
        url:
          type: string
          title: Url
          description: The endpoint URL of the external service to call.
          examples:
          - https://api.example.com
        method:
          $ref: '#/components/schemas/ToolHttpMethod'
          description: The HTTP method to use for the service call.
          examples:
          - get
        argument_location:
          $ref: '#/components/schemas/ToolArgumentLocation'
          description: How to pass the arguments to the request.
          examples:
          - query
        timeout:
          anyOf:
          - type: number
            maximum: 120
            minimum: 1
          - type: 'null'
          title: Timeout
          description: Timeout in seconds for the HTTP request. Default 20 seconds when not set.
          examples:
          - 45.0
      type: object
      required:
      - url
      - method
      - argument_location
      title: ToolHttpEndpoint
      description: The configuration for an HTTP API call by a tool.
    LoadToolFromFileTask:
      properties:
        id:
          anyOf:
          - type: string
          - type: 'null'
          title: Id
          description: A unique identifier for the task.
        config:
          anyOf:
          - additionalProperties:
              $ref: '#/components/schemas/JsonValue'
            type: object
          - type: 'null'
          title: Config
        variables:
          anyOf:
          - items:
              $ref: '#/components/schemas/Variable'
            type: array
          - type: 'null'
          title: Variables
        metadata:
          anyOf:
          - $ref: '#/components/schemas/ContextTaskMetadata'
          - type: 'null'
        tool:
          anyOf:
          - $ref: '#/components/schemas/ContextToolInfo'
          - type: 'null'
        type:
          type: string
          const: import
          title: Type
          default: import
        version:
          type: string
          const: v1alpha
          title: Version
          default: v1alpha
        file:
          anyOf:
          - type: string
          - items:
              type: string
            type: array
          title: File
          description: The local path of the tool definition JSON file.
      type: object
      required:
      - file
      title: LoadToolFromFileTask
      description: Bootstraps a tool from a file (for internal developer use only if ENV.local=True).
    JMESPathExpression:
      properties:
        expression:
          type: string
          title: Expression
          description: JMESPath expression string.
          examples:
          - inputs.can_sign_consent == `true`
        type:
          type: string
          enum:
          - jp
          - jmespath
          title: Type
          description: JMESPath expression language selector. Use with object form {"type":"jp"|"jmespath","expression":"..."}.
          default: jp
      type: object
      required:
      - expression
      title: JMESPathExpression
      description: 'JMESPath expression object.


        Use this object form to explicitly mark JMESPath syntax:

        {"type": "jp", "expression": "inputs.can_sign_consent == `true`"}

        See https://jmespath.org/specification.html#grammar'
    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
    ContextToolInfo:
      properties:
        name:
          anyOf:
          - type: string
          - type: 'null'
          title: Name
          description: The name of the generated tool.
        description:
          anyOf:
          - type: string
          - type: 'null'
          title: Description
          description: The description of the tool.
      type: object
      title: ContextToolInfo
    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
    ToolHistoryResponse:
      properties:
        tool_id:
          type: integer
          title: Tool Id
          description: ID of the tool
          examples:
          - 1
        version_number:
          type: integer
          title: Version Number
          description: Monotonic version for this tool (1 = oldest)
          examples:
          - 1
        created_at:
          type: string
          format: date-time
          title: Created At
          description: When this version took effect.
          examples:
          - '2024-01-01T12:00:00Z'
        updated_by:
          type: string
          title: Updated By
          description: User who made the change that produced this row
          examples:
          - user@email.com
        comments:
          anyOf:
          - type: string
          - type: 'null'
          title: Comments
          description: Optional comment stored on the tool for this version
          examples:
          - Adjusted timeout
        operation:
          type: string
          title: Operation
          description: 'What produced this row: create, update, or delete'
          examples:
          - update
        deleted_reason:
          anyOf:
          - type: string
          - type: 'null'
          title: Deleted Reason
          description: When operation is delete, reason copied from the tool at delete time
          examples:
          - No longer used
        service_id:
          type: integer
          title: Service Id
          description: Internal ID of the service this tool belonged to at this version
          examples:
          - 1
        service_name:
          anyOf:
          - type: string
          - type: 'null'
          title: Service Name
          description: Service display name.
          examples:
          - Weather API
        name:
          type: string
          title: Name
          description: Tool name at this version
          examples:
          - get_weather
        description:
          type: string
          title: Description
          description: Human-readable description of the tool at this version
          examples:
          - Fetch weather
        type:
          type: string
          title: Type
          description: 'Tool type at this version: ''action'', ''endpoint'', ''context'', or ''log'''
          examples:
          - endpoint
        definition:
          $ref: '#/components/schemas/ToolDefinition'
          description: Full tool definition for this version (same shape as ToolResponse.definition).
          examples:
          - endpoint:
              argument_location: query
              method: get
              url: https://api.open-meteo.com/v1/forecast
            static_parameters:
            - default: fahrenheit
              description: Whether the temperature information should be fetched in Celsius or Fahrenheit
              name: temperature_unit
              required: false
              type: string
            tool:
              function:
                description: Get the weather for a city
                name: get_weather
                parameters:
                  properties:
                    latitude:
                      description: Latitude of the city
                      type: number
                    longitude:
                      description: Longitude of the city
                      type: number
                    current:
                      default: temperature_2m,relative_humidity_2m,precipitation,rain,showers
                      description: Information to retrieve from the open-meteo API, comma-separated
                      type: string
                  required:
                  - latitude
                  - longitude
                  - current
                  type: object
              type: function
            type: endpoint
      type: object
      required:
      - tool_id
      - version_number
      - created_at
      - updated_by
      - operation
      - service_id
      - name
      - description
      - type
      - definition
      title: ToolHistoryResponse
      description: API response for one row in GET /tools/{tool_id}/history.
    NextStep:
      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 (d

# --- 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