Every API here is available over the APIs.io API and to AI agents over MCP.
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