Syllable Agents API

Operations related to agent configuration. When a user interacts with the Syllable system, they do so by communicating with an agent. An agent is linked to a prompt, a custom message, and one or more channel targets to define its behavior and capabilities. For more information, see [Console docs](https://docs.syllable.ai/workspaces/Agents).

Operations 7

GET /api/v1/agents/ Agent List #
POST /api/v1/agents/ Create Agent #
PUT /api/v1/agents/ Update Agent #
GET /api/v1/agents/labels List Active Agent Labels #
GET /api/v1/agents/{agent_id} Get Agent By Id #
DELETE /api/v1/agents/{agent_id} Delete Agent #
GET /api/v1/agents/voices/available Get Available Agent Voices #

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-agents-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-agents-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: SyllableSDK Agents 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: agents
  description: Operations related to agent configuration. When a user interacts with the           Syllable system, they do so by communicating with an agent.           An agent is linked to a prompt, a custom message, and one or more channel targets to           define its behavior and capabilities. For more information, see           [Console docs](https://docs.syllable.ai/workspaces/Agents).
paths:
  /api/v1/agents/:
    get:
      tags:
      - agents
      summary: Agent List
      description: List the existing agents
      operationId: agent_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/AgentProperties'
          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/AgentProperties'
          - 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/AgentProperties'
          - 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_AgentResponse_'
        '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.agents.list(page=0, limit=25, search_fields=[\n        models.AgentProperties.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.agents.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:
      - agents
      summary: Create Agent
      description: Create a new agent
      operationId: agent_create
      security:
      - APIKeyHeader: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AgentCreate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AgentResponse'
        '400':
          description: Bad Request
        '500':
          description: Internal Server Error
        '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.agents.create(request={\n        \"name\": \"Weather agent\",\n        \"description\": \"Agent for answering questions about weather.\",\n        \"labels\": [\n            \"Information\",\n            \"Weather\",\n        ],\n        \"type\": \"ca_v1\",\n        \"prompt_id\": 1,\n        \"prompt_version_number\": 3,\n        \"custom_message_id\": 1,\n        \"language_group_id\": 1,\n        \"bridge_phrases_id\": 1,\n        \"timezone\": \"America/New_York\",\n        \"prompt_tool_defaults\": [\n            {\n                \"tool_name\": \"get_weather\",\n                \"default_values\": [\n                    {\n                        \"field_name\": \"temperature_unit\",\n                        \"default_value\": \"fahrenheit\",\n                    },\n                ],\n            },\n        ],\n        \"variables\": {\n            \"vars.location_name\": \"Main Street Pizza\",\n        },\n        \"tool_headers\": {\n            \"some-header\": \"some-value\",\n        },\n        \"stt_provider\": models.AgentSttProvider.GOOGLE_STT_V2_CHIRP_2_,\n        \"wait_sound\": models.AgentWaitSound.NO_SOUND,\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.agents.create({\n    name: \"Weather agent\",\n    description: \"Agent for answering questions about weather.\",\n    labels: [\n      \"Information\",\n      \"Weather\",\n    ],\n    type: \"ca_v1\",\n    promptId: 1,\n    promptVersionNumber: 3,\n    customMessageId: 1,\n    languageGroupId: 1,\n    bridgePhrasesId: 1,\n    timezone: \"America/New_York\",\n    promptToolDefaults: [\n      {\n        toolName: \"get_weather\",\n        defaultValues: [\n          {\n            fieldName: \"temperature_unit\",\n            defaultValue: \"fahrenheit\",\n          },\n        ],\n      },\n    ],\n    variables: {\n      \"vars.location_name\": \"Main Street Pizza\",\n    },\n    toolHeaders: {\n      \"some-header\": \"some-value\",\n    },\n    sttProvider: \"Google STT V2 (Chirp 2)\",\n    waitSound: \"No Sound\",\n  });\n\n  console.log(result);\n}\n\nrun();"
    put:
      tags:
      - agents
      summary: Update Agent
      description: Update an existing agent
      operationId: agent_update
      security:
      - APIKeyHeader: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AgentUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AgentResponse'
        '400':
          description: Bad Request
        '404':
          description: Not Found
        '500':
          description: Internal Server Error
        '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.agents.update(request={\n        \"name\": \"Weather agent\",\n        \"description\": \"Agent for answering questions about weather.\",\n        \"labels\": [\n            \"Information\",\n            \"Weather\",\n        ],\n        \"type\": \"ca_v1\",\n        \"prompt_id\": 1,\n        \"prompt_version_number\": 3,\n        \"custom_message_id\": 1,\n        \"language_group_id\": 1,\n        \"bridge_phrases_id\": 1,\n        \"timezone\": \"America/New_York\",\n        \"prompt_tool_defaults\": [\n            {\n                \"tool_name\": \"get_weather\",\n                \"default_values\": [\n                    {\n                        \"field_name\": \"temperature_unit\",\n                        \"default_value\": \"fahrenheit\",\n                    },\n                ],\n            },\n        ],\n        \"variables\": {\n            \"vars.location_name\": \"Main Street Pizza\",\n        },\n        \"tool_headers\": {\n            \"some-header\": \"some-value\",\n        },\n        \"stt_provider\": models.AgentSttProvider.GOOGLE_STT_V2_CHIRP_2_,\n        \"wait_sound\": models.AgentWaitSound.NO_SOUND,\n        \"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.agents.update({\n    name: \"Weather agent\",\n    description: \"Agent for answering questions about weather.\",\n    labels: [\n      \"Information\",\n      \"Weather\",\n    ],\n    type: \"ca_v1\",\n    promptId: 1,\n    promptVersionNumber: 3,\n    customMessageId: 1,\n    languageGroupId: 1,\n    bridgePhrasesId: 1,\n    timezone: \"America/New_York\",\n    promptToolDefaults: [\n      {\n        toolName: \"get_weather\",\n        defaultValues: [\n          {\n            fieldName: \"temperature_unit\",\n            defaultValue: \"fahrenheit\",\n          },\n        ],\n      },\n    ],\n    variables: {\n      \"vars.location_name\": \"Main Street Pizza\",\n    },\n    toolHeaders: {\n      \"some-header\": \"some-value\",\n    },\n    sttProvider: \"Google STT V2 (Chirp 2)\",\n    waitSound: \"No Sound\",\n    id: 1,\n  });\n\n  console.log(result);\n}\n\nrun();"
  /api/v1/agents/labels:
    get:
      tags:
      - agents
      summary: List Active Agent Labels
      description: List all distinct labels in use across active agents.
      operationId: agent_list_active_labels
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  type: string
                type: array
                title: Response Agent List Active Labels
      security:
      - APIKeyHeader: []
      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.agents.agent_list_active_labels()\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.agents.agentListActiveLabels();\n\n  console.log(result);\n}\n\nrun();"
  /api/v1/agents/{agent_id}:
    get:
      tags:
      - agents
      summary: Get Agent By Id
      description: Get an agent by ID.
      operationId: agent_get_by_id
      security:
      - APIKeyHeader: []
      parameters:
      - name: agent_id
        in: path
        required: true
        schema:
          type: integer
          title: Agent Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AgentResponse'
        '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.agents.get_by_id(agent_id=910445)\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.agents.getById({\n    agentId: 910445,\n  });\n\n  console.log(result);\n}\n\nrun();"
    delete:
      tags:
      - agents
      summary: Delete Agent
      operationId: agent_delete
      security:
      - APIKeyHeader: []
      parameters:
      - name: agent_id
        in: path
        required: true
        schema:
          type: integer
          title: Agent Id
      - name: reason
        in: query
        required: true
        schema:
          type: string
          title: Reason
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '400':
          description: Bad Request
        '404':
          description: Not Found
        '500':
          description: Internal Server Error
        '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.agents.delete(agent_id=78115, 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.agents.delete({\n    agentId: 78115,\n    reason: \"<value>\",\n  });\n\n  console.log(result);\n}\n\nrun();"
  /api/v1/agents/voices/available:
    get:
      tags:
      - agents
      summary: Get Available Agent Voices
      description: Get available agent voices.
      operationId: agent_get_available_voices
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/AgentVoice'
                type: array
                title: Response Agent Get Available Voices
      security:
      - APIKeyHeader: []
      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.agents.agent_get_available_voices()\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.agents.agentGetAvailableVoices();\n\n  console.log(result);\n}\n\nrun();"
components:
  schemas:
    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).
    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
    ExpressionTaskEvents:
      properties:
        start:
          anyOf:
          - items:
              oneOf:
              - $ref: '#/components/schemas/SetValueAction'
              - $ref: '#/components/schemas/IncrementAction'
              - $ref: '#/components/schemas/CallAction'
              - $ref: '#/components/schemas/SayAction'
              discriminator:
                propertyName: action
                mapping:
                  call: '#/components/schemas/CallAction'
                  inc: '#/components/schemas/IncrementAction'
                  say: '#/components/schemas/SayAction'
                  set: '#/components/schemas/SetValueAction'
            type: array
          - type: 'null'
          title: Start
          description: Actions to execute on the first input from the user.
        submit:
          anyOf:
          - items:
              oneOf:
              - $ref: '#/components/schemas/SetValueAction'
              - $ref: '#/components/schemas/IncrementAction'
              - $ref: '#/components/schemas/SaveAction'
              - $ref: '#/components/schemas/CallAction'
              - $ref: '#/components/schemas/SayAction'
              discriminator:
                propertyName: action
                mapping:
                  call: '#/components/schemas/CallAction'
                  inc: '#/components/schemas/IncrementAction'
                  save: '#/components/schemas/SaveAction'
                  say: '#/components/schemas/SayAction'
                  set: '#/components/schemas/SetValueAction'
            type: array
          - type: 'null'
          title: Submit
          description: Actions to execute when the tool/step is submitted by the LLM.
      type: object
      title: ExpressionTaskEvents
      description: Actions to perform when events occur (start, submit).
    ValidationIssue:
      properties:
        id:
          type: string
          title: Id
          description: Stable machine-readable identifier (kebab-case)
        severity:
          type: string
          enum:
          - info
          - warning
          - error
          title: Severity
          default: error
        message:
          type: string
          title: Message
          description: Human-readable description
        path:
          anyOf:
          - type: string
          - type: 'null'
          title: Path
          description: JSONPath-style location (e.g. $.context.task.steps[2])
        value:
          anyOf:
          - type: string
          - type: 'null'
          title: Value
          description: The offending value, when it adds clarity
      type: object
      required:
      - id
      - message
      title: ValidationIssue
      description: A single validation finding with severity, location, and description.
    ExpressionTask:
      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: expression
          title: Type
          default: expression
        version:
          type: string
          const: v1alpha
          title: Version
          default: v1alpha
        inputs:
          items:
            $ref: '#/components/schemas/InputParameter'
          type: array
          title: Inputs
        expression:
          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: Expression
          description: 'Expression for task output/logic. 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":"..."}.'
          examples:
          - inputs.can_sign_consent == `true`
          - expression: inputs.can_sign_consent == `true`
            type: jp
          - expression: inputs.can_sign_consent == true
            type: cel
        output:
          anyOf:
          - $ref: '#/components/schemas/JsonValue'
          - type: 'null'
        true:
          $ref: '#/components/schemas/ExpressionTaskEvents'
          description: Actions to execute when the configured events occur.
      type: object
      title: ExpressionTask
    EventTaskEvents:
      properties:
        start:
          anyOf:
          - items:
              oneOf:
              - $ref: '#/components/schemas/SetValueAction'
              - $ref: '#/components/schemas/IncrementAction'
              - $ref: '#/components/schemas/CallAction'
              - $ref: '#/components/schemas/SayAction'
              discriminator:
                propertyName: action
                mapping:
                  call: '#/components/schemas/CallAction'
                  inc: '#/components/schemas/IncrementAction'
                  say: '#/components/schemas/SayAction'
                  set: '#/components/schemas/SetValueAction'
            type: array
          - type: 'null'
          title: Start
          description: Actions to execute on the first input from the user.
      type: object
      title: EventTaskEvents
    PromptResponse:
      properties:
        name:
          type: string
          title: Name
          description: The prompt name
          examples:
          - Weather Agent Prompt
        description:
          anyOf:
          - type: string
          - type: 'null'
          title: Description
          description: The description of the prompt
          examples:
          - Prompt for a weather agent.
        type:
          type: string
          title: Type
          description: The type of the prompt
          examples:
          - prompt_v1
        context:
          anyOf:
          - type: string
          - type: 'null'
          title: Context
          description: The prompt text that will be sent to the LLM at the beginning of the conversation
          examples:
          - You are a weather agent. Answer the user's questions about weather and nothing else.
        tools:
          items:
            type: string
          type: array
          title: Tools
          description: Names of the tools to which the prompt has access (DEPRECATED - use information from full tools field instead)
          default: []
          deprecated: true
          examples:
          - hangup
          - summary
        llm_config:
          $ref: '#/components/schemas/PromptLlmConfig'
          description: The configuration for the LLM that the prompt uses
          examples:
          - model: gpt-4o
            provider: openai
            version: '2024-08-06'
        session_end_enabled:
          type: boolean
          title: Session End Enabled
          description: Whether session end functionality is enabled for this prompt
          default: false
          examples:
          - false
        session_end_tool_id:
          anyOf:
          - type: integer
          - type: 'null'
          title: Session End Tool Id
          description: ID of the optional session end tool associated with the prompt
          examples:
          - 1
        edit_comments:
          anyOf:
          - type: string
          - type: 'null'
          title: Edit Comments
          description: The comments for the most recent edit to the prompt
          examples:
          - Updated prompt text to include requirement to not answer questions that aren't about weather.
        id:
          type: integer
          title: Id
          description: The internal ID of the prompt
          examples:
          - 1
        last_updated:
          anyOf:
          - type: string
          - type: 'null'
          title: Last Updated
          description: The last updated date of the prompt
          examples:
          - '2024-01-01T12:00:00Z'
        last_updated_by:
          anyOf:
          - type: string
          - type: 'null'
          title: Last Updated By
          description: Email address of the user who most recently updated the prompt
          examples:
          - user@email.com
        session_e

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