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

# Get Agent Version

> Get a specific version of an agent.



## OpenAPI

````yaml /openapi.json get /core/agents/{id}/versions/{version}
openapi: 3.1.0
info:
  title: Anyreach API
  version: 1.0.0
  description: >-
    REST API for the Anyreach platform.


    Every endpoint is scoped to one organization. Authenticate with a bearer
    token and, if your token can reach more than one organization, name the one
    you mean with the `X-Anyreach-Org` header. See
    [Authentication](https://docs.anyreach.ai/api-reference/authentication).


    This reference is generated from the running service, so the request and
    response shapes here are the ones the API actually enforces.
servers:
  - url: https://api.anyreach.ai
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Agents
    description: >-
      Create and configure the agent that handles a conversation, and manage its
      versions. An agent's behaviour lives in a version; publishing a version is
      what puts it on the air.
  - name: Conversations
    description: >-
      Create, list, retrieve, and message conversations between your users and
      Anyreach agents.
  - name: Conversation attachments
    description: >-
      Upload files into a conversation and read them back. Uploads are two-step:
      presign, PUT to the returned URL, then mark the attachment complete.
  - name: Conversation events
    description: >-
      The ordered event stream behind a conversation — turns, tool calls,
      transfers, and status changes.
  - name: Knowledge bases
    description: >-
      A knowledge base (a `dataset` in the API) is a collection of embedded
      content an agent can retrieve from.
  - name: Knowledge base sources
    description: Attach and detach sources to a knowledge base.
  - name: Sources
    description: >-
      A source is a file or URL whose content is ingested, chunked, and
      embedded.
  - name: Phone numbers
    description: >-
      Buy, list, and release phone numbers, and point each one at the agent that
      should answer it.
  - name: Trunks
    description: >-
      SIP trunks for bringing your own carrier. A trunk carries calls between
      your carrier and Anyreach.
  - name: Inbound routing
    description: >-
      Rules that decide which agent answers an inbound call, evaluated before
      the call connects.
  - name: Agent assist
    description: >-
      Look up the live-assist context for a number so a human agent can see what
      the AI agent knows.
  - name: Human handoff
    description: >-
      Connections to the help desk a conversation escalates into, and the test
      endpoint that proves one works.
  - name: Email domains
    description: >-
      Register a sending domain and verify its DNS before an agent can send from
      it.
  - name: Email addresses
    description: >-
      The addresses on a verified domain, and the agent that handles mail
      arriving at each one.
  - name: Unsubscribes
    description: >-
      The suppression list. An address on this list is never emailed again until
      it is removed.
  - name: Web widgets
    description: >-
      The embeddable chat and voice widget: its appearance, its allowed domains,
      and the agent behind it.
  - name: Campaigns
    description: >-
      An outbound campaign dials a contact list with a given agent on a given
      schedule. Start, pause, and close control its lifecycle.
  - name: Campaign contacts
    description: >-
      The people a campaign dials. Contacts can be added while the campaign is
      running.
  - name: Campaign configurations
    description: >-
      Reusable dialing settings — calling windows, retry policy, timezone
      handling — that campaigns reference.
  - name: Campaign stats
    description: >-
      Per-campaign outcome counters, and the organization-wide cap on how many
      calls run at once.
  - name: Custom data
    description: >-
      Your own tables, queryable by an agent mid-conversation. Define a table,
      load rows, and expose read-only stored queries as agent tools.
  - name: Metrics
    description: >-
      The definitions an LLM judge scores a conversation against. Lint and
      preview a metric before you run it at scale.
  - name: Evaluations
    description: A scorecard binding a set of metrics to a population of conversations.
  - name: Evaluation runs
    description: >-
      One execution of an evaluation over a conversation set, and the results it
      produced.
  - name: Workflows
    description: >-
      Automations built from steps. A workflow is edited as a version and goes
      live when a version is published and set live.
  - name: Workflow triggers
    description: >-
      What starts a workflow — a schedule, a webhook, or a point in an agent
      conversation. Triggers are versioned alongside the workflow.
  - name: Workflow executions
    description: >-
      Run a workflow and read back what happened. Executions are synchronous by
      default; use the async endpoint for long-running work.
  - name: Workflow credentials
    description: >-
      Secrets a workflow step authenticates with. Values are write-only — they
      can be set and rotated, never read back.
paths:
  /core/agents/{id}/versions/{version}:
    get:
      tags:
        - Agents
      summary: Get Agent Version
      description: Get a specific version of an agent.
      operationId: getAgentVersion
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            title: Id
        - name: version
          in: path
          required: true
          schema:
            type: string
            title: Version
        - name: x-anyreach-org
          in: header
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Organization ID for user PATs (pat_ prefix tokens)
            title: X-Anyreach-Org
          description: Organization ID for user PATs (pat_ prefix tokens)
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AgentVersion'
              example:
                id: 3fa85f64-5717-4562-b3fc-2c963f66afa6
                organization_id: 3fa85f64-5717-4562-b3fc-2c963f66afa6
                agent_id: 3fa85f64-5717-4562-b3fc-2c963f66afa6
                version: 1
                config:
                  version: '1'
                  agent:
                    type: null
                    instructions: null
                    starting_message: null
                    tools: null
                    built_in_tools: null
                    language: null
                    stack: null
                    allow_interruptions: null
                    video_input: null
                    screen_share_input: null
                    max_tool_steps: null
                    channel_overrides: null
                    channel_properties: null
                  metadata: {}
                  noise_cancellation:
                    models: null
                  custom_recording_locations: []
                  pre_conversation_workflow:
                    type: null
                    workflow_id: null
                    workflow_version: null
                    initial_step: null
                    definition: null
                    condition: null
                    reject_on_error: null
                  post_conversation_workflow:
                    type: null
                    workflow_id: null
                    workflow_version: null
                    initial_step: null
                    definition: null
                    condition: null
                    reject_on_error: null
                  scorecard_ids:
                    - string
                  voicemail_detection:
                    beep_detection_threshold: null
                    beep_detection_timeout: null
                    tool_call_overrides: null
                    play_message: null
                  inactivity_nudge:
                    timeout_seconds: 30
                    nudge_interval_seconds: 15
                    nudges: []
                published: false
                instruction_builder_inputs: {}
                trained_instruction_builder_inputs: {}
                generation_timestamp: '2026-01-15T09:30:00Z'
                manually_edited: false
                is_updated: false
                cache_fingerprints:
                  - string
                created_at: '2026-01-15T09:30:00Z'
                updated_at: '2026-01-15T09:30:00Z'
                created_by: user:3fa85f64-5717-4562-b3fc-2c963f66afa6
                modified_by: user:3fa85f64-5717-4562-b3fc-2c963f66afa6
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
components:
  schemas:
    AgentVersion:
      properties:
        id:
          type: string
          title: Id
        organization_id:
          type: string
          title: Organization Id
        agent_id:
          type: string
          title: Agent Id
        version:
          type: integer
          title: Version
        config:
          $ref: '#/components/schemas/AgentConfig'
        published:
          type: boolean
          title: Published
        instruction_builder_inputs:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Instruction Builder Inputs
        trained_instruction_builder_inputs:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Trained Instruction Builder Inputs
        generation_timestamp:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Generation Timestamp
        manually_edited:
          type: boolean
          title: Manually Edited
          default: false
        is_updated:
          type: boolean
          title: Is Updated
          default: false
        cache_fingerprints:
          items:
            type: string
          type: array
          title: Cache Fingerprints
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
        created_by:
          anyOf:
            - type: string
            - type: 'null'
          title: Created By
        modified_by:
          anyOf:
            - type: string
            - type: 'null'
          title: Modified By
      type: object
      required:
        - id
        - organization_id
        - agent_id
        - version
        - config
        - published
        - created_at
        - updated_at
      title: AgentVersion
      description: >-
        Agent version entity representing a version of an agent with
        configuration.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    AgentConfig:
      properties:
        version:
          type: string
          const: '1'
          title: Version
          default: '1'
        agent:
          oneOf:
            - $ref: '#/components/schemas/StaticPromptAgent'
          title: Agent
          discriminator:
            propertyName: type
            mapping:
              static_prompt:
                $ref: '#/components/schemas/StaticPromptAgent'
        metadata:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Metadata
        noise_cancellation:
          anyOf:
            - $ref: '#/components/schemas/NoiseCancellation'
            - type: 'null'
          title: Noise Cancellation
        custom_recording_locations:
          anyOf:
            - items:
                oneOf:
                  - $ref: '#/components/schemas/S3RecordingLocation'
                  - $ref: '#/components/schemas/GcpRecordingLocation'
                  - $ref: '#/components/schemas/AzureRecordingLocation'
                discriminator:
                  propertyName: provider
                  mapping:
                    azure:
                      $ref: '#/components/schemas/AzureRecordingLocation'
                    gcp:
                      $ref: '#/components/schemas/GcpRecordingLocation'
                    s3:
                      $ref: '#/components/schemas/S3RecordingLocation'
              type: array
              minItems: 1
            - type: 'null'
          title: Custom Recording Locations
        pre_conversation_workflow:
          anyOf:
            - $ref: '#/components/schemas/WorkflowAction'
            - type: 'null'
          title: Pre Conversation Workflow
        post_conversation_workflow:
          anyOf:
            - $ref: '#/components/schemas/WorkflowAction'
            - type: 'null'
          title: Post Conversation Workflow
        scorecard_ids:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Scorecard IDs
        voicemail_detection:
          anyOf:
            - $ref: '#/components/schemas/VoicemailDetectionConfig'
            - type: 'null'
          title: Voicemail Detection
        inactivity_nudge:
          $ref: '#/components/schemas/InactivityNudgeConfig'
          title: Inactivity Nudge
      type: object
      required:
        - agent
      title: AgentConfig
      description: Top-level agent configuration.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
    StaticPromptAgent:
      properties:
        type:
          type: string
          const: static_prompt
          title: Type
          default: static_prompt
        instructions:
          type: string
          title: Instructions
          default: ''
        starting_message:
          oneOf:
            - $ref: '#/components/schemas/UserInitiatesMessage'
            - $ref: '#/components/schemas/BotInitiatesStaticMessage'
            - $ref: '#/components/schemas/BotInitiatesDynamicMessage'
          title: Welcome Message
          discriminator:
            propertyName: type
            mapping:
              bot_initiates_dynamic:
                $ref: '#/components/schemas/BotInitiatesDynamicMessage'
              bot_initiates_static:
                $ref: '#/components/schemas/BotInitiatesStaticMessage'
              user_initiates:
                $ref: '#/components/schemas/UserInitiatesMessage'
        tools:
          items:
            $ref: '#/components/schemas/ToolCall'
          type: array
          title: Tools
        built_in_tools:
          anyOf:
            - $ref: '#/components/schemas/BuiltInTools'
            - type: 'null'
          title: Built-in Tools
        language:
          anyOf:
            - $ref: '#/components/schemas/AgentLanguage'
            - type: 'null'
          title: Language
        stack:
          oneOf:
            - $ref: '#/components/schemas/SttLlmTtsStack'
            - $ref: '#/components/schemas/RealtimeStack'
          title: Stack
          discriminator:
            propertyName: type
            mapping:
              realtime:
                $ref: '#/components/schemas/RealtimeStack'
              stt_llm_tts:
                $ref: '#/components/schemas/SttLlmTtsStack'
        allow_interruptions:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Allow Interruptions
          default: true
        video_input:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Enable Video Input
          default: false
        screen_share_input:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Enable Screen Share Input
          default: false
        max_tool_steps:
          anyOf:
            - type: integer
              minimum: 1
            - type: 'null'
          title: Max Tool Steps
          description: >-
            Maximum number of tool invocations per conversation turn. Defaults
            to 3 if not specified.
        channel_overrides:
          anyOf:
            - additionalProperties:
                $ref: '#/components/schemas/ChannelOverride'
              propertyNames:
                $ref: '#/components/schemas/ChannelKey'
              type: object
            - type: 'null'
          title: Channel Overrides
          description: >-
            Group 1 — per-channel LLM steering (append/replace instructions,
            greeting, tool budget).
        channel_properties:
          anyOf:
            - additionalProperties:
                oneOf:
                  - $ref: '#/components/schemas/SmsProperties'
                  - $ref: '#/components/schemas/EmailProperties'
                  - $ref: '#/components/schemas/TextProperties'
                discriminator:
                  propertyName: channel
                  mapping:
                    email:
                      $ref: '#/components/schemas/EmailProperties'
                    sms:
                      $ref: '#/components/schemas/SmsProperties'
                    text:
                      $ref: '#/components/schemas/TextProperties'
              propertyNames:
                $ref: '#/components/schemas/ChannelKey'
              type: object
            - type: 'null'
          title: Channel Properties
          description: >-
            Group 2 — per-channel transport/presentation (body template,
            segments, subject, signature, enabled).
      type: object
      required:
        - starting_message
        - tools
        - stack
      title: StaticPromptAgent
      description: Static prompt configuration.
    NoiseCancellation:
      properties:
        models:
          items:
            oneOf:
              - $ref: '#/components/schemas/LivekitProvider'
            discriminator:
              propertyName: provider
              mapping:
                livekit:
                  $ref: '#/components/schemas/LivekitProvider'
          type: array
          minItems: 1
          title: Noise Cancellation Models
      type: object
      required:
        - models
      title: NoiseCancellation
      description: Noise cancellation configuration.
    S3RecordingLocation:
      properties:
        provider:
          type: string
          const: s3
          title: Provider
          default: s3
        bucket:
          type: string
          title: Bucket
        region:
          type: string
          title: Region
        access_key:
          type: string
          title: Access Key
        secret_access_key:
          type: string
          title: Secret Access Key
        file_type:
          type: string
          enum:
            - ogg
            - mp4
          title: File Type
          default: ogg
      type: object
      required:
        - bucket
        - region
        - access_key
        - secret_access_key
      title: S3RecordingLocation
      description: S3 recording location provider.
    GcpRecordingLocation:
      properties:
        provider:
          type: string
          const: gcp
          title: Provider
          default: gcp
        bucket:
          type: string
          title: Bucket
        credentials:
          type: string
          title: Credentials
        file_type:
          type: string
          enum:
            - ogg
            - mp4
          title: File Type
          default: ogg
      type: object
      required:
        - bucket
        - credentials
      title: GcpRecordingLocation
      description: GCP recording location provider.
    AzureRecordingLocation:
      properties:
        provider:
          type: string
          const: azure
          title: Provider
          default: azure
        container_name:
          type: string
          title: Container Name
        account_name:
          type: string
          title: Account Name
        account_key:
          type: string
          title: Account Key
        file_type:
          type: string
          enum:
            - ogg
            - mp4
          title: File Type
          default: ogg
      type: object
      required:
        - container_name
        - account_name
        - account_key
      title: AzureRecordingLocation
      description: Azure recording location provider.
    WorkflowAction:
      properties:
        type:
          type: string
          const: workflow
          title: Type
          default: workflow
        workflow_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Workflow ID
        workflow_version:
          anyOf:
            - type: integer
            - type: 'null'
          title: Workflow Version
        initial_step:
          anyOf:
            - type: string
            - type: 'null'
          title: Initial Step
        definition:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Inline Workflow Definition
          description: >-
            Inline workflow definition (mutually exclusive with
            workflow_id/workflow_version)
        condition:
          anyOf:
            - type: string
            - type: 'null'
          title: Condition
        reject_on_error:
          type: boolean
          title: Reject On Error
          description: If true, abort the conversation when the workflow fails
          default: false
      type: object
      title: Workflow
    VoicemailDetectionConfig:
      properties:
        beep_detection_threshold:
          type: number
          maximum: 1
          minimum: 0
          title: Background Beep Detection Threshold
          description: >-
            Confidence threshold (0.0-1.0) for background beep detection. Having
            above 0.95 yields better result
        beep_detection_timeout:
          type: integer
          exclusiveMinimum: 0
          title: Background Beep Detection Timeout (seconds)
          description: Max seconds to run background beep detection
        tool_call_overrides:
          anyOf:
            - $ref: '#/components/schemas/VoicemailToolCallOverrides'
            - type: 'null'
          title: Tool Call Overrides
          description: Optional overrides for LLM tool-based voicemail detection
        play_message:
          anyOf:
            - $ref: '#/components/schemas/VoicemailPlayMessageAction'
            - type: 'null'
          title: Voicemail Play Message
      type: object
      required:
        - beep_detection_threshold
        - beep_detection_timeout
      title: VoicemailDetectionConfig
      description: Configuration for voicemail detection and response behavior.
    InactivityNudgeConfig:
      properties:
        timeout_seconds:
          type: number
          exclusiveMinimum: 0
          title: Inactivity Timeout (s)
          description: Silence before the first nudge (feeds LiveKit user_away_timeout).
          default: 30
        nudge_interval_seconds:
          type: number
          exclusiveMinimum: 0
          title: Nudge Interval (s)
          description: Delay between nudges, and the final grace period before hangup.
          default: 15
        nudges:
          items:
            oneOf:
              - $ref: '#/components/schemas/NudgeStaticMessage'
              - $ref: '#/components/schemas/NudgeDynamicMessage'
            discriminator:
              propertyName: type
              mapping:
                bot_initiates_dynamic:
                  $ref: '#/components/schemas/NudgeDynamicMessage'
                bot_initiates_static:
                  $ref: '#/components/schemas/NudgeStaticMessage'
          type: array
          minItems: 1
          title: Nudges
          description: Ordered, one per attempt (escalating copy). Hang up after the last.
      type: object
      title: InactivityNudgeConfig
      description: >-
        Nudge the user on silence, then hang up after the nudges go unanswered.


        Voice only (telephony + WebRTC voice). Driven by LiveKit's VAD-based
        ``away``

        user state, so it has no effect on text/chat conversations. Always on —
        there is

        no enable/disable toggle; tune the timings and nudge copy instead.
    UserInitiatesMessage:
      properties:
        type:
          type: string
          const: user_initiates
          title: User Initiates
          default: user_initiates
        action_grid:
          anyOf:
            - $ref: '#/components/schemas/StartingActionGrid'
            - type: 'null'
          title: Action Grid
      type: object
      title: UserInitiatesMessage
      description: User initiates starting message configuration.
    BotInitiatesStaticMessage:
      properties:
        type:
          type: string
          const: bot_initiates_static
          title: Exact Text
          default: bot_initiates_static
        text:
          type: string
          title: Text
        allow_interruptions:
          type: boolean
          title: Allow Interruptions
          default: true
        action_grid:
          anyOf:
            - $ref: '#/components/schemas/StartingActionGrid'
            - type: 'null'
          title: Action Grid
        pregenerated_greeting_audio:
          type: boolean
          title: Pre-generated Greeting Audio
          description: >-
            When true, the agent looks up a pre-generated recording of this
            greeting — synthesized once with the configured TTS voice and stored
            in the recording S3 bucket, content-addressed over ``text`` + the
            full TTS config — and plays it instead of synthesizing ``text`` with
            TTS on every conversation. Useful for truly-static greetings (e.g.
            inbound) where the same opening line is spoken every time. The
            recording is keyed by a fingerprint the runtime recomputes from the
            rendered text + TTS config, so if no recording matches (e.g. the
            text was edited but not regenerated, or the voice changed) the agent
            transparently falls back to live TTS. Only meaningful for
            non-templated ``text``; the builder pre-generates the recording.
          default: false
      type: object
      required:
        - text
      title: BotInitiatesStaticMessage
      description: Bot initiates static starting message configuration.
    BotInitiatesDynamicMessage:
      properties:
        type:
          type: string
          const: bot_initiates_dynamic
          title: Use Instructions
          default: bot_initiates_dynamic
        prompt:
          type: string
          title: Instructions
        allow_interruptions:
          type: boolean
          title: Allow Interruptions
          default: true
        action_grid:
          anyOf:
            - $ref: '#/components/schemas/StartingActionGrid'
            - type: 'null'
          title: Action Grid
      type: object
      required:
        - prompt
      title: BotInitiatesDynamicMessage
      description: Bot initiates dynamic starting message configuration.
    ToolCall:
      properties:
        name:
          type: string
          title: Name
        description:
          type: string
          title: Description
        properties:
          additionalProperties: true
          type: object
          title: Properties
        required:
          items:
            type: string
          type: array
          title: Required
        actions:
          items:
            oneOf:
              - $ref: '#/components/schemas/PlayMessageAction'
              - $ref: '#/components/schemas/ColdTransferAction'
              - $ref: '#/components/schemas/ConferenceAction'
              - $ref: '#/components/schemas/LeaveRoomAction'
              - $ref: '#/components/schemas/WaitAction'
              - $ref: '#/components/schemas/HangupAction'
              - $ref: '#/components/schemas/WorkflowAction'
              - $ref: '#/components/schemas/KnowledgeBaseAction'
              - $ref: '#/components/schemas/CustomDataAction'
              - $ref: '#/components/schemas/PlayAudioAction'
              - $ref: '#/components/schemas/StopAudioAction'
              - $ref: '#/components/schemas/WarmTransferAction'
              - $ref: '#/components/schemas/DtmfAction'
              - $ref: '#/components/schemas/UpdateEndpointingAction'
              - $ref: '#/components/schemas/HandoffAction'
            title: Action
            discriminator:
              propertyName: type
              mapping:
                cold_transfer:
                  $ref: '#/components/schemas/ColdTransferAction'
                conference:
                  $ref: '#/components/schemas/ConferenceAction'
                custom_data:
                  $ref: '#/components/schemas/CustomDataAction'
                dtmf:
                  $ref: '#/components/schemas/DtmfAction'
                handoff:
                  $ref: '#/components/schemas/HandoffAction'
                hangup:
                  $ref: '#/components/schemas/HangupAction'
                knowledge_base:
                  $ref: '#/components/schemas/KnowledgeBaseAction'
                leave_room:
                  $ref: '#/components/schemas/LeaveRoomAction'
                play_audio:
                  $ref: '#/components/schemas/PlayAudioAction'
                play_message:
                  $ref: '#/components/schemas/PlayMessageAction'
                stop_audio:
                  $ref: '#/components/schemas/StopAudioAction'
                update_endpointing:
                  $ref: '#/components/schemas/UpdateEndpointingAction'
                wait:
                  $ref: '#/components/schemas/WaitAction'
                warm_transfer:
                  $ref: '#/components/schemas/WarmTransferAction'
                workflow:
                  $ref: '#/components/schemas/WorkflowAction'
          type: array
          title: Actions
        actions_on_error:
          items:
            oneOf:
              - $ref: '#/components/schemas/PlayMessageAction'
              - $ref: '#/components/schemas/ColdTransferAction'
              - $ref: '#/components/schemas/ConferenceAction'
              - $ref: '#/components/schemas/LeaveRoomAction'
              - $ref: '#/components/schemas/WaitAction'
              - $ref: '#/components/schemas/HangupAction'
              - $ref: '#/components/schemas/WorkflowAction'
              - $ref: '#/components/schemas/KnowledgeBaseAction'
              - $ref: '#/components/schemas/CustomDataAction'
              - $ref: '#/components/schemas/PlayAudioAction'
              - $ref: '#/components/schemas/StopAudioAction'
              - $ref: '#/components/schemas/WarmTransferAction'
              - $ref: '#/components/schemas/DtmfAction'
              - $ref: '#/components/schemas/UpdateEndpointingAction'
              - $ref: '#/components/schemas/HandoffAction'
            title: Action
            discriminator:
              propertyName: type
              mapping:
                cold_transfer:
                  $ref: '#/components/schemas/ColdTransferAction'
                conference:
                  $ref: '#/components/schemas/ConferenceAction'
                custom_data:
                  $ref: '#/components/schemas/CustomDataAction'
                dtmf:
                  $ref: '#/components/schemas/DtmfAction'
                handoff:
                  $ref: '#/components/schemas/HandoffAction'
                hangup:
                  $ref: '#/components/schemas/HangupAction'
                knowledge_base:
                  $ref: '#/components/schemas/KnowledgeBaseAction'
                leave_room:
                  $ref: '#/components/schemas/LeaveRoomAction'
                play_audio:
                  $ref: '#/components/schemas/PlayAudioAction'
                play_message:
                  $ref: '#/components/schemas/PlayMessageAction'
                stop_audio:
                  $ref: '#/components/schemas/StopAudioAction'
                update_endpointing:
                  $ref: '#/components/schemas/UpdateEndpointingAction'
                wait:
                  $ref: '#/components/schemas/WaitAction'
                warm_transfer:
                  $ref: '#/components/schemas/WarmTransferAction'
                workflow:
                  $ref: '#/components/schemas/WorkflowAction'
          type: array
          title: Actions on Error
        output:
          anyOf:
            - type: string
            - type: 'null'
          title: Output
      type: object
      required:
        - name
        - description
        - actions
      title: ToolCall
      description: Call-specific actions configuration.
    BuiltInTools:
      properties:
        time_tool:
          anyOf:
            - $ref: '#/components/schemas/TimeToolConfig'
            - type: 'null'
          title: Time Tool
        widgets:
          anyOf:
            - $ref: '#/components/schemas/WidgetsConfig'
            - type: 'null'
          title: Widgets
        forms:
          anyOf:
            - $ref: '#/components/schemas/FormsConfig'
            - type: 'null'
          title: Forms
        web_search:
          anyOf:
            - $ref: '#/components/schemas/WebSearchToolConfig'
            - type: 'null'
          title: Web Search
        retrieve_webpage:
          anyOf:
            - $ref: '#/components/schemas/RetrieveWebpageToolConfig'
            - type: 'null'
          title: Retrieve Webpage
        continue_on_phone:
          anyOf:
            - $ref: '#/components/schemas/ContinueOnPhoneToolConfig'
            - type: 'null'
          title: Continue on Phone
        images:
          anyOf:
            - $ref: '#/components/schemas/ImagesToolConfig'
            - type: 'null'
          title: Images
      type: object
      title: BuiltInTools
      description: Configuration for platform built-in tools.
    AgentLanguage:
      properties:
        languages:
          items:
            type: string
          type: array
          minItems: 1
          title: Languages
      type: object
      required:
        - languages
      title: AgentLanguage
      description: Agent language configuration.
    SttLlmTtsStack:
      properties:
        type:
          type: string
          const: stt_llm_tts
          title: STT-LLM-TTS Pipeline
          default: stt_llm_tts
        turn_detection:
          $ref: '#/components/schemas/TurnDetection'
          title: Turn Detection
        stt:
          $ref: '#/components/schemas/Stt'
          title: Speech-to-Text
        llm:
          $ref: '#/components/schemas/Llm'
          title: Large Language Model
        tts:
          $ref: '#/components/schemas/Tts'
          title: Text-to-Speech
        vad:
          anyOf:
            - $ref: '#/components/schemas/Vad'
            - type: 'null'
          title: Voice Activity Detection
        vision_llm:
          anyOf:
            - $ref: '#/components/schemas/VisionLlm'
            - type: 'null'
          title: Vision LLM
        interruption:
          anyOf:
            - $ref: '#/components/schemas/InterruptionConfig'
            - type: 'null'
          title: Interruption Config
        endpointing:
          anyOf:
            - $ref: '#/components/schemas/EndpointingConfig'
            - type: 'null'
          title: Endpointing Config
        text_normalization:
          anyOf:
            - $ref: '#/components/schemas/TextNormalizationConfig'
            - type: 'null'
          title: Text Normalization
      type: object
      required:
        - turn_detection
        - stt
        - llm
        - tts
      title: SttLlmTtsStack
      description: STT-LLM-TTS stack configuration.
    RealtimeStack:
      properties:
        type:
          type: string
          const: realtime
          title: Realtime API
          default: realtime
        llm:
          $ref: '#/components/schemas/Llm'
          title: Language Model
        turn_detection:
          anyOf:
            - $ref: '#/components/schemas/TurnDetection'
            - type: 'null'
          title: Turn Detection
        stt:
          anyOf:
            - $ref: '#/components/schemas/Stt'
            - type: 'null'
          title: Speech-to-Text
        vad:
          anyOf:
            - $ref: '#/components/schemas/Vad'
            - type: 'null'
          title: Voice Activity Detection
        vision_llm:
          anyOf:
            - $ref: '#/components/schemas/VisionLlm'
            - type: 'null'
          title: Vision LLM
      type: object
      required:
        - llm
      title: RealtimeStack
      description: Realtime stack configuration.
    ChannelOverride:
      properties:
        instructions:
          anyOf:
            - type: string
            - type: 'null'
          title: Instructions
        instructions_mode:
          $ref: '#/components/schemas/ChannelInstructionMode'
          title: Instructions Mode
          default: append
        starting_message:
          anyOf:
            - oneOf:
                - $ref: '#/components/schemas/UserInitiatesMessage'
                - $ref: '#/components/schemas/BotInitiatesStaticMessage'
                - $ref: '#/components/schemas/BotInitiatesDynamicMessage'
              discriminator:
                propertyName: type
                mapping:
                  bot_initiates_dynamic:
                    $ref: '#/components/schemas/BotInitiatesDynamicMessage'
                  bot_initiates_static:
                    $ref: '#/components/schemas/BotInitiatesStaticMessage'
                  user_initiates:
                    $ref: '#/components/schemas/UserInitiatesMessage'
            - type: 'null'
          title: Starting Message
        max_tool_steps:
          anyOf:
            - type: integer
              minimum: 1
            - type: 'null'
          title: Max Tool Steps
        llm:
          anyOf:
            - oneOf:
                - $ref: '#/components/schemas/AzureOpenAIProvider'
                - $ref: '#/components/schemas/CerebrasProvider'
                - $ref: '#/components/schemas/GoogleProvider'
                - $ref: '#/components/schemas/LiveKitInferenceProvider'
                - $ref: '#/components/schemas/OpenAIProvider'
                - $ref: '#/components/schemas/VercelProvider'
              title: Provider
              discriminator:
                propertyName: provider
                mapping:
                  azure_openai:
                    $ref: '#/components/schemas/AzureOpenAIProvider'
                  cerebras:
                    $ref: '#/components/schemas/CerebrasProvider'
                  google:
                    $ref: '#/components/schemas/GoogleProvider'
                  livekit:
                    $ref: '#/components/schemas/LiveKitInferenceProvider'
                  openai:
                    $ref: '#/components/schemas/OpenAIProvider'
                  vercel:
                    $ref: '#/components/schemas/VercelProvider'
            - type: 'null'
          title: LLM Override
          description: >-
            Override the base stack LLM for this channel. Async channels only
            (openai, google, cerebras, vercel, azure_openai).
      type: object
      title: ChannelOverride
      description: >-
        Group 1 — per-channel LLM-inference steering (fine-tune the base
        prompt).


        Consumed by the async engine (``resolve_channel_config``): it changes
        how

        the agent *thinks/responds* on a channel, not how the reply is rendered.
    SmsProperties:
      properties:
        channel:
          type: string
          const: sms
          title: Channel
          default: sms
        enabled:
          type: boolean
          title: Enabled
          default: true
        body_template:
          type: string
          title: Body Template
          default: '{{agent_response}}'
        max_segments:
          type: integer
          minimum: 1
          title: Max Segments
          default: 3
        on_overflow:
          type: string
          enum:
            - truncate
            - split
          title: On Overflow
          default: truncate
        strip_markdown:
          type: boolean
          title: Strip Markdown
          default: true
        allow_unicode:
          type: boolean
          title: Allow Unicode
          default: true
        append_opt_out_footer:
          type: boolean
          title: Append Opt-out Footer
          default: false
      type: object
      title: SmsProperties
      description: Group 2 — SMS-exclusive transport/presentation properties.
    EmailProperties:
      properties:
        channel:
          type: string
          const: email
          title: Channel
          default: email
        enabled:
          type: boolean
          title: Enabled
          default: true
        body_template:
          type: string
          title: Body Template
          default: '{{agent_response}}'
        body_format:
          type: string
          enum:
            - multipart
            - html
            - plaintext
          title: Body Format
          default: multipart
        subject_template:
          type: string
          title: Subject Template
          default: 'Re: {{subject}}'
        default_subject:
          anyOf:
            - type: string
            - type: 'null'
          title: Default Subject
        from_display_name:
          anyOf:
            - type: string
            - type: 'null'
          title: From Display Name
        signature:
          anyOf:
            - type: string
            - type: 'null'
          title: Signature
        template_wrapper:
          anyOf:
            - type: string
            - type: 'null'
          title: Template Wrapper
        include_unsubscribe_footer:
          type: boolean
          title: Include Unsubscribe Footer
          default: true
        quote_history:
          type: boolean
          title: Quote History
          default: false
        cc_reply_policy:
          type: string
          enum:
            - conditional
            - never
            - always
          title: CC Reply Policy
          default: conditional
        require_dmarc_pass:
          type: boolean
          title: Require DMARC Pass
          default: false
        auto_close_on_conclusion:
          type: boolean
          title: Auto Close On Conclusion
          default: true
      type: object
      title: EmailProperties
      description: Group 2 — Email-exclusive transport/presentation properties.
    TextProperties:
      properties:
        channel:
          type: string
          const: text
          title: Channel
          default: text
        body_template:
          type: string
          title: Body Template
          default: '{{agent_response}}'
      type: object
      title: TextProperties
      description: >-
        Group 2 — first-party API TEXT channel (no transport mechanics).


        Note: there is intentionally no ``enabled`` flag. The Text API is a

        synchronous responder (see ``services/text_channel.py``) that always
        returns

        the reply; it never consults an enabled gate, so the field would be dead

        config. The Text channel is always on.
    LivekitProvider:
      properties:
        provider:
          type: string
          const: livekit
          title: Provider
          default: livekit
        model:
          oneOf:
            - $ref: '#/components/schemas/LivekitBVCModel'
            - $ref: '#/components/schemas/LivekitBVCTelephonyModel'
          title: Model
          discriminator:
            propertyName: name
            mapping:
              bvc:
                $ref: '#/components/schemas/LivekitBVCModel'
              bvc_telephony:
                $ref: '#/components/schemas/LivekitBVCTelephonyModel'
      type: object
      required:
        - model
      title: LivekitProvider
      description: LiveKit noise cancellation provider.
    VoicemailToolCallOverrides:
      properties:
        beep_detection_threshold:
          type: number
          maximum: 1
          minimum: 0
          title: Beep Detection Threshold
          description: Confidence threshold (0.0-1.0) for beep after voice prompt
          default: 0.9
        beep_detection_timeout:
          type: integer
          exclusiveMinimum: 0
          title: Beep Detection Timeout (seconds)
          description: Max seconds to wait for beep after voicemail voice prompt
          default: 10
        name:
          type: string
          title: Tool Call Name
          description: >-
            Tool call function name the LLM can invoke (e.g.,
            'voicemail_detected')
          default: voicemail_detected
        description:
          type: string
          title: Tool Call Description
          description: >-
            Description/when to invoke the tool (e.g., when voicemail greeting
            is detected)
          default: whenever you hear 'you have reached a voicemail'
      type: object
      title: VoicemailToolCallOverrides
      description: |-
        Overrides for voicemail tool-call based detection and prompt handling.
        If not provided, then the default values will be used.
        beep_detection_threshold: 0.9
        beep_detection_timeout: 10
        name: voicemail_detected
        description: whenever you hear 'you have reached a voicemail'
    VoicemailPlayMessageAction:
      properties:
        message:
          type: string
          title: Message
        generate:
          type: boolean
          title: Generate
          default: false
      type: object
      required:
        - message
      title: Voicemail Play Message
    NudgeStaticMessage:
      properties:
        type:
          type: string
          const: bot_initiates_static
          title: Exact Text
          default: bot_initiates_static
        text:
          type: string
          title: Text
      type: object
      required:
        - text
      title: NudgeStaticMessage
      description: Inactivity nudge spoken as exact text (verbatim via TTS).
    NudgeDynamicMessage:
      properties:
        type:
          type: string
          const: bot_initiates_dynamic
          title: Use Instructions
          default: bot_initiates_dynamic
        prompt:
          type: string
          title: Instructions
      type: object
      required:
        - prompt
      title: NudgeDynamicMessage
      description: Inactivity nudge generated by the LLM from instructions.
    StartingActionGrid:
      properties:
        title:
          anyOf:
            - type: string
            - type: 'null'
          title: Title
          description: Optional heading (defaults to 'How can I help?').
        items:
          items:
            $ref: '#/components/schemas/StartingActionGridItem'
          type: array
          title: Items
      type: object
      title: StartingActionGrid
      description: >-
        Optional action grid shown alongside the starting message (chat UI).


        Rendered on WebRTC sessions as a grid of quick-action buttons. Each
        item's

        ``label`` is sent back verbatim as the action value when the user taps
        it.
    PlayMessageAction:
      properties:
        type:
          type: string
          const: play_message
          title: Type
          default: play_message
        message:
          type: string
          title: Message
        generate:
          type: boolean
          title: Generate
          default: false
        wait_for_playout:
          type: boolean
          title: Wait for Playout
          default: true
        allow_interruptions:
          type: boolean
          title: Allow Interruptions
          default: true
        condition:
          anyOf:
            - type: string
            - type: 'null'
          title: Condition
      type: object
      required:
        - message
      title: Play Message
    ColdTransferAction:
      properties:
        type:
          type: string
          const: cold_transfer
          title: Type
          default: cold_transfer
        transfer_number:
          type: string
          title: Transfer Number
        displayed_number:
          $ref: '#/components/schemas/DisplayedNumberType'
          title: Displayed Number
          default: transferee_number
        condition:
          anyOf:
            - type: string
            - type: 'null'
          title: Condition
      type: object
      required:
        - transfer_number
      title: Cold Transfer
      description: Cold transfer configuration.
    ConferenceAction:
      properties:
        type:
          type: string
          const: conference
          title: Type
          default: conference
        conference_number:
          type: string
          title: Conference Number
        condition:
          anyOf:
            - type: string
            - type: 'null'
          title: Condition
      type: object
      required:
        - conference_number
      title: Add to Conference
      description: Conference configuration.
    LeaveRoomAction:
      properties:
        type:
          type: string
          const: leave_room
          title: Type
          default: leave_room
        condition:
          anyOf:
            - type: string
            - type: 'null'
          title: Condition
      type: object
      title: Leave Room
    WaitAction:
      properties:
        type:
          type: string
          const: wait
          title: Type
          default: wait
        seconds:
          type: number
          title: Seconds
          default: 1
        condition:
          anyOf:
            - type: string
            - type: 'null'
          title: Condition
      type: object
      title: Wait
    HangupAction:
      properties:
        type:
          type: string
          const: hangup
          title: Type
          default: hangup
        condition:
          anyOf:
            - type: string
            - type: 'null'
          title: Condition
      type: object
      title: Hangup
    KnowledgeBaseAction:
      properties:
        type:
          type: string
          const: knowledge_base
          title: Type
          default: knowledge_base
        dataset_id:
          type: string
          title: Dataset ID
        query:
          type: string
          title: Query
        top_n:
          type: integer
          title: Top N Results
          default: 5
        condition:
          anyOf:
            - type: string
            - type: 'null'
          title: Condition
      type: object
      required:
        - dataset_id
        - query
      title: Knowledge Base
    CustomDataAction:
      properties:
        type:
          type: string
          const: custom_data
          title: Type
          default: custom_data
        table:
          type: string
          title: Table Name
        operation:
          type: string
          enum:
            - get_row
            - query
            - saved_query
            - claim
          title: Operation
          default: query
        query:
          anyOf:
            - type: string
            - type: 'null'
          title: Stored Query
          description: >-
            For saved_query: the name of a stored SQL query on this table.
            Arguments are bound, never templated into the SQL.
        patch:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Claim Patch
          description: >-
            For claim: the declared properties to set on the row that is taken,
            e.g. {"used": true}. STATIC — it comes from this config, never from
            the model's arguments, so the model chooses which row and a human
            decides what happens to it. Cannot touch the row key.
        row_key:
          anyOf:
            - type: string
            - type: 'null'
          title: Row Key Template
          description: 'For get_row: a Jinja template resolving to the record''s key.'
        filters:
          items:
            $ref: '#/components/schemas/CustomDataFilter'
          type: array
          title: Filters
        order:
          items:
            $ref: '#/components/schemas/CustomDataSort'
          type: array
          title: Sort
        limit:
          type: integer
          maximum: 50
          minimum: 1
          title: Limit
          default: 5
        condition:
          anyOf:
            - type: string
            - type: 'null'
          title: Condition
      type: object
      required:
        - table
      title: Custom Data
      description: >-
        Read a Custom Data table during the call.


        Reads are served from Postgres in-VPC with no call to any external
        system on

        the live path. Filters and sorts address schema-declared properties
        only,

        and the SQL casts come from the declared types — so a price sorts as a

        number and a date as a date.


        Reads are the bulk of it. The one write is `claim`, which is
        deliberately

        the narrowest write that could exist: a fixed statement, a patch
        declared in

        config rather than supplied by the model, and no way to name a row
        directly.

        Everything wider stays out of the agent path (docs/prd/custom-data.md
        §5).
    PlayAudioAction:
      properties:
        type:
          type: string
          const: play_audio
          title: Type
          default: play_audio
        audio_url:
          type: string
          title: Audio URL
          description: Optional URL to an MP3 or WAV file.
        loop:
          type: boolean
          title: Loop
          default: false
        condition:
          anyOf:
            - type: string
            - type: 'null'
          title: Condition
      type: object
      required:
        - audio_url
      title: Play Audio
    StopAudioAction:
      properties:
        type:
          type: string
          const: stop_audio
          title: Type
          default: stop_audio
        condition:
          anyOf:
            - type: string
            - type: 'null'
          title: Condition
      type: object
      title: Stop Audio
    WarmTransferAction:
      properties:
        type:
          type: string
          const: warm_transfer
          title: Type
          default: warm_transfer
        transfer_number:
          type: string
          title: Transfer Number
        queue_timeout:
          type: integer
          title: QueueTimeout (seconds)
          description: >-
            The timeout for the supervisor to join the queue and be connected to
            the customer
          default: 30
        hold_music_url:
          type: string
          title: Hold music file/URL (.wav/.mp3); falls back to tone
          default: https://onhold2go.co.uk/song-demos/chill-out/city-skyline.mp3
        supervisor_instructions:
          type: string
          title: What should the AI tell the supervisor?
          description: >-
            Instructions for how the AI briefs the supervisor before connecting
            them to the caller
          default: >-
            Brief the supervisor on who the caller is, the context of the
            conversation, and the handoff goal.
        on_transfer_failed_message:
          type: string
          title: On Transfer Failed Message
          default: >-
            Sorry, I couldn't connect you right now. Can I take a message or try
            another number?
        on_successful_transfer_message:
          type: string
          title: On Successful Transfer Message
          default: Connecting you now. Please stay on the line.
        on_customer_disconnected_message:
          type: string
          title: On Customer Disconnected Message
          default: The caller has disconnected.
        on_supervisor_declined_message:
          type: string
          title: If the supervisor can't take the call
          description: >-
            Message spoken to the caller when the supervisor declines or is
            unavailable
          default: >-
            They're unavailable right now. Would you like me to take a message
            or schedule a callback?
        condition:
          anyOf:
            - type: string
            - type: 'null'
          title: Condition
      type: object
      required:
        - transfer_number
      title: Warm Transfer
      description: Warm transfer configuration.
    DtmfAction:
      properties:
        type:
          type: string
          const: dtmf
          title: Type
          default: dtmf
        input:
          type: string
          title: Input
          description: 'String to send - alphanumeric characters, *, or #'
        multi_tap_method:
          type: string
          title: Multi-Tap Method
          description: >-
            For letters: use multi-tap method (like old phone texting). Accepts
            boolean values or template variables.
          default: 'False'
        min_delay:
          type: number
          title: Min Delay (seconds)
          description: Minimum delay in seconds between DTMF codes
          default: 0.8
        max_delay:
          type: number
          title: Max Delay (seconds)
          description: Maximum delay in seconds between DTMF codes
          default: 1.5
        condition:
          anyOf:
            - type: string
            - type: 'null'
          title: Condition
      type: object
      required:
        - input
      title: Send DTMF
      description: DTMF action configuration.
    UpdateEndpointingAction:
      properties:
        type:
          type: string
          const: update_endpointing
          title: Type
          default: update_endpointing
        min_endpointing_delay:
          anyOf:
            - type: number
            - type: 'null'
          title: Min Endpointing Delay (seconds)
          description: Minimum endpointing delay
        max_endpointing_delay:
          anyOf:
            - type: number
            - type: 'null'
          title: Max Endpointing Delay (seconds)
          description: Maximum endpointing delay
        condition:
          anyOf:
            - type: string
            - type: 'null'
          title: Condition
      type: object
      title: Update Endpointing
      description: Update endpointing configuration.
    HandoffAction:
      properties:
        type:
          type: string
          const: handoff
          title: Type
          default: handoff
        connection_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Connection
          description: >-
            handoff_connections row to escalate through — the helpdesk, its
            credentials and its timers.
        entry_point_address:
          anyOf:
            - type: string
            - type: 'null'
          title: Entry Point Address
          description: >-
            Provider-side inbox this escalation lands in (Gladly: the Entry
            Point 'Address'). This is the queue.
        custom_channel_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Custom Channel ID
          description: >-
            Usually blank. Entry points under one custom channel share its id;
            set this only if this queue is on a different channel.
        group_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Group ID
          description: Optional message-group id, sent alongside the entry point.
        group_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Group Name
          description: Optional message-group name, sent alongside group_id.
        channels:
          anyOf:
            - additionalProperties:
                $ref: '#/components/schemas/HandoffChannelRoute'
              propertyNames:
                $ref: '#/components/schemas/ChannelKey'
              type: object
            - type: 'null'
          title: Per-channel Routing
          description: >-
            Override where this rule lands, per channel. One helpdesk usually
            needs a different connection for chat than for email, and this is
            the same rule either way — same name, same description, same copy.
            Only the channels with a relay can escalate at all (see
            handoff_intent.RELAY_CHANNELS); an entry for any other is inert.
        handoff_message:
          anyOf:
            - type: string
            - type: 'null'
          title: Handoff Message
          description: >-
            Deterministic reply sent the moment this handoff opens (the model
            never paraphrases it).
        waiting_message:
          anyOf:
            - type: string
            - type: 'null'
          title: Waiting Message
          description: >-
            Posted when no human has replied within the connection's no-reply
            window.
        unavailable_message:
          anyOf:
            - type: string
            - type: 'null'
          title: Unavailable Message
          description: >-
            Said to the customer when this handoff could not be opened. The bot
            must never promise a human it cannot reach.
        on_unavailable:
          anyOf:
            - type: string
              enum:
                - stay_with_bot
                - end
            - type: 'null'
          title: On Unavailable
          description: What to do when the handoff cannot be opened.
        require_identity:
          anyOf:
            - type: string
              enum:
                - 'off'
                - email
                - phone
                - either
            - type: 'null'
          title: Require Identity
          description: >-
            Contact details this escalation must have before it opens. When the
            conversation does not already contain them, the customer is shown a
            form and the handoff opens on submit. 'off' (the default) escalates
            immediately.
        identity_message:
          anyOf:
            - type: string
            - type: 'null'
          title: Identity Request Message
          description: >-
            Said to the customer when the form is shown, in place of the handoff
            message.
        identity_form_title:
          anyOf:
            - type: string
            - type: 'null'
          title: Identity Form Title
          description: Heading on the form shown to the customer.
        include_attachments:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Send Attachments
          description: >-
            Forward the photos and files the customer shared with the agent to
            the human, and note them in the pushed transcript. Off by default:
            an escalation about a late order should not carry the ID photo
            someone uploaded earlier to verify a discount. A message that was
            nothing but attachments is still noted as such when off, or it would
            vanish from the transcript entirely.
        condition:
          anyOf:
            - type: string
            - type: 'null'
          title: Condition
      type: object
      title: Escalate to a human
      description: >-
        Hand this conversation to a human, as an action on any config tool.


        This is the ONLY way to define an escalation — there is no built-in
        handoff

        tool, exactly as there is no built-in cold transfer. The reason is
        routing:

        with Gladly the entry point + group IS the queue, so a support desk with

        billing / returns / technical needs one rule each. Domain-named tools

        (``escalate_billing_dispute``) also make the model markedly better at

        choosing than one generic tool plus a free-text reason.


        Everything here is per-ROUTE. Everything that belongs to the helpdesk
        rather

        than the route — the credentials, how long it takes to answer, what
        context

        it wants — lives on the ``handoff_connections`` row and is folded in by

        ``handoff_intent.resolve_handoff_action_config``. The split test is
        simply

        whether the value depends on the helpdesk or on this particular
        escalation.


        Customer-facing copy is deliberately here and not on the connection: it
        is

        spoken in the agent's voice and language, and one connection is shared
        by

        every agent in the org.


        ``custom_channel_id`` is rarely set. In Gladly a custom channel CONTAINS

        entry points, so queues under one channel share its id and only the
        entry

        point address varies; it exists for the one-channel-per-queue topology.


        The route fields above are the DEFAULT route. ``channels`` overrides
        them

        per channel, because a helpdesk generally exposes chat and email as
        separate

        integrations: same escalation, same description the model routes on, two

        destinations. Nothing else is per-channel — the copy is spoken in the

        agent's voice regardless of the medium.


        Like every other action this records INTENT and returns; the runtime
        opens

        the handoff at its own boundary. Nothing here raises across layers.
    TimeToolConfig:
      properties:
        default_timezone:
          anyOf:
            - type: string
            - type: 'null'
          title: Default Timezone
          description: >-
            Default IANA timezone name (e.g., 'America/New_York'). Falls back to
            UTC if not provided.
      type: object
      title: TimeToolConfig
      description: Configuration for the get_current_time built-in tool.
    WidgetsConfig:
      properties:
        allowed:
          anyOf:
            - items:
                $ref: '#/components/schemas/WidgetType'
              type: array
            - type: 'null'
          title: Allowed Widgets
          description: >-
            List of allowed widget types. If None/omitted, ALL widget types are
            enabled.
      type: object
      title: WidgetsConfig
      description: Configuration for widget tools.
    FormsConfig:
      properties:
        forms:
          items:
            $ref: '#/components/schemas/FormDefinition'
          type: array
          minItems: 1
          title: Forms
          description: >-
            Data-collection forms that can be shown as widgets during
            conversations.
      type: object
      required:
        - forms
      title: FormsConfig
      description: Configuration for data-collection form tools shown during conversations.
    WebSearchToolConfig:
      properties: {}
      type: object
      title: WebSearchToolConfig
      description: Configuration for the web_search built-in tool.
    RetrieveWebpageToolConfig:
      properties: {}
      type: object
      title: RetrieveWebpageToolConfig
      description: Configuration for the retrieve_webpage built-in tool.
    ContinueOnPhoneToolConfig:
      properties:
        agent_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Agent ID
          description: >-
            Agent to use for the phone call. Falls back to the current agent if
            not set.
        version:
          anyOf:
            - type: integer
            - type: 'null'
          title: Version
          description: >-
            Specific agent version number. Only used with agent_id. Uses latest
            published if not set.
        agent_number:
          anyOf:
            - type: string
            - type: 'null'
          title: Agent Number
          description: >-
            E.164 phone number to call FROM. Falls back to the number assigned
            to the agent if not set.
      type: object
      title: ContinueOnPhoneToolConfig
      description: Configuration for the continue_on_phone built-in tool.
    ImagesToolConfig:
      properties:
        routes:
          items:
            $ref: '#/components/schemas/ImageTypeRoute'
          type: array
          title: Routes
        default_tier:
          type: string
          title: Default Tier
          default: fast
        tiers:
          anyOf:
            - $ref: '#/components/schemas/ImageTierConfig'
            - type: 'null'
          title: Tiers
        max_escalations_per_conversation:
          type: integer
          title: Max Escalations per Conversation
          default: 3
        max_analyses_per_conversation:
          type: integer
          title: Max Analyses per Conversation
          default: 20
        allow_user_uploads:
          type: boolean
          title: Allow User Uploads
          default: true
        floor_overrides:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Floor Overrides
        pii_fields:
          items:
            type: string
          type: array
          title: PII Fields
        on_blocked:
          type: string
          enum:
            - refuse
            - flag
          title: On Blocked
          default: refuse
      type: object
      title: ImagesToolConfig
      description: >-
        Configuration for the images built-in tool suite (analyze_image /
        list_images).


        `images: {}` (an empty object) enables the cheap default: floor schema
        only, fast

        tier, uploads allowed. `None` means the feature is off.
    TurnDetection:
      properties:
        models:
          items:
            oneOf:
              - $ref: '#/components/schemas/LivekitTurnDetectionProvider'
              - $ref: '#/components/schemas/AnyreachTurnDetectionProvider'
            discriminator:
              propertyName: provider
              mapping:
                anyreach:
                  $ref: '#/components/schemas/AnyreachTurnDetectionProvider'
                livekit:
                  $ref: '#/components/schemas/LivekitTurnDetectionProvider'
          type: array
          minItems: 1
          title: Turn Detection Models
      type: object
      required:
        - models
      title: TurnDetection
      description: Turn Detection configuration.
    Stt:
      properties:
        models:
          items:
            oneOf:
              - $ref: '#/components/schemas/DeepgramProvider'
              - $ref: '#/components/schemas/LiveKitInferenceSttProvider'
              - $ref: '#/components/schemas/GladiaProvider'
              - $ref: '#/components/schemas/AnyReachSttProvider'
            discriminator:
              propertyName: provider
              mapping:
                anyreach:
                  $ref: '#/components/schemas/AnyReachSttProvider'
                deepgram:
                  $ref: '#/components/schemas/DeepgramProvider'
                gladia:
                  $ref: '#/components/schemas/GladiaProvider'
                livekit:
                  $ref: '#/components/schemas/LiveKitInferenceSttProvider'
          type: array
          minItems: 1
          title: Speech-to-Text Models
        on_failure:
          anyOf:
            - $ref: '#/components/schemas/SttOnFailure'
            - type: 'null'
          title: On Failure
      type: object
      required:
        - models
      title: Stt
      description: STT configuration.
    Llm:
      properties:
        models:
          items:
            oneOf:
              - $ref: '#/components/schemas/AzureOpenAIProvider'
              - $ref: '#/components/schemas/CerebrasProvider'
              - $ref: '#/components/schemas/GoogleProvider'
              - $ref: '#/components/schemas/LiveKitInferenceProvider'
              - $ref: '#/components/schemas/OpenAIProvider'
              - $ref: '#/components/schemas/VercelProvider'
            title: Provider
            discriminator:
              propertyName: provider
              mapping:
                azure_openai:
                  $ref: '#/components/schemas/AzureOpenAIProvider'
                cerebras:
                  $ref: '#/components/schemas/CerebrasProvider'
                google:
                  $ref: '#/components/schemas/GoogleProvider'
                livekit:
                  $ref: '#/components/schemas/LiveKitInferenceProvider'
                openai:
                  $ref: '#/components/schemas/OpenAIProvider'
                vercel:
                  $ref: '#/components/schemas/VercelProvider'
          type: array
          minItems: 1
          title: Large Language Models
        on_failure:
          anyOf:
            - $ref: '#/components/schemas/LlmOnFailure'
            - type: 'null'
          title: On Failure
      type: object
      required:
        - models
      title: Llm
      description: LLM configuration.
    Tts:
      properties:
        models:
          items:
            oneOf:
              - $ref: '#/components/schemas/CartesiaProvider'
              - $ref: '#/components/schemas/ElevenLabsProvider'
              - $ref: '#/components/schemas/LiveKitInferenceTtsProvider'
            discriminator:
              propertyName: provider
              mapping:
                cartesia:
                  $ref: '#/components/schemas/CartesiaProvider'
                elevenlabs:
                  $ref: '#/components/schemas/ElevenLabsProvider'
                livekit:
                  $ref: '#/components/schemas/LiveKitInferenceTtsProvider'
          type: array
          minItems: 1
          title: Text-to-Speech Models
        on_failure:
          anyOf:
            - $ref: '#/components/schemas/TtsOnFailure'
            - type: 'null'
          title: On Failure
        pronunciations:
          anyOf:
            - additionalProperties:
                type: string
              type: object
            - type: 'null'
          title: Pronunciations
      type: object
      required:
        - models
      title: Tts
      description: TTS configuration.
    Vad:
      properties:
        models:
          items:
            oneOf:
              - $ref: '#/components/schemas/SileroProvider'
            discriminator:
              propertyName: provider
              mapping:
                silero:
                  $ref: '#/components/schemas/SileroProvider'
          type: array
          minItems: 1
          title: Voice Activity Detection Models
      type: object
      required:
        - models
      title: Vad
      description: VAD configuration.
    VisionLlm:
      properties:
        models:
          items:
            oneOf:
              - $ref: '#/components/schemas/AzureOpenAIProvider'
              - $ref: '#/components/schemas/CerebrasProvider'
              - $ref: '#/components/schemas/GoogleProvider'
              - $ref: '#/components/schemas/LiveKitInferenceProvider'
              - $ref: '#/components/schemas/OpenAIProvider'
              - $ref: '#/components/schemas/VercelProvider'
            title: Provider
            discriminator:
              propertyName: provider
              mapping:
                azure_openai:
                  $ref: '#/components/schemas/AzureOpenAIProvider'
                cerebras:
                  $ref: '#/components/schemas/CerebrasProvider'
                google:
                  $ref: '#/components/schemas/GoogleProvider'
                livekit:
                  $ref: '#/components/schemas/LiveKitInferenceProvider'
                openai:
                  $ref: '#/components/schemas/OpenAIProvider'
                vercel:
                  $ref: '#/components/schemas/VercelProvider'
          type: array
          minItems: 1
          title: Vision LLMs
        frame_rate:
          anyOf:
            - type: number
              maximum: 5
              minimum: 0.1
            - type: 'null'
          title: Frame Rate (fps)
          default: 1
      type: object
      required:
        - models
      title: VisionLlm
      description: Vision LLM for processing video frames.
    InterruptionConfig:
      properties:
        mode:
          type: string
          enum:
            - adaptive
            - vad
          title: Interruption Mode
          default: adaptive
        enabled:
          type: boolean
          title: Enable Interruptions
          default: true
        min_duration:
          anyOf:
            - type: number
            - type: 'null'
          title: Min Interruption Duration (seconds)
        min_words:
          anyOf:
            - type: integer
            - type: 'null'
          title: Min Interruption Words
        false_interruption_timeout:
          anyOf:
            - type: number
            - type: 'null'
          title: False Interruption Timeout (seconds)
          default: 2
        resume_false_interruption:
          type: boolean
          title: Resume After False Interruption
          default: true
      type: object
      title: InterruptionConfig
      description: Interruption handling configuration.
    EndpointingConfig:
      properties:
        min_delay:
          type: number
          title: Min Endpointing Delay (seconds)
          default: 0.05
        max_delay:
          type: number
          title: Max Endpointing Delay (seconds)
          default: 1.5
      type: object
      title: EndpointingConfig
      description: Endpointing configuration.
    TextNormalizationConfig:
      properties:
        enabled:
          type: boolean
          title: Enable Text Normalization for TTS
          default: false
        price_verbosity:
          $ref: '#/components/schemas/PriceVerbosity'
          title: Price Pronunciation Verbosity
          default: formal
        shorthand_cents_extra:
          items:
            type: integer
          type: array
          title: Additional Shorthand Cents Endings
          description: >-
            Extra cents values (0-99) that should use retail-style shorthand
            pronunciation under 'conversational' verbosity, in addition to the
            default set {49, 50, 95, 99}. Ignored under 'formal'.
      type: object
      title: TextNormalizationConfig
      description: Text normalization applied to LLM output before TTS.
    ChannelInstructionMode:
      type: string
      enum:
        - append
        - replace
      title: ChannelInstructionMode
      description: How per-channel instructions combine with the base instructions.
    AzureOpenAIProvider:
      properties:
        provider:
          type: string
          const: azure_openai
          title: Provider
          default: azure_openai
        model:
          oneOf:
            - $ref: '#/components/schemas/AzureOpenAIGPT4oModel'
            - $ref: '#/components/schemas/AzureOpenAIGPT4_1Model'
          title: Model
          discriminator:
            propertyName: name
            mapping:
              gpt-4.1:
                $ref: '#/components/schemas/AzureOpenAIGPT4_1Model'
              gpt-4o:
                $ref: '#/components/schemas/AzureOpenAIGPT4oModel'
      type: object
      required:
        - model
      title: Azure OpenAI
      description: Azure OpenAI LLM provider.
    CerebrasProvider:
      properties:
        provider:
          type: string
          const: cerebras
          title: Provider
          default: cerebras
        model:
          oneOf:
            - $ref: '#/components/schemas/CerebrasLlama3_3_70bModel'
            - $ref: '#/components/schemas/CerebrasZaiGlm4_7Model'
          title: Model
          discriminator:
            propertyName: name
            mapping:
              llama-3.3-70b:
                $ref: '#/components/schemas/CerebrasLlama3_3_70bModel'
              zai-glm-4.7:
                $ref: '#/components/schemas/CerebrasZaiGlm4_7Model'
      type: object
      required:
        - model
      title: Cerebras
      description: Cerebras LLM provider.
    GoogleProvider:
      properties:
        provider:
          type: string
          const: google
          title: Provider
          default: google
        model:
          oneOf:
            - $ref: '#/components/schemas/GoogleGemini25FlashModel'
            - $ref: '#/components/schemas/GoogleGemini25FlashLiteModel'
            - $ref: '#/components/schemas/GoogleGemini25ProModel'
            - $ref: '#/components/schemas/GoogleGemini35FlashModel'
          title: Model
          discriminator:
            propertyName: name
            mapping:
              gemini-2.5-flash:
                $ref: '#/components/schemas/GoogleGemini25FlashModel'
              gemini-2.5-flash-lite:
                $ref: '#/components/schemas/GoogleGemini25FlashLiteModel'
              gemini-2.5-pro:
                $ref: '#/components/schemas/GoogleGemini25ProModel'
              gemini-3.5-flash:
                $ref: '#/components/schemas/GoogleGemini35FlashModel'
      type: object
      required:
        - model
      title: Google
      description: >-
        Google Gemini LLM provider.


        Prompt-cache state for this provider lives in the
        ``core_service.llm_caches``

        table, referenced by ``agent_versions.cache_fingerprints`` — not inline
        on

        the config.
    LiveKitInferenceProvider:
      properties:
        provider:
          type: string
          const: livekit
          title: Provider
          default: livekit
        model:
          $ref: '#/components/schemas/LiveKitInferenceModel'
      type: object
      required:
        - model
      title: LiveKit
      description: LiveKit Inference LLM provider.
    OpenAIProvider:
      properties:
        provider:
          type: string
          const: openai
          title: Provider
          default: openai
        model:
          oneOf:
            - $ref: '#/components/schemas/OpenAIGPT4oModel'
            - $ref: '#/components/schemas/OpenAIGPT4_1Model'
          title: Model
          discriminator:
            propertyName: name
            mapping:
              gpt-4.1:
                $ref: '#/components/schemas/OpenAIGPT4_1Model'
              gpt-4o:
                $ref: '#/components/schemas/OpenAIGPT4oModel'
      type: object
      required:
        - model
      title: OpenAI
      description: OpenAI LLM provider.
    VercelProvider:
      properties:
        provider:
          type: string
          const: vercel
          title: Provider
          default: vercel
        model:
          $ref: '#/components/schemas/VercelModel'
      type: object
      required:
        - model
      title: Vercel
      description: Vercel AI Gateway LLM provider.
    LivekitBVCModel:
      properties:
        name:
          type: string
          const: bvc
          title: Name
          default: bvc
      type: object
      title: bvc
      description: LiveKit BVC model configuration.
    LivekitBVCTelephonyModel:
      properties:
        name:
          type: string
          const: bvc_telephony
          title: Name
          default: bvc_telephony
      type: object
      title: bvc-telephony
      description: LiveKit BVC Telephony model configuration.
    StartingActionGridItem:
      properties:
        label:
          type: string
          title: Label
        icon:
          anyOf:
            - type: string
            - type: 'null'
          title: Icon
          description: >-
            Icon key for the button. One of: suitcase, ruler, truck, credit,
            headset, star, reload. Falls back to a default icon if omitted or
            unknown.
      type: object
      required:
        - label
      title: StartingActionGridItem
      description: A single quick-action button in a starting-message action grid.
    DisplayedNumberType:
      type: string
      enum:
        - agent_number
        - transferee_number
      title: DisplayedNumberType
      description: Supported displayed number types for cold transfer.
    CustomDataFilter:
      properties:
        property:
          type: string
          title: Property
        op:
          type: string
          enum:
            - eq
            - neq
            - gt
            - gte
            - lt
            - lte
            - in
            - contains
            - starts_with
          title: Operator
          default: eq
        value:
          type: string
          title: Value Template
      type: object
      required:
        - property
        - value
      title: Custom Data Filter
      description: >-
        One predicate against a Custom Data table.


        ``value`` is a Jinja template rendered per call. A template that renders

        empty is DROPPED, which is what lets a generated tool declare one
        optional

        filter per property and still issue a single-predicate query when the
        caller

        named a single constraint. See docs/prd/custom-data.md §6.
    CustomDataSort:
      properties:
        property:
          type: string
          title: Property
        direction:
          type: string
          enum:
            - asc
            - desc
          title: Direction
          default: asc
      type: object
      required:
        - property
      title: Custom Data Sort
    HandoffChannelRoute:
      properties:
        connection_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Connection
          description: >-
            handoff_connections row this channel escalates through. Blank
            inherits the rule's.
        entry_point_address:
          anyOf:
            - type: string
            - type: 'null'
          title: Entry Point Address
          description: >-
            Provider-side inbox this channel's escalations land in (Gladly: the
            Entry Point 'Address').
        custom_channel_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Custom Channel ID
          description: >-
            Provider channel id the messages are posted to (Gladly: 'View
            Integration Data').
        group_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Group ID
          description: Optional message-group id, sent alongside the entry point.
        group_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Group Name
          description: Optional message-group name, sent alongside group_id.
      type: object
      title: Channel Route
      description: >-
        Per-channel override of an escalation rule's ROUTE — where it lands.


        A helpdesk does not necessarily expose one integration per company: in

        Gladly a chat custom channel and an email entry point are separate
        objects,

        frequently under separate API users, so "escalate a billing dispute" is
        one

        rule the model routes on and two different destinations depending on
        where

        the conversation is happening. Only the route varies — the tool name,
        the

        description the model chooses on, the copy the customer hears and the

        identity requirement are all channel-neutral and stay on the rule.


        Inheritance is field by field: anything left blank falls back to the
        rule's

        base route. The one exception is a block that names its OWN

        ``connection_id``. Entry point addresses, custom channel ids and group
        ids

        are identifiers minted INSIDE one helpdesk account, so inheriting them

        across a connection boundary would address another account's channel —
        when

        this block points at a different connection than the rule does, nothing
        is

        inherited and the block is the whole route. See

        ``handoff_intent.resolve_handoff_action_config``.
    WidgetType:
      type: string
      enum:
        - detail
        - carousel
        - info
        - list
        - action_grid
        - collect_otp
        - collect_phone_number
        - collect_image
        - order_tracker
        - shipment_tracker
        - comparison
      title: WidgetType
      description: Supported widget types for chat UI.
    FormDefinition:
      properties:
        id:
          type: string
          title: Form ID
          description: >-
            Unique identifier for this form within the agent, e.g.
            'contact_info'.
        name:
          type: string
          title: Form Name
          description: Display name in the builder UI.
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
          description: Tool description for the LLM to understand when to show this form.
        title:
          anyOf:
            - type: string
            - type: 'null'
          title: Form Title
          description: Title shown in the rendered form.
        submit_label:
          anyOf:
            - type: string
            - type: 'null'
          title: Submit Label
          default: Submit
        fields:
          items:
            $ref: '#/components/schemas/FormField'
          type: array
          minItems: 1
          title: Fields
      type: object
      required:
        - id
        - name
        - fields
      title: FormDefinition
      description: A form that can be shown as a widget during conversations.
    ImageTypeRoute:
      properties:
        image_type:
          type: string
          title: Image Type
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
          description: Shown to the classifier to sharpen routing.
        fields_schema:
          additionalProperties: true
          type: object
          title: Fields Schema
          description: JSON-Schema `properties` for the typed fields of this image type.
        tier:
          anyOf:
            - type: string
            - type: 'null'
          title: Tier
          description: Per-type tier override (e.g. start high for hard types).
      type: object
      required:
        - image_type
      title: ImageTypeRoute
      description: >-
        One deterministic classify→schema route for the image `analyze_image`
        tool.


        `image_type` is the discriminant the cheap classifier emits;
        `fields_schema` is a

        JSON-Schema `properties` object merged over the platform floor schema
        (and also the

        extractor's structured-output schema).
    ImageTierConfig:
      properties:
        fast:
          anyOf:
            - oneOf:
                - $ref: '#/components/schemas/AzureOpenAIProvider'
                - $ref: '#/components/schemas/CerebrasProvider'
                - $ref: '#/components/schemas/GoogleProvider'
                - $ref: '#/components/schemas/LiveKitInferenceProvider'
                - $ref: '#/components/schemas/OpenAIProvider'
                - $ref: '#/components/schemas/VercelProvider'
              title: Provider
              discriminator:
                propertyName: provider
                mapping:
                  azure_openai:
                    $ref: '#/components/schemas/AzureOpenAIProvider'
                  cerebras:
                    $ref: '#/components/schemas/CerebrasProvider'
                  google:
                    $ref: '#/components/schemas/GoogleProvider'
                  livekit:
                    $ref: '#/components/schemas/LiveKitInferenceProvider'
                  openai:
                    $ref: '#/components/schemas/OpenAIProvider'
                  vercel:
                    $ref: '#/components/schemas/VercelProvider'
            - type: 'null'
          title: Fast Tier
        frontier:
          anyOf:
            - oneOf:
                - $ref: '#/components/schemas/AzureOpenAIProvider'
                - $ref: '#/components/schemas/CerebrasProvider'
                - $ref: '#/components/schemas/GoogleProvider'
                - $ref: '#/components/schemas/LiveKitInferenceProvider'
                - $ref: '#/components/schemas/OpenAIProvider'
                - $ref: '#/components/schemas/VercelProvider'
              title: Provider
              discriminator:
                propertyName: provider
                mapping:
                  azure_openai:
                    $ref: '#/components/schemas/AzureOpenAIProvider'
                  cerebras:
                    $ref: '#/components/schemas/CerebrasProvider'
                  google:
                    $ref: '#/components/schemas/GoogleProvider'
                  livekit:
                    $ref: '#/components/schemas/LiveKitInferenceProvider'
                  openai:
                    $ref: '#/components/schemas/OpenAIProvider'
                  vercel:
                    $ref: '#/components/schemas/VercelProvider'
            - type: 'null'
          title: Frontier Tier
      type: object
      title: ImageTierConfig
      description: >-
        Override of the platform tier ladder. Each slot holds one resolved
        provider.
    LivekitTurnDetectionProvider:
      properties:
        provider:
          type: string
          const: livekit
          title: Provider
          default: livekit
        model:
          oneOf:
            - $ref: '#/components/schemas/LivekitEnglishModel'
            - $ref: '#/components/schemas/LivekitMultilingualModel'
          title: Model
          discriminator:
            propertyName: name
            mapping:
              english:
                $ref: '#/components/schemas/LivekitEnglishModel'
              multilingual:
                $ref: '#/components/schemas/LivekitMultilingualModel'
      type: object
      required:
        - model
      title: LivekitTurnDetectionProvider
      description: LiveKit turn detection provider.
    AnyreachTurnDetectionProvider:
      properties:
        provider:
          type: string
          const: anyreach
          title: Provider
          default: anyreach
        model:
          oneOf:
            - $ref: '#/components/schemas/AnyreachMultilingualModel'
          title: Model
          discriminator:
            propertyName: name
            mapping:
              multilingual:
                $ref: '#/components/schemas/AnyreachMultilingualModel'
      type: object
      required:
        - model
      title: AnyreachTurnDetectionProvider
      description: Anyreach turn detection provider.
    DeepgramProvider:
      properties:
        provider:
          type: string
          const: deepgram
          title: Provider
          default: deepgram
        model:
          oneOf:
            - $ref: '#/components/schemas/DeepgramNova2GeneralModel'
            - $ref: '#/components/schemas/DeepgramNova3GeneralModel'
          title: Model
          discriminator:
            propertyName: name
            mapping:
              nova-2-general:
                $ref: '#/components/schemas/DeepgramNova2GeneralModel'
              nova-3-general:
                $ref: '#/components/schemas/DeepgramNova3GeneralModel'
      type: object
      required:
        - model
      title: DeepgramProvider
      description: Deepgram STT provider.
    LiveKitInferenceSttProvider:
      properties:
        provider:
          type: string
          const: livekit
          title: Provider
          default: livekit
        model:
          $ref: '#/components/schemas/LiveKitInferenceSttModel'
      type: object
      required:
        - model
      title: LiveKit
      description: LiveKit Inference STT provider.
    GladiaProvider:
      properties:
        provider:
          type: string
          const: gladia
          title: Provider
          default: gladia
        model:
          oneOf:
            - $ref: '#/components/schemas/GladiaSolaria1Model'
          title: Model
          discriminator:
            propertyName: name
            mapping:
              solaria-1:
                $ref: '#/components/schemas/GladiaSolaria1Model'
      type: object
      required:
        - model
      title: GladiaProvider
      description: Gladia STT provider.
    AnyReachSttProvider:
      properties:
        provider:
          type: string
          const: anyreach
          title: Provider
          default: anyreach
        model:
          $ref: '#/components/schemas/AnyReachDefaultModel'
      type: object
      required:
        - model
      title: AnyReachSttProvider
      description: >-
        Anyreach meta STT provider — resolved at runtime based on agent
        language.
    SttOnFailure:
      properties:
        attempt_timeout:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Attempt Timeout
        max_retry_per_stt:
          anyOf:
            - type: integer
              minimum: 0
            - type: 'null'
          title: Max Retry Per STT
        retry_interval:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Retry Interval
      type: object
      title: SttOnFailure
      description: Configuration for model failure handling.
    LlmOnFailure:
      properties:
        attempt_timeout:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Attempt Timeout
        max_retry_per_llm:
          anyOf:
            - type: integer
              minimum: 0
            - type: 'null'
          title: Max Retry Per LLM
        retry_interval:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Retry Interval
      type: object
      title: LlmOnFailure
      description: Configuration for model failure handling.
    CartesiaProvider:
      properties:
        provider:
          type: string
          const: cartesia
          title: Provider
          default: cartesia
        model:
          oneOf:
            - $ref: '#/components/schemas/CartesiaSonic3Model'
          title: Model
          discriminator:
            propertyName: name
            mapping:
              sonic-3:
                $ref: '#/components/schemas/CartesiaSonic3Model'
      type: object
      required:
        - model
      title: CartesiaProvider
      description: Cartesia TTS provider.
    ElevenLabsProvider:
      properties:
        provider:
          type: string
          const: elevenlabs
          title: Provider
          default: elevenlabs
        model:
          $ref: '#/components/schemas/ElevenLabsModel'
      type: object
      required:
        - model
      title: ElevenLabsProvider
      description: ElevenLabs TTS provider.
    LiveKitInferenceTtsProvider:
      properties:
        provider:
          type: string
          const: livekit
          title: Provider
          default: livekit
        model:
          $ref: '#/components/schemas/LiveKitInferenceTtsModel'
      type: object
      required:
        - model
      title: LiveKit
      description: LiveKit Inference TTS provider.
    TtsOnFailure:
      properties:
        attempt_timeout:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Attempt Timeout
        max_retry_per_tts:
          anyOf:
            - type: integer
              minimum: 0
            - type: 'null'
          title: Max Retry Per TTS
        retry_interval:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Retry Interval
      type: object
      title: TtsOnFailure
      description: Configuration for model failure handling.
    SileroProvider:
      properties:
        provider:
          type: string
          const: silero
          title: Provider
          default: silero
        model:
          oneOf:
            - $ref: '#/components/schemas/SileroDefaultModel'
          title: Model
          discriminator:
            propertyName: name
            mapping:
              default:
                $ref: '#/components/schemas/SileroDefaultModel'
      type: object
      required:
        - model
      title: SileroProvider
      description: Silero VAD provider.
    PriceVerbosity:
      type: string
      enum:
        - formal
        - conversational
      title: PriceVerbosity
      description: |-
        Price pronunciation verbosity tier.

        Keep in sync with:
          backend/text-normalization-service/src/schemas/normalize.py:PriceVerbosity
    AzureOpenAIGPT4oModel:
      properties:
        name:
          type: string
          const: gpt-4o
          title: Name
          default: gpt-4o
        parameters:
          $ref: '#/components/schemas/AzureOpenAIGPT4oParameters'
          title: Parameters
      type: object
      required:
        - parameters
      title: gpt-4o
      description: Azure OpenAI GPT-4o model configuration.
    AzureOpenAIGPT4_1Model:
      properties:
        name:
          type: string
          const: gpt-4.1
          title: Name
          default: gpt-4.1
        parameters:
          $ref: '#/components/schemas/AzureOpenAIGPT4_1Parameters'
          title: Parameters
      type: object
      required:
        - parameters
      title: gpt-4.1
      description: Azure OpenAI GPT-4.1 model configuration.
    CerebrasLlama3_3_70bModel:
      properties:
        name:
          type: string
          const: llama-3.3-70b
          title: Name
          default: llama-3.3-70b
        parameters:
          anyOf:
            - $ref: '#/components/schemas/CerebrasLlama3_3_70bParameters'
            - type: 'null'
          title: Parameters
      type: object
      title: llama-3.3-70b
      description: Cerebras Llama 3.3 70B model configuration.
    CerebrasZaiGlm4_7Model:
      properties:
        name:
          type: string
          const: zai-glm-4.7
          title: Name
          default: zai-glm-4.7
        parameters:
          anyOf:
            - $ref: '#/components/schemas/CerebrasZaiGlm4_7Parameters'
            - type: 'null'
          title: Parameters
      type: object
      title: zai-glm-4.7
      description: Cerebras ZAI-GLM 4.7 model configuration.
    GoogleGemini25FlashModel:
      properties:
        name:
          type: string
          const: gemini-2.5-flash
          title: Name
          default: gemini-2.5-flash
        parameters:
          anyOf:
            - $ref: '#/components/schemas/GoogleGeminiParameters'
            - type: 'null'
          title: Parameters
      type: object
      title: gemini-2.5-flash
      description: Google Gemini 2.5 Flash model configuration.
    GoogleGemini25FlashLiteModel:
      properties:
        name:
          type: string
          const: gemini-2.5-flash-lite
          title: Name
          default: gemini-2.5-flash-lite
        parameters:
          anyOf:
            - $ref: '#/components/schemas/GoogleGeminiParameters'
            - type: 'null'
          title: Parameters
      type: object
      title: gemini-2.5-flash-lite
      description: Google Gemini 2.5 Flash-Lite model configuration.
    GoogleGemini25ProModel:
      properties:
        name:
          type: string
          const: gemini-2.5-pro
          title: Name
          default: gemini-2.5-pro
        parameters:
          anyOf:
            - $ref: '#/components/schemas/GoogleGeminiParameters'
            - type: 'null'
          title: Parameters
      type: object
      title: gemini-2.5-pro
      description: Google Gemini 2.5 Pro model configuration.
    GoogleGemini35FlashModel:
      properties:
        name:
          type: string
          const: gemini-3.5-flash
          title: Name
          default: gemini-3.5-flash
        parameters:
          anyOf:
            - $ref: '#/components/schemas/GoogleGeminiParameters'
            - type: 'null'
          title: Parameters
      type: object
      title: gemini-3.5-flash
      description: >-
        Google Gemini 3.5 Flash model configuration.


        Reasoning is controlled by ``thinking_level``; ``temperature`` /
        ``top_p`` /

        ``top_k`` still validate but Google discourages setting them on 3.x.
    LiveKitInferenceModel:
      properties:
        name:
          type: string
          title: Model
        provider:
          anyOf:
            - type: string
            - type: 'null'
          title: Provider
        extra_kwargs:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Extra Kwargs
      type: object
      required:
        - name
      title: LiveKit Inference
      description: LiveKit Inference model configuration.
    OpenAIGPT4oModel:
      properties:
        name:
          type: string
          const: gpt-4o
          title: Name
          default: gpt-4o
        parameters:
          anyOf:
            - $ref: '#/components/schemas/OpenAIGPT4oParameters'
            - type: 'null'
          title: Parameters
      type: object
      title: gpt-4o
      description: OpenAI GPT-4o model configuration.
    OpenAIGPT4_1Model:
      properties:
        name:
          type: string
          const: gpt-4.1
          title: Name
          default: gpt-4.1
        parameters:
          anyOf:
            - $ref: '#/components/schemas/OpenAIGPT4_1Parameters'
            - type: 'null'
          title: Parameters
      type: object
      title: gpt-4.1
      description: OpenAI GPT-4.1 model configuration.
    VercelModel:
      properties:
        name:
          type: string
          title: Model
        parameters:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Parameters
      type: object
      required:
        - name
      title: VercelModel
      description: |-
        Vercel AI Gateway model configuration.

        The Gateway is OpenAI-compatible, so ``name`` is any Gateway model slug
        (e.g. ``openai/gpt-4o`` or ``anthropic/claude-sonnet-4``) and
        ``parameters`` is a free-form passthrough. Keys matching the
        ``openai.LLM`` constructor signature are forwarded as kwargs; anything
        else is sent in the request body via ``extra_body``.
    FormField:
      properties:
        id:
          type: string
          title: Field ID
          description: >-
            Unique identifier within the form, used as the JSON key in
            submission data.
        type:
          $ref: '#/components/schemas/FormFieldType'
          title: Field Type
        label:
          type: string
          title: Label
        placeholder:
          anyOf:
            - type: string
            - type: 'null'
          title: Placeholder
        required:
          type: boolean
          title: Required
          default: false
        default_value:
          anyOf:
            - {}
            - type: 'null'
          title: Default Value
          description: >-
            Default value: string for input/textarea/single_select, bool for
            boolean, number for rating, list of strings for multi_select.
        options:
          anyOf:
            - items:
                $ref: '#/components/schemas/FormFieldOption'
              type: array
            - type: 'null'
          title: Options
          description: Options for single_select and multi_select field types.
        display_mode:
          anyOf:
            - $ref: '#/components/schemas/FormFieldDisplay'
            - type: 'null'
          title: Display Mode
          description: >-
            How single_select/multi_select options render: 'dropdown' (default)
            or 'buttons'.
        allow_other:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Allow Other
          description: >-
            When true, single_select/multi_select fields show an 'Other' choice
            with a free-text input.
        true_label:
          anyOf:
            - type: string
            - type: 'null'
          title: True Label
          description: Label for the 'true' button on boolean fields (e.g. 'Yes').
        false_label:
          anyOf:
            - type: string
            - type: 'null'
          title: False Label
          description: Label for the 'false' button on boolean fields (e.g. 'No').
        max_rating:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Rating
          description: >-
            Number of stars (between 2 and 10, defaults to 5) shown for a rating
            field.
        validation:
          anyOf:
            - type: string
            - type: 'null'
          title: Validation Pattern
          description: Regex pattern for validating text input values.
        validation_message:
          anyOf:
            - type: string
            - type: 'null'
          title: Validation Message
          description: Error message shown when validation fails.
      type: object
      required:
        - id
        - type
        - label
      title: FormField
      description: A single field in a form definition.
    LivekitEnglishModel:
      properties:
        name:
          type: string
          const: english
          title: Name
          default: english
      type: object
      title: english
      description: LiveKit English turn detection model configuration.
    LivekitMultilingualModel:
      properties:
        name:
          type: string
          const: multilingual
          title: Name
          default: multilingual
      type: object
      title: multilingual
      description: LiveKit Multilingual turn detection model configuration.
    AnyreachMultilingualModel:
      properties:
        name:
          type: string
          const: multilingual
          title: Name
          default: multilingual
        parameters:
          anyOf:
            - $ref: '#/components/schemas/AnyreachMultilingualModelParameters'
            - type: 'null'
          title: Parameters
      type: object
      title: multilingual
      description: Anyreach Multilingual turn detection model configuration.
    DeepgramNova2GeneralModel:
      properties:
        name:
          type: string
          const: nova-2-general
          title: Name
          default: nova-2-general
        parameters:
          anyOf:
            - $ref: '#/components/schemas/DeepgramNova2GeneralParameters'
            - type: 'null'
          title: Parameters
      type: object
      title: nova-2-general
      description: Deepgram Nova 2 General model configuration.
    DeepgramNova3GeneralModel:
      properties:
        name:
          type: string
          const: nova-3-general
          title: Name
          default: nova-3-general
        parameters:
          anyOf:
            - $ref: '#/components/schemas/DeepgramNova3GeneralParameters'
            - type: 'null'
          title: Parameters
      type: object
      title: nova-3-general
      description: Deepgram Nova 3 General model configuration.
    LiveKitInferenceSttModel:
      properties:
        name:
          type: string
          title: Model
        language:
          anyOf:
            - type: string
            - type: 'null'
          title: Language
        extra_kwargs:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Extra Kwargs
      type: object
      required:
        - name
      title: LiveKit Inference
      description: LiveKit Inference STT model configuration.
    GladiaSolaria1Model:
      properties:
        name:
          type: string
          const: solaria-1
          title: Name
          default: solaria-1
        parameters:
          anyOf:
            - $ref: '#/components/schemas/GladiaSolaria1Parameters'
            - type: 'null'
          title: Parameters
      type: object
      title: solaria-1
      description: Gladia Solaria-1 model configuration.
    AnyReachDefaultModel:
      properties:
        name:
          type: string
          const: default
          title: Name
          default: default
        parameters:
          anyOf:
            - $ref: '#/components/schemas/AnyReachDefaultParameters'
            - type: 'null'
          title: Parameters
      type: object
      title: default
      description: Anyreach default STT model — resolved at runtime.
    CartesiaSonic3Model:
      properties:
        name:
          type: string
          const: sonic-3
          title: Name
          default: sonic-3
        parameters:
          $ref: '#/components/schemas/CartesiaSonic3Parameters'
          title: Parameters
      type: object
      required:
        - parameters
      title: sonic-3
      description: Cartesia Sonic-3 model configuration.
    ElevenLabsModel:
      properties:
        name:
          type: string
          enum:
            - eleven_turbo_v2
            - eleven_turbo_v2_5
            - eleven_flash_v2
            - eleven_flash_v2_5
            - eleven_v3
          title: Model
          default: eleven_turbo_v2_5
        parameters:
          $ref: '#/components/schemas/ElevenLabsParameters'
          title: Parameters
      type: object
      required:
        - parameters
      title: ElevenLabsModel
      description: ElevenLabs TTS model configuration.
    LiveKitInferenceTtsModel:
      properties:
        name:
          type: string
          title: Model
        voice:
          anyOf:
            - type: string
            - type: 'null'
          title: Voice
        language:
          anyOf:
            - type: string
            - type: 'null'
          title: Language
        extra_kwargs:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Extra Kwargs
      type: object
      required:
        - name
      title: LiveKit Inference
      description: LiveKit Inference TTS model configuration.
    SileroDefaultModel:
      properties:
        name:
          type: string
          const: default
          title: Name
          default: default
      type: object
      title: default
      description: Silero default VAD model configuration.
    AzureOpenAIGPT4oParameters:
      properties:
        azure_deployment:
          type: string
          title: Azure Deployment
        temperature:
          anyOf:
            - type: number
              maximum: 2
              minimum: 0
            - type: 'null'
          title: Temperature
        max_tokens:
          anyOf:
            - type: integer
              minimum: 1
            - type: 'null'
          title: Max Tokens
      type: object
      required:
        - azure_deployment
      title: AzureOpenAIGPT4oParameters
      description: Parameters for Azure OpenAI GPT-4o model.
    AzureOpenAIGPT4_1Parameters:
      properties:
        azure_deployment:
          type: string
          title: Azure Deployment
        temperature:
          anyOf:
            - type: number
              maximum: 2
              minimum: 0
            - type: 'null'
          title: Temperature
        max_tokens:
          anyOf:
            - type: integer
              minimum: 1
            - type: 'null'
          title: Max Tokens
      type: object
      required:
        - azure_deployment
      title: AzureOpenAIGPT4_1Parameters
      description: Parameters for Azure OpenAI GPT-4.1 model.
    CerebrasLlama3_3_70bParameters:
      properties:
        temperature:
          anyOf:
            - type: number
              maximum: 2
              minimum: 0
            - type: 'null'
          title: Temperature
        max_completion_tokens:
          anyOf:
            - type: integer
              minimum: 1
            - type: 'null'
          title: Max Completion Tokens
      type: object
      title: CerebrasLlama3_3_70bParameters
      description: Parameters for Cerebras Llama 3.3 70B model.
    CerebrasZaiGlm4_7Parameters:
      properties:
        temperature:
          anyOf:
            - type: number
              maximum: 2
              minimum: 0
            - type: 'null'
          title: Temperature
        max_completion_tokens:
          anyOf:
            - type: integer
              minimum: 1
            - type: 'null'
          title: Max Completion Tokens
      type: object
      title: CerebrasZaiGlm4_7Parameters
      description: Parameters for Cerebras ZAI-GLM 4.7 model.
    GoogleGeminiParameters:
      properties:
        temperature:
          anyOf:
            - type: number
              maximum: 2
              minimum: 0
            - type: 'null'
          title: Temperature
        max_output_tokens:
          anyOf:
            - type: integer
              minimum: 1
            - type: 'null'
          title: Max Output Tokens
        thinking_budget:
          anyOf:
            - type: integer
              minimum: -1
            - type: 'null'
          title: Thinking Budget
          description: >-
            Gemini 2.5 reasoning token budget. -1 = dynamic, 0 = disabled (Flash
            / Flash-Lite only; Pro cannot disable thinking). Out-of-range values
            are rejected by the Gemini API. On 3.x models prefer thinking_level.
        thinking_level:
          anyOf:
            - type: string
              enum:
                - minimal
                - low
                - medium
                - high
            - type: 'null'
          title: Thinking Level
          description: >-
            Gemini 3.x reasoning effort, the replacement for thinking_budget.
            Mutually exclusive with it: the Gemini API rejects a request that
            sets both.
        top_p:
          anyOf:
            - type: number
              maximum: 1
              minimum: 0
            - type: 'null'
          title: Top P
        top_k:
          anyOf:
            - type: integer
              minimum: 1
            - type: 'null'
          title: Top K
        presence_penalty:
          anyOf:
            - type: number
              maximum: 2
              minimum: -2
            - type: 'null'
          title: Presence Penalty
        frequency_penalty:
          anyOf:
            - type: number
              maximum: 2
              minimum: -2
            - type: 'null'
          title: Frequency Penalty
        seed:
          anyOf:
            - type: integer
            - type: 'null'
          title: Seed
        extra_kwargs:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Extra Kwargs
          description: >-
            Passthrough for additional google.LLM constructor params not exposed
            above (e.g. safety_settings, retrieval_config, http_options,
            vertexai). Keys that are not valid constructor params are dropped
            with a warning.
      type: object
      title: GoogleGeminiParameters
      description: >-
        Generation parameters shared by all direct Gemini models.


        A single class is used for every Gemini model (the schemas are
        identical),

        mirroring the shared ``ElevenLabsParameters`` pattern above. Values map
        1:1

        to ``livekit.plugins.google.LLM`` constructor kwargs. Per-model ranges

        (e.g. Pro's thinking_budget floor) are enforced by the Gemini API, not
        here.
    OpenAIGPT4oParameters:
      properties:
        temperature:
          anyOf:
            - type: number
              maximum: 2
              minimum: 0
            - type: 'null'
          title: Temperature
        max_tokens:
          anyOf:
            - type: integer
              minimum: 1
            - type: 'null'
          title: Max Tokens
      type: object
      title: OpenAIGPT4oParameters
      description: Parameters for OpenAI GPT-4o model.
    OpenAIGPT4_1Parameters:
      properties:
        temperature:
          anyOf:
            - type: number
              maximum: 2
              minimum: 0
            - type: 'null'
          title: Temperature
        max_tokens:
          anyOf:
            - type: integer
              minimum: 1
            - type: 'null'
          title: Max Tokens
      type: object
      title: OpenAIGPT4_1Parameters
      description: Parameters for OpenAI GPT-4.1 model.
    FormFieldType:
      type: string
      enum:
        - input
        - textarea
        - boolean
        - rating
        - single_select
        - multi_select
        - display
      title: FormFieldType
      description: Supported form field types.
    FormFieldOption:
      properties:
        label:
          type: string
          title: Label
        value:
          type: string
          title: Value
      type: object
      required:
        - label
        - value
      title: FormFieldOption
      description: An option for select-type form fields.
    FormFieldDisplay:
      type: string
      enum:
        - dropdown
        - buttons
      title: FormFieldDisplay
      description: How single_select/multi_select options are rendered.
    AnyreachMultilingualModelParameters:
      properties:
        api_key:
          anyOf:
            - type: string
            - type: 'null'
          title: API Key
        timeout:
          anyOf:
            - type: number
            - type: 'null'
          title: Timeout
        fallback_threshold:
          anyOf:
            - type: number
            - type: 'null'
          title: Fallback Threshold
        max_context_items:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Context Items
        instructions:
          anyOf:
            - type: string
            - type: 'null'
          title: Instructions
      type: object
      title: AnyreachMultilingualModelParameters
      description: Parameters for Anyreach Multilingual model.
    DeepgramNova2GeneralParameters:
      properties:
        keywords:
          anyOf:
            - items:
                $ref: '#/components/schemas/DeepgramNova2GeneralParametersKeyword'
              type: array
            - type: 'null'
          title: Keywords
        language:
          anyOf:
            - type: string
              enum:
                - multi
                - bg
                - ca
                - zh
                - zh-CN
                - zh-Hans
                - zh-TW
                - zh-Hant
                - zh-HK
                - cs
                - da
                - da-DK
                - nl
                - en
                - en-US
                - en-AU
                - en-GB
                - en-NZ
                - en-IN
                - et
                - fi
                - nl-BE
                - fr
                - fr-CA
                - de
                - de-CH
                - el
                - hi
                - hu
                - id
                - it
                - ja
                - ko
                - ko-KR
                - lv
                - lt
                - ms
                - 'no'
                - pl
                - pt
                - pt-BR
                - pt-PT
                - ro
                - ru
                - sk
                - es
                - es-419
                - sv
                - sv-SE
                - th
                - th-TH
                - tr
                - uk
                - vi
            - type: 'null'
          title: Language
      type: object
      title: DeepgramNova2GeneralParameters
      description: Parameters for Deepgram Nova 2 General model.
    DeepgramNova3GeneralParameters:
      properties:
        keyterms:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Key Terms
        language:
          anyOf:
            - type: string
              enum:
                - multi
                - ar
                - ar-AE
                - ar-SA
                - ar-QA
                - ar-KW
                - ar-SY
                - ar-LB
                - ar-PS
                - ar-JO
                - ar-EG
                - ar-SD
                - ar-TD
                - ar-MA
                - ar-DZ
                - ar-TN
                - ar-IQ
                - ar-IR
                - be
                - bn
                - bs
                - bg
                - ca
                - zh-HK
                - hr
                - cs
                - da
                - da-DK
                - nl
                - nl-BE
                - en
                - en-US
                - en-AU
                - en-GB
                - en-IN
                - en-NZ
                - et
                - fi
                - fr
                - fr-CA
                - de
                - de-CH
                - el
                - he
                - hi
                - hu
                - id
                - it
                - ja
                - kn
                - ko
                - ko-KR
                - lv
                - lt
                - mk
                - ms
                - mr
                - 'no'
                - fa
                - pl
                - pt
                - pt-BR
                - pt-PT
                - ro
                - ru
                - sr
                - sk
                - sl
                - es
                - es-419
                - sv
                - sv-SE
                - tl
                - ta
                - te
                - th
                - th-TH
                - tr
                - uk
                - ur
                - vi
            - type: 'null'
          title: Language
      type: object
      title: DeepgramNova3GeneralParameters
      description: Parameters for Deepgram Nova 3 General model.
    GladiaSolaria1Parameters:
      properties:
        languages:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Languages
          description: List of language codes. Empty list = auto-detect.
          default:
            - en
            - es
        code_switching:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Code Switching
          description: Enable switching between languages during recognition.
          default: true
        endpointing:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Endpointing
          description: Silence duration (seconds) to consider utterance finished.
        maximum_duration_without_endpointing:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Max Duration Without Endpointing
          description: Max duration without detecting speech before stopping.
        custom_vocabulary:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Custom Vocabulary
          description: Domain-specific vocabulary terms.
        region:
          anyOf:
            - type: string
              enum:
                - us-west
                - eu-west
            - type: 'null'
          title: Region
          description: API region for Gladia.
      type: object
      title: GladiaSolaria1Parameters
      description: Parameters for Gladia Solaria-1 model.
    AnyReachDefaultParameters:
      properties:
        vocabulary:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Vocabulary
          description: >-
            Domain-specific vocabulary terms. Maps to Deepgram keyterms or
            Gladia custom_vocabulary.
      type: object
      title: AnyReachDefaultParameters
      description: Parameters for Anyreach default STT model.
    CartesiaSonic3Parameters:
      properties:
        voice:
          anyOf:
            - type: string
            - items:
                type: number
              type: array
          title: Voice
        language:
          anyOf:
            - type: string
              enum:
                - en
                - fr
                - de
                - es
                - pt
                - zh
                - ja
                - hi
                - it
                - ko
                - nl
                - pl
                - ru
                - sv
                - tr
                - tl
                - bg
                - ro
                - ar
                - cs
                - el
                - fi
                - hr
                - ms
                - sk
                - da
                - ta
                - uk
                - hu
                - 'no'
                - vi
                - bn
                - th
                - he
                - ka
                - id
                - te
                - gu
                - kn
                - ml
                - mr
                - pa
            - type: 'null'
          title: Language
          default: en
        speed:
          anyOf:
            - type: number
              maximum: 1.5
              minimum: 0.6
            - type: 'null'
          title: Speed
          default: 1
        emotion:
          anyOf:
            - type: string
              enum:
                - neutral
                - angry
                - excited
                - content
                - sad
                - scared
                - happy
                - enthusiastic
                - elated
                - euphoric
                - triumphant
                - amazed
                - surprised
                - flirtatious
                - joking/comedic
                - curious
                - peaceful
                - serene
                - calm
                - grateful
                - affectionate
                - trust
                - sympathetic
                - anticipation
                - mysterious
                - mad
                - outraged
                - frustrated
                - agitated
                - threatened
                - disgusted
                - contempt
                - envious
                - sarcastic
                - ironic
                - dejected
                - melancholic
                - disappointed
                - hurt
                - guilty
                - bored
                - tired
                - rejected
                - nostalgic
                - wistful
                - apologetic
                - hesitant
                - insecure
                - confused
                - resigned
                - anxious
                - panicked
                - alarmed
                - proud
                - confident
                - distant
                - skeptical
                - contemplative
                - determined
            - type: 'null'
          title: Emotion
        volume:
          anyOf:
            - type: number
              maximum: 2
              minimum: 0.5
            - type: 'null'
          title: Volume
          default: 1
      type: object
      required:
        - voice
      title: CartesiaSonic3Parameters
      description: >-
        Parameters for Cartesia Sonic-3 model.


        Based on:

        -
        https://docs.cartesia.ai/build-with-cartesia/sonic-3/volume-speed-emotion

        -
        https://docs.cartesia.ai/build-with-cartesia/tts-models/latest#language-support


        Note: Parameters like emotion and language support are specific to
        Sonic-3.
    ElevenLabsParameters:
      properties:
        voice_id:
          type: string
          title: Voice ID
        voice_ids:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Voice ID Pool
          description: >-
            Optional pool of ElevenLabs voice IDs. When it holds two or more
            entries, one is picked per conversation and used for the whole call;
            every other consumer of the config (builder UI, greeting
            pre-generation, agent transfer) still reads ``voice_id``, which is
            normalized to the first pool entry so it always names a voice the
            agent can actually speak in. Unset — or a single entry — means
            ``voice_id`` is always used.
        voice_settings:
          anyOf:
            - $ref: '#/components/schemas/ElevenLabsVoiceSettings'
            - type: 'null'
          title: Voice Settings
        output_format:
          anyOf:
            - $ref: '#/components/schemas/ElevenLabsOutputFormat'
            - type: 'null'
          title: Output Format
          description: >-
            Per-channel ElevenLabs audio output encoding object with telephone /
            webrtc / default keys. Unset (or the active channel unset with no
            default) -> ElevenLabs plugin default (mp3_22050_32). Set default to
            apply one encoding to every channel; set telephone to pcm_8000 to
            cut latency on the phone path by skipping MP3 decode + resample.
      type: object
      required:
        - voice_id
      title: ElevenLabsParameters
      description: |-
        Shared parameters for every ElevenLabs TTS model.

        Parameters are identical across turbo/flash models — the model name is
        just passed through to ElevenLabs — so a single class is used instead
        of one pair per model.
    DeepgramNova2GeneralParametersKeyword:
      properties:
        keyword:
          type: string
          title: Keyword
        intensifier:
          anyOf:
            - type: number
            - type: 'null'
          title: Intensifier
      type: object
      required:
        - keyword
      title: Keyword
    ElevenLabsVoiceSettings:
      properties:
        stability:
          anyOf:
            - type: number
              maximum: 1
              minimum: 0
            - type: 'null'
          title: Stability
        similarity_boost:
          anyOf:
            - type: number
              maximum: 1
              minimum: 0
            - type: 'null'
          title: Similarity Boost
        speed:
          anyOf:
            - type: number
              maximum: 2
              minimum: 0.1
            - type: 'null'
          title: Speed
      type: object
      title: ElevenLabsVoiceSettings
      description: Voice settings for ElevenLabs TTS.
    ElevenLabsOutputFormat:
      properties:
        telephone:
          anyOf:
            - type: string
              enum:
                - mp3_22050_32
                - mp3_24000_48
                - mp3_44100
                - mp3_44100_32
                - mp3_44100_64
                - mp3_44100_96
                - mp3_44100_128
                - mp3_44100_192
                - opus_48000_32
                - opus_48000_64
                - opus_48000_96
                - opus_48000_128
                - opus_48000_192
                - pcm_8000
                - pcm_16000
                - pcm_22050
                - pcm_24000
                - pcm_32000
                - pcm_44100
                - pcm_48000
            - type: 'null'
          title: Telephone Encoding
        webrtc:
          anyOf:
            - type: string
              enum:
                - mp3_22050_32
                - mp3_24000_48
                - mp3_44100
                - mp3_44100_32
                - mp3_44100_64
                - mp3_44100_96
                - mp3_44100_128
                - mp3_44100_192
                - opus_48000_32
                - opus_48000_64
                - opus_48000_96
                - opus_48000_128
                - opus_48000_192
                - pcm_8000
                - pcm_16000
                - pcm_22050
                - pcm_24000
                - pcm_32000
                - pcm_44100
                - pcm_48000
            - type: 'null'
          title: WebRTC Encoding
        default:
          anyOf:
            - type: string
              enum:
                - mp3_22050_32
                - mp3_24000_48
                - mp3_44100
                - mp3_44100_32
                - mp3_44100_64
                - mp3_44100_96
                - mp3_44100_128
                - mp3_44100_192
                - opus_48000_32
                - opus_48000_64
                - opus_48000_96
                - opus_48000_128
                - opus_48000_192
                - pcm_8000
                - pcm_16000
                - pcm_22050
                - pcm_24000
                - pcm_32000
                - pcm_44100
                - pcm_48000
            - type: 'null'
          title: Default Encoding
      type: object
      title: ElevenLabsOutputFormat
      description: |-
        Per-channel ElevenLabs audio output encoding.

        Resolved at TTS construction time against the conversation channel:
        the matching field (``telephone`` / ``webrtc``) is used; if unset,
        ``default`` is used; if that is also unset, the ElevenLabs plugin
        default (mp3_22050_32) applies. Typical use: ``telephone="pcm_8000"``
        to cut latency by skipping MP3 decode + resample on the phone path,
        while ``webrtc`` keeps a high-quality format for web/chat.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Personal access token or organization API key. See Authentication.

````