> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.vapi.ai/llms.txt.
> For full documentation content, see https://docs.vapi.ai/llms-full.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.vapi.ai/_mcp/server.

# Server Message

POST https://{yourserver}.com/server
Content-Type: application/json



Reference: https://docs.vapi.ai/api-reference/webhooks/server-message

## OpenAPI Specification

```yaml
openapi: 3.1.0
info:
  title: webhooks
  version: 1.0.0
paths:
  /server:
    post:
      operationId: server-message
      summary: Server Message
      description: ''
      tags:
        - ''
      responses:
        '200':
          description: >
            This is the response that is expected from the server to the
            message.


            Note: Most messages don't expect a response. Only
            "assistant-request", "tool-calls" and "transfer-destination-request"
            do.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerMessageResponse'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ServerMessage'
servers:
  - url: https://{yourserver}.com
components:
  schemas:
    TextContentType:
      type: string
      enum:
        - text
      title: TextContentType
    TextContentLanguage:
      type: string
      enum:
        - aa
        - ab
        - ae
        - af
        - ak
        - am
        - an
        - ar
        - as
        - av
        - ay
        - az
        - ba
        - be
        - bg
        - bh
        - bi
        - bm
        - bn
        - bo
        - br
        - bs
        - ca
        - ce
        - ch
        - co
        - cr
        - cs
        - cu
        - cv
        - cy
        - da
        - de
        - dv
        - dz
        - ee
        - el
        - en
        - eo
        - es
        - et
        - eu
        - fa
        - ff
        - fi
        - fj
        - fo
        - fr
        - fy
        - ga
        - gd
        - gl
        - gn
        - gu
        - gv
        - ha
        - he
        - hi
        - ho
        - hr
        - ht
        - hu
        - hy
        - hz
        - ia
        - id
        - ie
        - ig
        - ii
        - ik
        - io
        - is
        - it
        - iu
        - ja
        - jv
        - ka
        - kg
        - ki
        - kj
        - kk
        - kl
        - km
        - kn
        - ko
        - kr
        - ks
        - ku
        - kv
        - kw
        - ky
        - la
        - lb
        - lg
        - li
        - ln
        - lo
        - lt
        - lu
        - lv
        - mg
        - mh
        - mi
        - mk
        - ml
        - mn
        - mr
        - ms
        - mt
        - my
        - na
        - nb
        - nd
        - ne
        - ng
        - nl
        - nn
        - 'no'
        - nr
        - nv
        - ny
        - oc
        - oj
        - om
        - or
        - os
        - pa
        - pi
        - pl
        - ps
        - pt
        - qu
        - rm
        - rn
        - ro
        - ru
        - rw
        - sa
        - sc
        - sd
        - se
        - sg
        - si
        - sk
        - sl
        - sm
        - sn
        - so
        - sq
        - sr
        - ss
        - st
        - su
        - sv
        - sw
        - ta
        - te
        - tg
        - th
        - ti
        - tk
        - tl
        - tn
        - to
        - tr
        - ts
        - tt
        - tw
        - ty
        - ug
        - uk
        - ur
        - uz
        - ve
        - vi
        - vo
        - wa
        - wo
        - xh
        - yi
        - yue
        - yo
        - za
        - zh
        - zu
      title: TextContentLanguage
    TextContent:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/TextContentType'
        text:
          type: string
        language:
          $ref: '#/components/schemas/TextContentLanguage'
      required:
        - type
        - text
        - language
      title: TextContent
    CustomMessageContentsItems:
      oneOf:
        - $ref: '#/components/schemas/TextContent'
      title: CustomMessageContentsItems
    CustomMessageType:
      type: string
      enum:
        - custom-message
      description: This is a custom message.
      title: CustomMessageType
    CustomMessage:
      type: object
      properties:
        contents:
          type: array
          items:
            $ref: '#/components/schemas/CustomMessageContentsItems'
          description: >-
            This is an alternative to the `content` property. It allows to
            specify variants of the same content, one per language.


            Usage:

            - If your assistants are multilingual, you can provide content for
            each language.

            - If you don't provide content for a language, the first item in the
            array will be automatically translated to the active language at
            that moment.


            This will override the `content` property.
        type:
          $ref: '#/components/schemas/CustomMessageType'
          description: This is a custom message.
        content:
          type: string
          description: >-
            This is the content that the assistant will say when this message is
            triggered.
      required:
        - type
      title: CustomMessage
    TransferDestinationNumberMessage:
      oneOf:
        - type: string
        - $ref: '#/components/schemas/CustomMessage'
      description: >-
        This is spoken to the customer before connecting them to the
        destination.


        Usage:

        - If this is not provided and transfer tool messages is not provided,
        default is "Transferring the call now".

        - If set to "", nothing is spoken. This is useful when you want to
        silently transfer. This is especially useful when transferring between
        assistants in a squad. In this scenario, you likely also want to set
        `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message`
        for the destination assistant.


        This accepts a string or a ToolMessageStart class. Latter is useful if
        you want to specify multiple messages for different languages through
        the `contents` field.
      title: TransferDestinationNumberMessage
    TransferDestinationNumberType:
      type: string
      enum:
        - number
      title: TransferDestinationNumberType
    TransferPlanMode:
      type: string
      enum:
        - blind-transfer
        - blind-transfer-add-summary-to-sip-header
        - warm-transfer-say-message
        - warm-transfer-say-summary
        - warm-transfer-twiml
        - warm-transfer-wait-for-operator-to-speak-first-and-then-say-message
        - warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary
        - warm-transfer-experimental
      description: >-
        This configures how transfer is executed and the experience of the
        destination party receiving the call.


        Usage:

        - `blind-transfer`: The assistant forwards the call to the destination
        without any message or summary.

        - `blind-transfer-add-summary-to-sip-header`: The assistant forwards the
        call to the destination and adds a SIP header X-Transfer-Summary to the
        call to include the summary.

        - `warm-transfer-say-message`: The assistant dials the destination,
        delivers the `message` to the destination party, connects the customer,
        and leaves the call.

        - `warm-transfer-say-summary`: The assistant dials the destination,
        provides a summary of the call to the destination party, connects the
        customer, and leaves the call.

        - `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`:
        The assistant dials the destination, waits for the operator to speak,
        delivers the `message` to the destination party, and then connects the
        customer.

        - `warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary`:
        The assistant dials the destination, waits for the operator to speak,
        provides a summary of the call to the destination party, and then
        connects the customer.

        - `warm-transfer-twiml`: The assistant dials the destination, executes
        the twiml instructions on the destination call leg, connects the
        customer, and leaves the call.

        - `warm-transfer-experimental`: The assistant puts the customer on hold,
        dials the destination, and if the destination answers (and is human),
        delivers a message or summary before connecting the customer. If the
        destination is unreachable or not human (e.g., with voicemail
        detection), the assistant delivers the `fallbackMessage` to the customer
        and optionally ends the call.


        @default 'blind-transfer'
      title: TransferPlanMode
    TransferPlanMessage:
      oneOf:
        - type: string
        - $ref: '#/components/schemas/CustomMessage'
      description: >-
        This is the message the assistant will deliver to the destination party
        before connecting the customer.


        Usage:

        - Used only when `mode` is `blind-transfer-add-summary-to-sip-header`,
        `warm-transfer-say-message`,
        `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`,
        or `warm-transfer-experimental`.
      title: TransferPlanMessage
    TransferPlanSipVerb:
      type: string
      enum:
        - refer
        - bye
        - dial
      default: refer
      description: |-
        This specifies the SIP verb to use while transferring the call.
        - 'refer': Uses SIP REFER to transfer the call (default)
        - 'bye': Ends current call with SIP BYE
        - 'dial': Uses SIP DIAL to transfer the call
      title: TransferPlanSipVerb
    ContextEngineeringPlanLastNMessagesType:
      type: string
      enum:
        - lastNMessages
      title: ContextEngineeringPlanLastNMessagesType
    ContextEngineeringPlanLastNMessages:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/ContextEngineeringPlanLastNMessagesType'
        maxMessages:
          type: number
          format: double
          description: >-
            This is the maximum number of messages to include in the context
            engineering plan.
      required:
        - type
        - maxMessages
      title: ContextEngineeringPlanLastNMessages
    ContextEngineeringPlanNoneType:
      type: string
      enum:
        - none
      title: ContextEngineeringPlanNoneType
    ContextEngineeringPlanNone:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/ContextEngineeringPlanNoneType'
      required:
        - type
      title: ContextEngineeringPlanNone
    ContextEngineeringPlanAllType:
      type: string
      enum:
        - all
      title: ContextEngineeringPlanAllType
    ContextEngineeringPlanAll:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/ContextEngineeringPlanAllType'
      required:
        - type
      title: ContextEngineeringPlanAll
    TransferPlanContextEngineeringPlan:
      oneOf:
        - $ref: '#/components/schemas/ContextEngineeringPlanLastNMessages'
        - $ref: '#/components/schemas/ContextEngineeringPlanNone'
        - $ref: '#/components/schemas/ContextEngineeringPlanAll'
      description: >-
        This is the plan for manipulating the message context before initiating
        the warm transfer.

        Usage:

        - Used only when `mode` is `warm-transfer-experimental`.

        - These messages will automatically be added to the transferAssistant's
        system message.

        - If 'none', we will not add any transcript to the transferAssistant's
        system message.

        - If you want to provide your own messages, use
        transferAssistant.model.messages instead.


        @default { type: 'all' }
      title: TransferPlanContextEngineeringPlan
    SummaryPlanMessagesItems:
      type: object
      properties: {}
      title: SummaryPlanMessagesItems
    SummaryPlan:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/SummaryPlanMessagesItems'
          description: >-
            These are the messages used to generate the summary.


            @default: ```

            [
              {
                "role": "system",
                "content": "You are an expert note-taker. You will be given a transcript of a call. Summarize the call in 2-3 sentences. DO NOT return anything except the summary."
              },
              {
                "role": "user",
                "content": "Here is the transcript:\n\n{{transcript}}\n\n. Here is the ended reason of the call:\n\n{{endedReason}}\n\n"
              }
            ]```


            You can customize by providing any messages you want.


            Here are the template variables available:

            - {{transcript}}: The transcript of the call from
            `call.artifact.transcript` 

            - {{systemPrompt}}: The system prompt of the call from
            `assistant.model.messages[type=system].content` 

            - {{messages}}: The messages of the call from
            `assistant.model.messages` 

            - {{endedReason}}: The ended reason of the call from
            `call.endedReason`
        enabled:
          type: boolean
          description: >-
            This determines whether a summary is generated and stored in
            `call.analysis.summary`. Defaults to true.


            Usage:

            - If you want to disable the summary, set this to false.


            @default true
        timeoutSeconds:
          type: number
          format: double
          description: >-
            This is how long the request is tried before giving up. When request
            times out, `call.analysis.summary` will be empty.


            Usage:

            - To guarantee the summary is generated, set this value high. Note,
            this will delay the end of call report in cases where model is slow
            to respond.


            @default 5 seconds
      title: SummaryPlan
    TransferFallbackPlanMessage:
      oneOf:
        - type: string
        - $ref: '#/components/schemas/CustomMessage'
      description: >-
        This is the message the assistant will deliver to the customer if the
        transfer fails.
      title: TransferFallbackPlanMessage
    TransferFallbackPlan:
      type: object
      properties:
        message:
          $ref: '#/components/schemas/TransferFallbackPlanMessage'
          description: >-
            This is the message the assistant will deliver to the customer if
            the transfer fails.
        endCallEnabled:
          type: boolean
          default: true
          description: >-
            This controls what happens after delivering the failure message to
            the customer.

            - true: End the call after delivering the failure message (default)

            - false: Keep the assistant on the call to continue handling the
            customer's request


            @default true
      required:
        - message
      title: TransferFallbackPlan
    TransferPlan:
      type: object
      properties:
        mode:
          $ref: '#/components/schemas/TransferPlanMode'
          description: >-
            This configures how transfer is executed and the experience of the
            destination party receiving the call.


            Usage:

            - `blind-transfer`: The assistant forwards the call to the
            destination without any message or summary.

            - `blind-transfer-add-summary-to-sip-header`: The assistant forwards
            the call to the destination and adds a SIP header X-Transfer-Summary
            to the call to include the summary.

            - `warm-transfer-say-message`: The assistant dials the destination,
            delivers the `message` to the destination party, connects the
            customer, and leaves the call.

            - `warm-transfer-say-summary`: The assistant dials the destination,
            provides a summary of the call to the destination party, connects
            the customer, and leaves the call.

            -
            `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`:
            The assistant dials the destination, waits for the operator to
            speak, delivers the `message` to the destination party, and then
            connects the customer.

            -
            `warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary`:
            The assistant dials the destination, waits for the operator to
            speak, provides a summary of the call to the destination party, and
            then connects the customer.

            - `warm-transfer-twiml`: The assistant dials the destination,
            executes the twiml instructions on the destination call leg,
            connects the customer, and leaves the call.

            - `warm-transfer-experimental`: The assistant puts the customer on
            hold, dials the destination, and if the destination answers (and is
            human), delivers a message or summary before connecting the
            customer. If the destination is unreachable or not human (e.g., with
            voicemail detection), the assistant delivers the `fallbackMessage`
            to the customer and optionally ends the call.


            @default 'blind-transfer'
        message:
          $ref: '#/components/schemas/TransferPlanMessage'
          description: >-
            This is the message the assistant will deliver to the destination
            party before connecting the customer.


            Usage:

            - Used only when `mode` is
            `blind-transfer-add-summary-to-sip-header`,
            `warm-transfer-say-message`,
            `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`,
            or `warm-transfer-experimental`.
        timeout:
          type: number
          format: double
          default: 60
          description: >-
            This is the timeout in seconds for the
            warm-transfer-wait-for-operator-to-speak-first-and-then-say-message/summary


            @default 60
        sipVerb:
          $ref: '#/components/schemas/TransferPlanSipVerb'
          description: |-
            This specifies the SIP verb to use while transferring the call.
            - 'refer': Uses SIP REFER to transfer the call (default)
            - 'bye': Ends current call with SIP BYE
            - 'dial': Uses SIP DIAL to transfer the call
        dialTimeout:
          type: number
          format: double
          default: 60
          description: >-
            This sets the timeout for the dial operation in seconds. This is the
            duration the call will ring before timing out.


            Only applicable when `sipVerb='dial'`. Not applicable for SIP REFER
            or BYE.


            @default 60
        holdAudioUrl:
          type: string
          description: >-
            This is the URL to an audio file played while the customer is on
            hold during transfer.


            Usage:

            - Used only when `mode` is `warm-transfer-experimental`.

            - Used when transferring calls to play hold audio for the customer.

            - Must be a publicly accessible URL to an audio file.

            - Supported formats: MP3 and WAV.

            - If not provided, the default hold audio will be used.
        transferCompleteAudioUrl:
          type: string
          description: >-
            This is the URL to an audio file played after the warm transfer
            message or summary is delivered to the destination party.

            It can be used to play a custom sound like 'beep' to notify that the
            transfer is complete.


            Usage:

            - Used only when `mode` is `warm-transfer-experimental`.

            - Used when transferring calls to play hold audio for the
            destination party.

            - Must be a publicly accessible URL to an audio file.

            - Supported formats: MP3 and WAV.
        contextEngineeringPlan:
          $ref: '#/components/schemas/TransferPlanContextEngineeringPlan'
          description: >-
            This is the plan for manipulating the message context before
            initiating the warm transfer.

            Usage:

            - Used only when `mode` is `warm-transfer-experimental`.

            - These messages will automatically be added to the
            transferAssistant's system message.

            - If 'none', we will not add any transcript to the
            transferAssistant's system message.

            - If you want to provide your own messages, use
            transferAssistant.model.messages instead.


            @default { type: 'all' }
        twiml:
          type: string
          description: >-
            This is the TwiML instructions to execute on the destination call
            leg before connecting the customer.


            Usage:

            - Used only when `mode` is `warm-transfer-twiml`.

            - Supports only `Play`, `Say`, `Gather`, `Hangup` and `Pause` verbs.

            - Maximum length is 4096 characters.


            Example:

            ```

            <Say voice="alice" language="en-US">Hello, transferring a customer
            to you.</Say>

            <Pause length="2"/>

            <Say>They called about billing questions.</Say>

            ```
        summaryPlan:
          $ref: '#/components/schemas/SummaryPlan'
          description: >-
            This is the plan for generating a summary of the call to present to
            the destination party.


            Usage:

            - Used only when `mode` is
            `blind-transfer-add-summary-to-sip-header` or
            `warm-transfer-say-summary` or
            `warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary`
            or `warm-transfer-experimental`.
        sipHeadersInReferToEnabled:
          type: boolean
          description: >-
            This flag includes the sipHeaders from above in the refer to sip uri
            as url encoded query params.


            @default false
        fallbackPlan:
          $ref: '#/components/schemas/TransferFallbackPlan'
          description: >-
            This configures the fallback plan when the transfer fails
            (destination unreachable, busy, or not human).


            Usage:

            - Used only when `mode` is `warm-transfer-experimental`.

            - If not provided when using `warm-transfer-experimental`, a default
            message will be used.
      required:
        - mode
      title: TransferPlan
    TransferDestinationNumber:
      type: object
      properties:
        message:
          $ref: '#/components/schemas/TransferDestinationNumberMessage'
          description: >-
            This is spoken to the customer before connecting them to the
            destination.


            Usage:

            - If this is not provided and transfer tool messages is not
            provided, default is "Transferring the call now".

            - If set to "", nothing is spoken. This is useful when you want to
            silently transfer. This is especially useful when transferring
            between assistants in a squad. In this scenario, you likely also
            want to set
            `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message`
            for the destination assistant.


            This accepts a string or a ToolMessageStart class. Latter is useful
            if you want to specify multiple messages for different languages
            through the `contents` field.
        type:
          $ref: '#/components/schemas/TransferDestinationNumberType'
        numberE164CheckEnabled:
          type: boolean
          default: true
          description: >-
            This is the flag to toggle the E164 check for the `number` field.
            This is an advanced property which should be used if you know your
            use case requires it.


            Use cases:

            - `false`: To allow non-E164 numbers like `+001234567890`, `1234`,
            or `abc`. This is useful for dialing out to non-E164 numbers on your
            SIP trunks.

            - `true` (default): To allow only E164 numbers like `+14155551234`.
            This is standard for PSTN calls.


            If `false`, the `number` is still required to only contain
            alphanumeric characters (regex: `/^\+?[a-zA-Z0-9]+$/`).


            @default true (E164 check is enabled)
        number:
          type: string
          description: This is the phone number to transfer the call to.
        extension:
          type: string
          description: >-
            This is the extension to dial after transferring the call to the
            `number`.
        callerId:
          type: string
          description: >-
            This is the caller ID to use when transferring the call to the
            `number`.


            Usage:

            - If not provided, the caller ID will be the number the call is
            coming **from**.
              Example: a customer with number +14151111111 calls in to and the assistant transfers out to +16470000000. +16470000000 will see +14151111111 as the caller.
              For inbound calls, the caller ID is the customer's number. For outbound calls, the caller ID is the phone number of the assistant.
            - To change this behavior, provide a `callerId`.

            - Set to '{{customer.number}}' to always use the customer's number
            as the caller ID.

            - Set to '{{phoneNumber.number}}' to always use the phone number of
            the assistant as the caller ID.

            - Set to any E164 number to always use that number as the caller ID.
            This needs to be a number that is owned or verified by your
            Transport provider like Twilio.


            For Twilio, you can read up more here:
            https://www.twilio.com/docs/voice/twiml/dial#callerid
        transferPlan:
          $ref: '#/components/schemas/TransferPlan'
          description: >-
            This configures how transfer is executed and the experience of the
            destination party receiving the call. Defaults to `blind-transfer`.


            @default `transferPlan.mode='blind-transfer'`
        description:
          type: string
          description: >-
            This is the description of the destination, used by the AI to choose
            when and how to transfer the call.
      required:
        - type
        - number
      title: TransferDestinationNumber
    TransferDestinationSipMessage:
      oneOf:
        - type: string
        - $ref: '#/components/schemas/CustomMessage'
      description: >-
        This is spoken to the customer before connecting them to the
        destination.


        Usage:

        - If this is not provided and transfer tool messages is not provided,
        default is "Transferring the call now".

        - If set to "", nothing is spoken. This is useful when you want to
        silently transfer. This is especially useful when transferring between
        assistants in a squad. In this scenario, you likely also want to set
        `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message`
        for the destination assistant.


        This accepts a string or a ToolMessageStart class. Latter is useful if
        you want to specify multiple messages for different languages through
        the `contents` field.
      title: TransferDestinationSipMessage
    TransferDestinationSipType:
      type: string
      enum:
        - sip
      title: TransferDestinationSipType
    TransferDestinationSipSipHeaders:
      type: object
      properties: {}
      description: These are custom headers to be added to SIP refer during transfer call.
      title: TransferDestinationSipSipHeaders
    TransferDestinationSip:
      type: object
      properties:
        message:
          $ref: '#/components/schemas/TransferDestinationSipMessage'
          description: >-
            This is spoken to the customer before connecting them to the
            destination.


            Usage:

            - If this is not provided and transfer tool messages is not
            provided, default is "Transferring the call now".

            - If set to "", nothing is spoken. This is useful when you want to
            silently transfer. This is especially useful when transferring
            between assistants in a squad. In this scenario, you likely also
            want to set
            `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message`
            for the destination assistant.


            This accepts a string or a ToolMessageStart class. Latter is useful
            if you want to specify multiple messages for different languages
            through the `contents` field.
        type:
          $ref: '#/components/schemas/TransferDestinationSipType'
        sipUri:
          type: string
          description: This is the SIP URI to transfer the call to.
        callerId:
          type: string
          description: >-
            This is the caller ID to use when transferring the call to the
            `sipUri`.


            Usage:

            - If not provided, the caller ID will be determined by the SIP
            infrastructure.

            - Set to '{{customer.number}}' to always use the customer's number
            as the caller ID.

            - Set to '{{phoneNumber.number}}' to always use the phone number of
            the assistant as the caller ID.

            - Set to any E164 number to always use that number as the caller ID.


            Only applicable when `transferPlan.sipVerb='dial'`. Not applicable
            for SIP REFER.
        transferPlan:
          $ref: '#/components/schemas/TransferPlan'
          description: >-
            This configures how transfer is executed and the experience of the
            destination party receiving the call. Defaults to `blind-transfer`.


            @default `transferPlan.mode='blind-transfer'`
        sipHeaders:
          $ref: '#/components/schemas/TransferDestinationSipSipHeaders'
          description: >-
            These are custom headers to be added to SIP refer during transfer
            call.
        description:
          type: string
          description: >-
            This is the description of the destination, used by the AI to choose
            when and how to transfer the call.
      required:
        - type
        - sipUri
      title: TransferDestinationSip
    CreateByoPhoneNumberDtoFallbackDestination:
      oneOf:
        - $ref: '#/components/schemas/TransferDestinationNumber'
        - $ref: '#/components/schemas/TransferDestinationSip'
      description: >-
        This is the fallback destination an inbound call will be transferred to
        if:

        1. `assistantId` is not set

        2. `squadId` is not set

        3. and, `assistant-request` message to the `serverUrl` fails


        If this is not set and above conditions are met, the inbound call is
        hung up with an error message.
      title: CreateByoPhoneNumberDtoFallbackDestination
    PhoneNumberHookCallRingingOn:
      type: string
      enum:
        - call.ringing
      description: This is the event to trigger the hook on
      title: PhoneNumberHookCallRingingOn
    PhoneNumberCallRingingHookFilterType:
      type: string
      enum:
        - startsWith
      description: >-
        This is the type of filter - matches when the specified field starts
        with any of the given prefixes
      title: PhoneNumberCallRingingHookFilterType
    PhoneNumberCallRingingHookFilterKey:
      type: string
      enum:
        - number
      description: >-
        The field to check. Currently only "number" (the caller's phone number)
        is supported.
      title: PhoneNumberCallRingingHookFilterKey
    PhoneNumberCallRingingHookFilter:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/PhoneNumberCallRingingHookFilterType'
          description: >-
            This is the type of filter - matches when the specified field starts
            with any of the given prefixes
        key:
          $ref: '#/components/schemas/PhoneNumberCallRingingHookFilterKey'
          description: >-
            The field to check. Currently only "number" (the caller's phone
            number) is supported.
        startsWith:
          type: array
          items:
            type: string
          description: >-
            Array of prefixes to match. Do not include the + prefix. Inbound
            calls from numbers starting with any of these prefixes will trigger
            the hook actions.
      required:
        - type
        - key
        - startsWith
      title: PhoneNumberCallRingingHookFilter
    TransferPhoneNumberHookActionType:
      type: string
      enum:
        - transfer
      description: This is the type of action - must be "transfer"
      title: TransferPhoneNumberHookActionType
    TransferPhoneNumberHookActionDestination:
      oneOf:
        - $ref: '#/components/schemas/TransferDestinationNumber'
        - $ref: '#/components/schemas/TransferDestinationSip'
      description: >-
        This is the destination details for the transfer - can be a phone number
        or SIP URI
      title: TransferPhoneNumberHookActionDestination
    TransferPhoneNumberHookAction:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/TransferPhoneNumberHookActionType'
          description: This is the type of action - must be "transfer"
        destination:
          $ref: '#/components/schemas/TransferPhoneNumberHookActionDestination'
          description: >-
            This is the destination details for the transfer - can be a phone
            number or SIP URI
      required:
        - type
      title: TransferPhoneNumberHookAction
    SayPhoneNumberHookActionType:
      type: string
      enum:
        - say
      description: This is the type of action - must be "say"
      title: SayPhoneNumberHookActionType
    SayPhoneNumberHookAction:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/SayPhoneNumberHookActionType'
          description: This is the type of action - must be "say"
        exact:
          type: string
          description: This is the message to say
      required:
        - type
        - exact
      title: SayPhoneNumberHookAction
    PhoneNumberHookCallRingingDoItems:
      oneOf:
        - $ref: '#/components/schemas/TransferPhoneNumberHookAction'
        - $ref: '#/components/schemas/SayPhoneNumberHookAction'
      title: PhoneNumberHookCallRingingDoItems
    PhoneNumberHookCallRinging:
      type: object
      properties:
        'on':
          $ref: '#/components/schemas/PhoneNumberHookCallRingingOn'
          description: This is the event to trigger the hook on
        filters:
          type: array
          items:
            $ref: '#/components/schemas/PhoneNumberCallRingingHookFilter'
          description: >-
            Optional filters to decide when to trigger the hook. Currently
            supports filtering by caller country code.
        do:
          type: array
          items:
            $ref: '#/components/schemas/PhoneNumberHookCallRingingDoItems'
          description: >-
            Only the first action will be executed. Additional actions will be
            ignored.
      required:
        - 'on'
        - do
      title: PhoneNumberHookCallRinging
    PhoneNumberHookCallEndingOn:
      type: string
      enum:
        - call.ending
      description: This is the event to trigger the hook on
      title: PhoneNumberHookCallEndingOn
    PhoneNumberCallEndingHookFilterType:
      type: string
      enum:
        - oneOf
      description: This is the type of filter - currently only "oneOf" is supported
      title: PhoneNumberCallEndingHookFilterType
    PhoneNumberCallEndingHookFilterKey:
      type: string
      enum:
        - call.endedReason
      description: >-
        This is the key to filter on - only "call.endedReason" is allowed for
        phone number call ending hooks
      title: PhoneNumberCallEndingHookFilterKey
    PhoneNumberCallEndingHookFilterOneOf:
      type: string
      enum:
        - assistant-request-failed
        - assistant-request-returned-error
        - assistant-request-returned-unspeakable-error
        - assistant-request-returned-invalid-assistant
        - assistant-request-returned-no-assistant
        - assistant-request-returned-forwarding-phone-number
      description: >-
        This is the array of assistant-request related ended reasons to match
        against
      title: PhoneNumberCallEndingHookFilterOneOf
    PhoneNumberCallEndingHookFilter:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/PhoneNumberCallEndingHookFilterType'
          description: This is the type of filter - currently only "oneOf" is supported
        key:
          $ref: '#/components/schemas/PhoneNumberCallEndingHookFilterKey'
          description: >-
            This is the key to filter on - only "call.endedReason" is allowed
            for phone number call ending hooks
        oneOf:
          $ref: '#/components/schemas/PhoneNumberCallEndingHookFilterOneOf'
          description: >-
            This is the array of assistant-request related ended reasons to
            match against
      required:
        - type
        - key
        - oneOf
      title: PhoneNumberCallEndingHookFilter
    PhoneNumberHookCallEndingDo:
      oneOf:
        - $ref: '#/components/schemas/TransferPhoneNumberHookAction'
        - $ref: '#/components/schemas/SayPhoneNumberHookAction'
      description: This is the action to perform when the hook triggers
      title: PhoneNumberHookCallEndingDo
    PhoneNumberHookCallEnding:
      type: object
      properties:
        'on':
          $ref: '#/components/schemas/PhoneNumberHookCallEndingOn'
          description: This is the event to trigger the hook on
        filters:
          type: array
          items:
            $ref: '#/components/schemas/PhoneNumberCallEndingHookFilter'
          description: >-
            Optional filters to decide when to trigger - restricted to
            assistant-request related ended reasons
        do:
          $ref: '#/components/schemas/PhoneNumberHookCallEndingDo'
          description: This is the action to perform when the hook triggers
      required:
        - 'on'
      title: PhoneNumberHookCallEnding
    CreateByoPhoneNumberDtoHooksItems:
      oneOf:
        - $ref: '#/components/schemas/PhoneNumberHookCallRinging'
        - $ref: '#/components/schemas/PhoneNumberHookCallEnding'
      title: CreateByoPhoneNumberDtoHooksItems
    CreateByoPhoneNumberDtoProvider:
      type: string
      enum:
        - byo-phone-number
      description: >-
        This is to bring your own phone numbers from your own SIP trunks or
        Carriers.
      title: CreateByoPhoneNumberDtoProvider
    ServerHeaders:
      type: object
      properties: {}
      description: >-
        These are the headers to include in the request.


        Each key-value pair represents a header name and its value.


        Note: Specifying an Authorization header here will override the
        authorization provided by the `credentialId` (if provided). This is an
        anti-pattern and should be avoided outside of edge case scenarios.
      title: ServerHeaders
    BackoffPlanType:
      type: string
      enum:
        - fixed
        - exponential
      description: |-
        This is the type of backoff plan to use. Defaults to fixed.

        @default fixed
      title: BackoffPlanType
    BackoffPlanExcludedStatusCodesItems:
      type: object
      properties: {}
      title: BackoffPlanExcludedStatusCodesItems
    BackoffPlan:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/BackoffPlanType'
          description: |-
            This is the type of backoff plan to use. Defaults to fixed.

            @default fixed
        maxRetries:
          type: number
          format: double
          description: >-
            This is the maximum number of retries to attempt if the request
            fails. Defaults to 0 (no retries).


            @default 0
        baseDelaySeconds:
          type: number
          format: double
          description: >-
            This is the base delay in seconds. For linear backoff, this is the
            delay between each retry. For exponential backoff, this is the
            initial delay.
        excludedStatusCodes:
          type: array
          items:
            $ref: '#/components/schemas/BackoffPlanExcludedStatusCodesItems'
          description: >-
            This is the excluded status codes. If the response status code is in
            this list, the request will not be retried.

            By default, the request will be retried for any non-2xx status code.
      required:
        - type
        - maxRetries
        - baseDelaySeconds
      title: BackoffPlan
    Server:
      type: object
      properties:
        timeoutSeconds:
          type: number
          format: double
          description: >-
            This is the timeout in seconds for the request. Defaults to 20
            seconds.


            @default 20
        credentialId:
          type: string
          description: The credential ID for server authentication
        staticIpAddressesEnabled:
          type: boolean
          description: >-
            If enabled, requests will originate from a static set of IPs owned
            and managed by Vapi.


            @default false
        encryptedPaths:
          type: array
          items:
            type: string
          description: >-
            This is the paths to encrypt in the request body if credentialId and
            encryptionPlan are defined.
        url:
          type: string
          description: This is where the request will be sent.
        headers:
          $ref: '#/components/schemas/ServerHeaders'
          description: >-
            These are the headers to include in the request.


            Each key-value pair represents a header name and its value.


            Note: Specifying an Authorization header here will override the
            authorization provided by the `credentialId` (if provided). This is
            an anti-pattern and should be avoided outside of edge case
            scenarios.
        backoffPlan:
          $ref: '#/components/schemas/BackoffPlan'
          description: >-
            This is the backoff plan if the request fails. Defaults to undefined
            (the request will not be retried).


            @default undefined (the request will not be retried)
      title: Server
    CreateByoPhoneNumberDTO:
      type: object
      properties:
        fallbackDestination:
          $ref: '#/components/schemas/CreateByoPhoneNumberDtoFallbackDestination'
          description: >-
            This is the fallback destination an inbound call will be transferred
            to if:

            1. `assistantId` is not set

            2. `squadId` is not set

            3. and, `assistant-request` message to the `serverUrl` fails


            If this is not set and above conditions are met, the inbound call is
            hung up with an error message.
        hooks:
          type: array
          items:
            $ref: '#/components/schemas/CreateByoPhoneNumberDtoHooksItems'
          description: >-
            This is the hooks that will be used for incoming calls to this phone
            number.
        provider:
          $ref: '#/components/schemas/CreateByoPhoneNumberDtoProvider'
          description: >-
            This is to bring your own phone numbers from your own SIP trunks or
            Carriers.
        numberE164CheckEnabled:
          type: boolean
          default: true
          description: >-
            This is the flag to toggle the E164 check for the `number` field.
            This is an advanced property which should be used if you know your
            use case requires it.


            Use cases:

            - `false`: To allow non-E164 numbers like `+001234567890`, `1234`,
            or `abc`. This is useful for dialing out to non-E164 numbers on your
            SIP trunks.

            - `true` (default): To allow only E164 numbers like `+14155551234`.
            This is standard for PSTN calls.


            If `false`, the `number` is still required to only contain
            alphanumeric characters (regex: `/^\+?[a-zA-Z0-9]+$/`).


            @default true (E164 check is enabled)
        number:
          type: string
          description: This is the number of the customer.
        credentialId:
          type: string
          description: >-
            This is the credential of your own SIP trunk or Carrier (type
            `byo-sip-trunk`) which can be used to make calls to this phone
            number.


            You can add the SIP trunk or Carrier credential in the Provider
            Credentials page on the Dashboard to get the credentialId.
        name:
          type: string
          description: >-
            This is the name of the phone number. This is just for your own
            reference.
        assistantId:
          type: string
          description: >-
            This is the assistant that will be used for incoming calls to this
            phone number.


            If neither `assistantId`, `squadId` nor `workflowId` is set,
            `assistant-request` will be sent to your Server URL. Check
            `ServerMessage` and `ServerMessageResponse` for the shape of the
            message and response that is expected.
        workflowId:
          type: string
          description: >-
            This is the workflow that will be used for incoming calls to this
            phone number.


            If neither `assistantId`, `squadId`, nor `workflowId` is set,
            `assistant-request` will be sent to your Server URL. Check
            `ServerMessage` and `ServerMessageResponse` for the shape of the
            message and response that is expected.
        squadId:
          type: string
          description: >-
            This is the squad that will be used for incoming calls to this phone
            number.


            If neither `assistantId`, `squadId`, nor `workflowId` is set,
            `assistant-request` will be sent to your Server URL. Check
            `ServerMessage` and `ServerMessageResponse` for the shape of the
            message and response that is expected.
        server:
          $ref: '#/components/schemas/Server'
          description: >-
            This is where Vapi will send webhooks. You can find all webhooks
            available along with their shape in ServerMessage schema.


            The order of precedence is:


            1. assistant.server

            2. phoneNumber.server

            3. org.server
      required:
        - provider
        - credentialId
      title: CreateByoPhoneNumberDTO
    CreateTwilioPhoneNumberDtoFallbackDestination:
      oneOf:
        - $ref: '#/components/schemas/TransferDestinationNumber'
        - $ref: '#/components/schemas/TransferDestinationSip'
      description: >-
        This is the fallback destination an inbound call will be transferred to
        if:

        1. `assistantId` is not set

        2. `squadId` is not set

        3. and, `assistant-request` message to the `serverUrl` fails


        If this is not set and above conditions are met, the inbound call is
        hung up with an error message.
      title: CreateTwilioPhoneNumberDtoFallbackDestination
    CreateTwilioPhoneNumberDtoHooksItems:
      oneOf:
        - $ref: '#/components/schemas/PhoneNumberHookCallRinging'
        - $ref: '#/components/schemas/PhoneNumberHookCallEnding'
      title: CreateTwilioPhoneNumberDtoHooksItems
    CreateTwilioPhoneNumberDtoProvider:
      type: string
      enum:
        - twilio
      description: This is to use numbers bought on Twilio.
      title: CreateTwilioPhoneNumberDtoProvider
    CreateTwilioPhoneNumberDTO:
      type: object
      properties:
        fallbackDestination:
          $ref: '#/components/schemas/CreateTwilioPhoneNumberDtoFallbackDestination'
          description: >-
            This is the fallback destination an inbound call will be transferred
            to if:

            1. `assistantId` is not set

            2. `squadId` is not set

            3. and, `assistant-request` message to the `serverUrl` fails


            If this is not set and above conditions are met, the inbound call is
            hung up with an error message.
        hooks:
          type: array
          items:
            $ref: '#/components/schemas/CreateTwilioPhoneNumberDtoHooksItems'
          description: >-
            This is the hooks that will be used for incoming calls to this phone
            number.
        provider:
          $ref: '#/components/schemas/CreateTwilioPhoneNumberDtoProvider'
          description: This is to use numbers bought on Twilio.
        smsEnabled:
          type: boolean
          default: true
          description: >-
            Controls whether Vapi sets the messaging webhook URL on the Twilio
            number during import.


            If set to `false`, Vapi will not update the Twilio messaging URL,
            leaving it as is.

            If `true` or omitted (default), Vapi will configure both the voice
            and messaging URLs.


            @default true
        number:
          type: string
          description: These are the digits of the phone number you own on your Twilio.
        twilioAccountSid:
          type: string
          description: This is the Twilio Account SID for the phone number.
        twilioAuthToken:
          type: string
          description: This is the Twilio Auth Token for the phone number.
        twilioApiKey:
          type: string
          description: This is the Twilio API Key for the phone number.
        twilioApiSecret:
          type: string
          description: This is the Twilio API Secret for the phone number.
        name:
          type: string
          description: >-
            This is the name of the phone number. This is just for your own
            reference.
        assistantId:
          type: string
          description: >-
            This is the assistant that will be used for incoming calls to this
            phone number.


            If neither `assistantId`, `squadId` nor `workflowId` is set,
            `assistant-request` will be sent to your Server URL. Check
            `ServerMessage` and `ServerMessageResponse` for the shape of the
            message and response that is expected.
        workflowId:
          type: string
          description: >-
            This is the workflow that will be used for incoming calls to this
            phone number.


            If neither `assistantId`, `squadId`, nor `workflowId` is set,
            `assistant-request` will be sent to your Server URL. Check
            `ServerMessage` and `ServerMessageResponse` for the shape of the
            message and response that is expected.
        squadId:
          type: string
          description: >-
            This is the squad that will be used for incoming calls to this phone
            number.


            If neither `assistantId`, `squadId`, nor `workflowId` is set,
            `assistant-request` will be sent to your Server URL. Check
            `ServerMessage` and `ServerMessageResponse` for the shape of the
            message and response that is expected.
        server:
          $ref: '#/components/schemas/Server'
          description: >-
            This is where Vapi will send webhooks. You can find all webhooks
            available along with their shape in ServerMessage schema.


            The order of precedence is:


            1. assistant.server

            2. phoneNumber.server

            3. org.server
      required:
        - provider
        - number
        - twilioAccountSid
      title: CreateTwilioPhoneNumberDTO
    CreateVonagePhoneNumberDtoFallbackDestination:
      oneOf:
        - $ref: '#/components/schemas/TransferDestinationNumber'
        - $ref: '#/components/schemas/TransferDestinationSip'
      description: >-
        This is the fallback destination an inbound call will be transferred to
        if:

        1. `assistantId` is not set

        2. `squadId` is not set

        3. and, `assistant-request` message to the `serverUrl` fails


        If this is not set and above conditions are met, the inbound call is
        hung up with an error message.
      title: CreateVonagePhoneNumberDtoFallbackDestination
    CreateVonagePhoneNumberDtoHooksItems:
      oneOf:
        - $ref: '#/components/schemas/PhoneNumberHookCallRinging'
        - $ref: '#/components/schemas/PhoneNumberHookCallEnding'
      title: CreateVonagePhoneNumberDtoHooksItems
    CreateVonagePhoneNumberDtoProvider:
      type: string
      enum:
        - vonage
      description: This is to use numbers bought on Vonage.
      title: CreateVonagePhoneNumberDtoProvider
    CreateVonagePhoneNumberDTO:
      type: object
      properties:
        fallbackDestination:
          $ref: '#/components/schemas/CreateVonagePhoneNumberDtoFallbackDestination'
          description: >-
            This is the fallback destination an inbound call will be transferred
            to if:

            1. `assistantId` is not set

            2. `squadId` is not set

            3. and, `assistant-request` message to the `serverUrl` fails


            If this is not set and above conditions are met, the inbound call is
            hung up with an error message.
        hooks:
          type: array
          items:
            $ref: '#/components/schemas/CreateVonagePhoneNumberDtoHooksItems'
          description: >-
            This is the hooks that will be used for incoming calls to this phone
            number.
        provider:
          $ref: '#/components/schemas/CreateVonagePhoneNumberDtoProvider'
          description: This is to use numbers bought on Vonage.
        number:
          type: string
          description: These are the digits of the phone number you own on your Vonage.
        credentialId:
          type: string
          description: >-
            This is the credential you added in dashboard.vapi.ai/keys. This is
            used to configure the number to send inbound calls to Vapi, make
            outbound calls and do live call updates like transfers and hangups.
        name:
          type: string
          description: >-
            This is the name of the phone number. This is just for your own
            reference.
        assistantId:
          type: string
          description: >-
            This is the assistant that will be used for incoming calls to this
            phone number.


            If neither `assistantId`, `squadId` nor `workflowId` is set,
            `assistant-request` will be sent to your Server URL. Check
            `ServerMessage` and `ServerMessageResponse` for the shape of the
            message and response that is expected.
        workflowId:
          type: string
          description: >-
            This is the workflow that will be used for incoming calls to this
            phone number.


            If neither `assistantId`, `squadId`, nor `workflowId` is set,
            `assistant-request` will be sent to your Server URL. Check
            `ServerMessage` and `ServerMessageResponse` for the shape of the
            message and response that is expected.
        squadId:
          type: string
          description: >-
            This is the squad that will be used for incoming calls to this phone
            number.


            If neither `assistantId`, `squadId`, nor `workflowId` is set,
            `assistant-request` will be sent to your Server URL. Check
            `ServerMessage` and `ServerMessageResponse` for the shape of the
            message and response that is expected.
        server:
          $ref: '#/components/schemas/Server'
          description: >-
            This is where Vapi will send webhooks. You can find all webhooks
            available along with their shape in ServerMessage schema.


            The order of precedence is:


            1. assistant.server

            2. phoneNumber.server

            3. org.server
      required:
        - provider
        - number
        - credentialId
      title: CreateVonagePhoneNumberDTO
    CreateVapiPhoneNumberDtoFallbackDestination:
      oneOf:
        - $ref: '#/components/schemas/TransferDestinationNumber'
        - $ref: '#/components/schemas/TransferDestinationSip'
      description: >-
        This is the fallback destination an inbound call will be transferred to
        if:

        1. `assistantId` is not set

        2. `squadId` is not set

        3. and, `assistant-request` message to the `serverUrl` fails


        If this is not set and above conditions are met, the inbound call is
        hung up with an error message.
      title: CreateVapiPhoneNumberDtoFallbackDestination
    CreateVapiPhoneNumberDtoHooksItems:
      oneOf:
        - $ref: '#/components/schemas/PhoneNumberHookCallRinging'
        - $ref: '#/components/schemas/PhoneNumberHookCallEnding'
      title: CreateVapiPhoneNumberDtoHooksItems
    CreateVapiPhoneNumberDtoProvider:
      type: string
      enum:
        - vapi
      description: This is to create free SIP phone numbers on Vapi.
      title: CreateVapiPhoneNumberDtoProvider
    SipAuthentication:
      type: object
      properties:
        realm:
          type: string
          description: >-
            This will be expected in the `realm` field of the `authorization`
            header of the SIP INVITE. Defaults to sip.vapi.ai.
        username:
          type: string
          description: >-
            This will be expected in the `username` field of the `authorization`
            header of the SIP INVITE.
        password:
          type: string
          description: >-
            This will be expected to generate the `response` field of the
            `authorization` header of the SIP INVITE, through digest
            authentication.
      required:
        - username
        - password
      title: SipAuthentication
    CreateVapiPhoneNumberDTO:
      type: object
      properties:
        fallbackDestination:
          $ref: '#/components/schemas/CreateVapiPhoneNumberDtoFallbackDestination'
          description: >-
            This is the fallback destination an inbound call will be transferred
            to if:

            1. `assistantId` is not set

            2. `squadId` is not set

            3. and, `assistant-request` message to the `serverUrl` fails


            If this is not set and above conditions are met, the inbound call is
            hung up with an error message.
        hooks:
          type: array
          items:
            $ref: '#/components/schemas/CreateVapiPhoneNumberDtoHooksItems'
          description: >-
            This is the hooks that will be used for incoming calls to this phone
            number.
        provider:
          $ref: '#/components/schemas/CreateVapiPhoneNumberDtoProvider'
          description: This is to create free SIP phone numbers on Vapi.
        numberDesiredAreaCode:
          type: string
          description: This is the area code of the phone number to purchase.
        sipUri:
          type: string
          description: >-
            This is the SIP URI of the phone number. You can SIP INVITE this.
            The assistant attached to this number will answer.


            This is case-insensitive.
        authentication:
          $ref: '#/components/schemas/SipAuthentication'
          description: >-
            This enables authentication for incoming SIP INVITE requests to the
            `sipUri`.


            If not set, any username/password to the 401 challenge of the SIP
            INVITE will be accepted.
        name:
          type: string
          description: >-
            This is the name of the phone number. This is just for your own
            reference.
        assistantId:
          type: string
          description: >-
            This is the assistant that will be used for incoming calls to this
            phone number.


            If neither `assistantId`, `squadId` nor `workflowId` is set,
            `assistant-request` will be sent to your Server URL. Check
            `ServerMessage` and `ServerMessageResponse` for the shape of the
            message and response that is expected.
        workflowId:
          type: string
          description: >-
            This is the workflow that will be used for incoming calls to this
            phone number.


            If neither `assistantId`, `squadId`, nor `workflowId` is set,
            `assistant-request` will be sent to your Server URL. Check
            `ServerMessage` and `ServerMessageResponse` for the shape of the
            message and response that is expected.
        squadId:
          type: string
          description: >-
            This is the squad that will be used for incoming calls to this phone
            number.


            If neither `assistantId`, `squadId`, nor `workflowId` is set,
            `assistant-request` will be sent to your Server URL. Check
            `ServerMessage` and `ServerMessageResponse` for the shape of the
            message and response that is expected.
        server:
          $ref: '#/components/schemas/Server'
          description: >-
            This is where Vapi will send webhooks. You can find all webhooks
            available along with their shape in ServerMessage schema.


            The order of precedence is:


            1. assistant.server

            2. phoneNumber.server

            3. org.server
      required:
        - provider
      title: CreateVapiPhoneNumberDTO
    CreateTelnyxPhoneNumberDtoFallbackDestination:
      oneOf:
        - $ref: '#/components/schemas/TransferDestinationNumber'
        - $ref: '#/components/schemas/TransferDestinationSip'
      description: >-
        This is the fallback destination an inbound call will be transferred to
        if:

        1. `assistantId` is not set

        2. `squadId` is not set

        3. and, `assistant-request` message to the `serverUrl` fails


        If this is not set and above conditions are met, the inbound call is
        hung up with an error message.
      title: CreateTelnyxPhoneNumberDtoFallbackDestination
    CreateTelnyxPhoneNumberDtoHooksItems:
      oneOf:
        - $ref: '#/components/schemas/PhoneNumberHookCallRinging'
        - $ref: '#/components/schemas/PhoneNumberHookCallEnding'
      title: CreateTelnyxPhoneNumberDtoHooksItems
    CreateTelnyxPhoneNumberDtoProvider:
      type: string
      enum:
        - telnyx
      description: This is to use numbers bought on Telnyx.
      title: CreateTelnyxPhoneNumberDtoProvider
    CreateTelnyxPhoneNumberDTO:
      type: object
      properties:
        fallbackDestination:
          $ref: '#/components/schemas/CreateTelnyxPhoneNumberDtoFallbackDestination'
          description: >-
            This is the fallback destination an inbound call will be transferred
            to if:

            1. `assistantId` is not set

            2. `squadId` is not set

            3. and, `assistant-request` message to the `serverUrl` fails


            If this is not set and above conditions are met, the inbound call is
            hung up with an error message.
        hooks:
          type: array
          items:
            $ref: '#/components/schemas/CreateTelnyxPhoneNumberDtoHooksItems'
          description: >-
            This is the hooks that will be used for incoming calls to this phone
            number.
        provider:
          $ref: '#/components/schemas/CreateTelnyxPhoneNumberDtoProvider'
          description: This is to use numbers bought on Telnyx.
        number:
          type: string
          description: These are the digits of the phone number you own on your Telnyx.
        credentialId:
          type: string
          description: >-
            This is the credential you added in dashboard.vapi.ai/keys. This is
            used to configure the number to send inbound calls to Vapi, make
            outbound calls and do live call updates like transfers and hangups.
        name:
          type: string
          description: >-
            This is the name of the phone number. This is just for your own
            reference.
        assistantId:
          type: string
          description: >-
            This is the assistant that will be used for incoming calls to this
            phone number.


            If neither `assistantId`, `squadId` nor `workflowId` is set,
            `assistant-request` will be sent to your Server URL. Check
            `ServerMessage` and `ServerMessageResponse` for the shape of the
            message and response that is expected.
        workflowId:
          type: string
          description: >-
            This is the workflow that will be used for incoming calls to this
            phone number.


            If neither `assistantId`, `squadId`, nor `workflowId` is set,
            `assistant-request` will be sent to your Server URL. Check
            `ServerMessage` and `ServerMessageResponse` for the shape of the
            message and response that is expected.
        squadId:
          type: string
          description: >-
            This is the squad that will be used for incoming calls to this phone
            number.


            If neither `assistantId`, `squadId`, nor `workflowId` is set,
            `assistant-request` will be sent to your Server URL. Check
            `ServerMessage` and `ServerMessageResponse` for the shape of the
            message and response that is expected.
        server:
          $ref: '#/components/schemas/Server'
          description: >-
            This is where Vapi will send webhooks. You can find all webhooks
            available along with their shape in ServerMessage schema.


            The order of precedence is:


            1. assistant.server

            2. phoneNumber.server

            3. org.server
      required:
        - provider
        - number
        - credentialId
      title: CreateTelnyxPhoneNumberDTO
    ServerMessageAssistantRequestPhoneNumber:
      oneOf:
        - $ref: '#/components/schemas/CreateByoPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO'
      description: This is the phone number that the message is associated with.
      title: ServerMessageAssistantRequestPhoneNumber
    ServerMessageAssistantRequestType:
      type: string
      enum:
        - assistant-request
      description: >-
        This is the type of the message. "assistant-request" is sent to fetch
        assistant configuration for an incoming call.
      title: ServerMessageAssistantRequestType
    UserMessageMetadata:
      type: object
      properties: {}
      description: >-
        The metadata associated with the message. Currently used to store the
        transcriber's word level confidence.
      title: UserMessageMetadata
    UserMessage:
      type: object
      properties:
        role:
          type: string
          description: The role of the user in the conversation.
        message:
          type: string
          description: The message content from the user.
        time:
          type: number
          format: double
          description: The timestamp when the message was sent.
        endTime:
          type: number
          format: double
          description: The timestamp when the message ended.
        secondsFromStart:
          type: number
          format: double
          description: The number of seconds from the start of the conversation.
        duration:
          type: number
          format: double
          description: The duration of the message in seconds.
        isFiltered:
          type: boolean
          description: Indicates if the message was filtered for security reasons.
        detectedThreats:
          type: array
          items:
            type: string
          description: List of detected security threats if the message was filtered.
        originalMessage:
          type: string
          description: >-
            The original message before filtering (only included if content was
            filtered).
        metadata:
          $ref: '#/components/schemas/UserMessageMetadata'
          description: >-
            The metadata associated with the message. Currently used to store
            the transcriber's word level confidence.
        speakerLabel:
          type: string
          description: Stable speaker label for diarized user speakers (e.g., "Speaker 1").
      required:
        - role
        - message
        - time
        - endTime
        - secondsFromStart
      title: UserMessage
    SystemMessage:
      type: object
      properties:
        role:
          type: string
          description: The role of the system in the conversation.
        message:
          type: string
          description: The message content from the system.
        time:
          type: number
          format: double
          description: The timestamp when the message was sent.
        secondsFromStart:
          type: number
          format: double
          description: The number of seconds from the start of the conversation.
      required:
        - role
        - message
        - time
        - secondsFromStart
      title: SystemMessage
    BotMessage:
      type: object
      properties:
        role:
          type: string
          description: The role of the bot in the conversation.
        message:
          type: string
          description: The message content from the bot.
        time:
          type: number
          format: double
          description: The timestamp when the message was sent.
        endTime:
          type: number
          format: double
          description: The timestamp when the message ended.
        secondsFromStart:
          type: number
          format: double
          description: The number of seconds from the start of the conversation.
        source:
          type: string
          description: The source of the message.
        duration:
          type: number
          format: double
          description: The duration of the message in seconds.
      required:
        - role
        - message
        - time
        - endTime
        - secondsFromStart
      title: BotMessage
    ToolCallMessageToolCallsItems:
      type: object
      properties: {}
      title: ToolCallMessageToolCallsItems
    ToolCallMessage:
      type: object
      properties:
        role:
          type: string
          description: The role of the tool call in the conversation.
        toolCalls:
          type: array
          items:
            $ref: '#/components/schemas/ToolCallMessageToolCallsItems'
          description: The list of tool calls made during the conversation.
        message:
          type: string
          description: The message content for the tool call.
        time:
          type: number
          format: double
          description: The timestamp when the message was sent.
        secondsFromStart:
          type: number
          format: double
          description: The number of seconds from the start of the conversation.
      required:
        - role
        - toolCalls
        - message
        - time
        - secondsFromStart
      title: ToolCallMessage
    ToolMessageCompleteContentsItems:
      oneOf:
        - $ref: '#/components/schemas/TextContent'
      title: ToolMessageCompleteContentsItems
    ToolMessageCompleteType:
      type: string
      enum:
        - request-complete
      description: >-
        This message is triggered when the tool call is complete.


        This message is triggered immediately without waiting for your server to
        respond for async tool calls.


        If this message is not provided, the model will be requested to respond.


        If this message is provided, only this message will be spoken and the
        model will not be requested to come up with a response. It's an
        exclusive OR.
      title: ToolMessageCompleteType
    ToolMessageCompleteRole:
      type: string
      enum:
        - assistant
        - system
      description: >-
        This is optional and defaults to "assistant".


        When role=assistant, `content` is said out loud.


        When role=system, `content` is passed to the model in a system message.
        Example:
            system: default one
            assistant:
            user:
            assistant:
            user:
            assistant:
            user:
            assistant: tool called
            tool: your server response
            <--- system prompt as hint
            ---> model generates response which is spoken
        This is useful when you want to provide a hint to the model about what
        to say next.
      title: ToolMessageCompleteRole
    ConditionOperator:
      type: string
      enum:
        - eq
        - neq
        - gt
        - gte
        - lt
        - lte
      description: This is the operator you want to use to compare the parameter and value.
      title: ConditionOperator
    Condition:
      type: object
      properties:
        operator:
          $ref: '#/components/schemas/ConditionOperator'
          description: >-
            This is the operator you want to use to compare the parameter and
            value.
        param:
          type: string
          description: This is the name of the parameter that you want to check.
        value:
          type: string
          description: This is the value you want to compare against the parameter.
      required:
        - operator
        - param
        - value
      title: Condition
    ToolMessageComplete:
      type: object
      properties:
        contents:
          type: array
          items:
            $ref: '#/components/schemas/ToolMessageCompleteContentsItems'
          description: >-
            This is an alternative to the `content` property. It allows to
            specify variants of the same content, one per language.


            Usage:

            - If your assistants are multilingual, you can provide content for
            each language.

            - If you don't provide content for a language, the first item in the
            array will be automatically translated to the active language at
            that moment.


            This will override the `content` property.
        type:
          $ref: '#/components/schemas/ToolMessageCompleteType'
          description: >-
            This message is triggered when the tool call is complete.


            This message is triggered immediately without waiting for your
            server to respond for async tool calls.


            If this message is not provided, the model will be requested to
            respond.


            If this message is provided, only this message will be spoken and
            the model will not be requested to come up with a response. It's an
            exclusive OR.
        role:
          $ref: '#/components/schemas/ToolMessageCompleteRole'
          description: >-
            This is optional and defaults to "assistant".


            When role=assistant, `content` is said out loud.


            When role=system, `content` is passed to the model in a system
            message. Example:
                system: default one
                assistant:
                user:
                assistant:
                user:
                assistant:
                user:
                assistant: tool called
                tool: your server response
                <--- system prompt as hint
                ---> model generates response which is spoken
            This is useful when you want to provide a hint to the model about
            what to say next.
        endCallAfterSpokenEnabled:
          type: boolean
          description: >-
            This is an optional boolean that if true, the call will end after
            the message is spoken. Default is false.


            This is ignored if `role` is set to `system`.


            @default false
        content:
          type: string
          description: >-
            This is the content that the assistant says when this message is
            triggered.
        conditions:
          type: array
          items:
            $ref: '#/components/schemas/Condition'
          description: >-
            This is an optional array of conditions that the tool call arguments
            must meet in order for this message to be triggered.
      required:
        - type
      title: ToolMessageComplete
    ToolMessageFailedContentsItems:
      oneOf:
        - $ref: '#/components/schemas/TextContent'
      title: ToolMessageFailedContentsItems
    ToolMessageFailedType:
      type: string
      enum:
        - request-failed
      description: >-
        This message is triggered when the tool call fails.


        This message is never triggered for async tool calls.


        If this message is not provided, the model will be requested to respond.


        If this message is provided, only this message will be spoken and the
        model will not be requested to come up with a response. It's an
        exclusive OR.
      title: ToolMessageFailedType
    ToolMessageFailed:
      type: object
      properties:
        contents:
          type: array
          items:
            $ref: '#/components/schemas/ToolMessageFailedContentsItems'
          description: >-
            This is an alternative to the `content` property. It allows to
            specify variants of the same content, one per language.


            Usage:

            - If your assistants are multilingual, you can provide content for
            each language.

            - If you don't provide content for a language, the first item in the
            array will be automatically translated to the active language at
            that moment.


            This will override the `content` property.
        type:
          $ref: '#/components/schemas/ToolMessageFailedType'
          description: >-
            This message is triggered when the tool call fails.


            This message is never triggered for async tool calls.


            If this message is not provided, the model will be requested to
            respond.


            If this message is provided, only this message will be spoken and
            the model will not be requested to come up with a response. It's an
            exclusive OR.
        endCallAfterSpokenEnabled:
          type: boolean
          description: >-
            This is an optional boolean that if true, the call will end after
            the message is spoken. Default is false.


            @default false
        content:
          type: string
          description: >-
            This is the content that the assistant says when this message is
            triggered.
        conditions:
          type: array
          items:
            $ref: '#/components/schemas/Condition'
          description: >-
            This is an optional array of conditions that the tool call arguments
            must meet in order for this message to be triggered.
      required:
        - type
      title: ToolMessageFailed
    ToolCallResultMessage:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
      description: >-
        This is the message that will be spoken to the user.


        If this is not returned, assistant will speak:

        1. a `request-complete` or `request-failed` message from
        `tool.messages`, if it exists

        2. a response generated by the model, if not
      title: ToolCallResultMessage
    ArtifactMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/UserMessage'
        - $ref: '#/components/schemas/SystemMessage'
        - $ref: '#/components/schemas/BotMessage'
        - $ref: '#/components/schemas/ToolCallMessage'
        - $ref: '#/components/schemas/ToolCallResultMessage'
      title: ArtifactMessagesItems
    OpenAiMessageRole:
      type: string
      enum:
        - assistant
        - function
        - user
        - system
        - tool
      title: OpenAiMessageRole
    OpenAIMessage:
      type: object
      properties:
        content:
          type:
            - string
            - 'null'
        role:
          $ref: '#/components/schemas/OpenAiMessageRole'
      required:
        - content
        - role
      title: OpenAIMessage
    Mono:
      type: object
      properties:
        combinedUrl:
          type: string
          description: >-
            This is the combined recording url for the call. To enable, set
            `assistant.artifactPlan.recordingEnabled`.
        assistantUrl:
          type: string
          description: >-
            This is the mono recording url for the assistant. To enable, set
            `assistant.artifactPlan.recordingEnabled`.
        customerUrl:
          type: string
          description: >-
            This is the mono recording url for the customer. To enable, set
            `assistant.artifactPlan.recordingEnabled`.
      title: Mono
    Recording:
      type: object
      properties:
        stereoUrl:
          type: string
          description: >-
            This is the stereo recording url for the call. To enable, set
            `assistant.artifactPlan.recordingEnabled`.
        videoUrl:
          type: string
          description: >-
            This is the video recording url for the call. To enable, set
            `assistant.artifactPlan.videoRecordingEnabled`.
        videoRecordingStartDelaySeconds:
          type: number
          format: double
          description: >-
            This is video recording start delay in ms. To enable, set
            `assistant.artifactPlan.videoRecordingEnabled`. This can be used to
            align the playback of the recording with artifact.messages
            timestamps.
        mono:
          $ref: '#/components/schemas/Mono'
          description: >-
            This is the mono recording url for the call. To enable, set
            `assistant.artifactPlan.recordingEnabled`.
      title: Recording
    NodeArtifactMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/UserMessage'
        - $ref: '#/components/schemas/SystemMessage'
        - $ref: '#/components/schemas/BotMessage'
        - $ref: '#/components/schemas/ToolCallMessage'
        - $ref: '#/components/schemas/ToolCallResultMessage'
      title: NodeArtifactMessagesItems
    NodeArtifactVariableValues:
      type: object
      properties: {}
      description: These are the variable values that were extracted from the node.
      title: NodeArtifactVariableValues
    NodeArtifact:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/NodeArtifactMessagesItems'
          description: These are the messages that were spoken during the node.
        nodeName:
          type: string
          description: This is the node name.
        variableValues:
          $ref: '#/components/schemas/NodeArtifactVariableValues'
          description: These are the variable values that were extracted from the node.
      title: NodeArtifact
    AssistantActivation:
      type: object
      properties:
        assistantName:
          type: string
          description: This is the name of the assistant that was active during the call.
        assistantId:
          type: string
          description: This is the ID of the assistant that was active during the call.
      required:
        - assistantName
      title: AssistantActivation
    ArtifactVariableValues:
      type: object
      properties: {}
      description: These are the variable values at the end of the workflow execution.
      title: ArtifactVariableValues
    TurnLatency:
      type: object
      properties:
        modelLatency:
          type: number
          format: double
          description: This is the model latency for the first token.
        voiceLatency:
          type: number
          format: double
          description: This is the voice latency from the model output.
        transcriberLatency:
          type: number
          format: double
          description: This is the transcriber latency from the user speech.
        endpointingLatency:
          type: number
          format: double
          description: This is the endpointing latency.
        turnLatency:
          type: number
          format: double
          description: This is the latency for the whole turn.
      title: TurnLatency
    PerformanceMetrics:
      type: object
      properties:
        turnLatencies:
          type: array
          items:
            $ref: '#/components/schemas/TurnLatency'
          description: These are the individual latencies for each turn.
        modelLatencyAverage:
          type: number
          format: double
          description: This is the average latency for the model to output the first token.
        voiceLatencyAverage:
          type: number
          format: double
          description: This is the average latency for the text to speech.
        transcriberLatencyAverage:
          type: number
          format: double
          description: This is the average latency for the transcriber.
        endpointingLatencyAverage:
          type: number
          format: double
          description: This is the average latency for the endpointing.
        turnLatencyAverage:
          type: number
          format: double
          description: This is the average latency for complete turns.
        fromTransportLatencyAverage:
          type: number
          format: double
          description: >-
            This is the average latency for packets received from the transport
            provider in milliseconds.
        toTransportLatencyAverage:
          type: number
          format: double
          description: >-
            This is the average latency for packets sent to the transport
            provider in milliseconds.
        numUserInterrupted:
          type: number
          format: double
          description: >-
            This is the number of times the user was interrupted by the
            assistant during the call.
        numAssistantInterrupted:
          type: number
          format: double
          description: >-
            This is the number of times the assistant was interrupted by the
            user during the call.
      title: PerformanceMetrics
    ArtifactStructuredOutputs:
      type: object
      properties: {}
      description: >-
        These are the structured outputs that will be extracted from the call.

        To enable, set `assistant.artifactPlan.structuredOutputIds` with the IDs
        of the structured outputs you want to extract.
      title: ArtifactStructuredOutputs
    ArtifactScorecards:
      type: object
      properties: {}
      description: >-
        These are the scorecards that have been evaluated based on the
        structured outputs extracted during the call.

        To enable, set `assistant.artifactPlan.scorecardIds` or
        `assistant.artifactPlan.scorecards` with the IDs or objects of the
        scorecards you want to evaluate.
      title: ArtifactScorecards
    Artifact:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/ArtifactMessagesItems'
          description: These are the messages that were spoken during the call.
        messagesOpenAIFormatted:
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
          description: >-
            These are the messages that were spoken during the call, formatted
            for OpenAI.
        recordingUrl:
          type: string
          description: >-
            This is the recording url for the call. To enable, set
            `assistant.artifactPlan.recordingEnabled`.
        stereoRecordingUrl:
          type: string
          description: >-
            This is the stereo recording url for the call. To enable, set
            `assistant.artifactPlan.recordingEnabled`.
        videoRecordingUrl:
          type: string
          description: >-
            This is video recording url for the call. To enable, set
            `assistant.artifactPlan.videoRecordingEnabled`.
        videoRecordingStartDelaySeconds:
          type: number
          format: double
          description: >-
            This is video recording start delay in ms. To enable, set
            `assistant.artifactPlan.videoRecordingEnabled`. This can be used to
            align the playback of the recording with artifact.messages
            timestamps.
        recording:
          $ref: '#/components/schemas/Recording'
          description: >-
            This is the recording url for the call. To enable, set
            `assistant.artifactPlan.recordingEnabled`.
        transcript:
          type: string
          description: >-
            This is the transcript of the call. This is derived from
            `artifact.messages` but provided for convenience.
        pcapUrl:
          type: string
          description: >-
            This is the packet capture url for the call. This is only available
            for `phone` type calls where phone number's provider is `vapi` or
            `byo-phone-number`.
        logUrl:
          type: string
          description: >-
            This is the url for the call logs. This includes all logging output
            during the call for debugging purposes.
        nodes:
          type: array
          items:
            $ref: '#/components/schemas/NodeArtifact'
          description: >-
            This is the history of workflow nodes that were executed during the
            call.
        assistantActivations:
          type: array
          items:
            $ref: '#/components/schemas/AssistantActivation'
          description: >-
            Ordered list of assistants that were active during the call,
            including after transfers and handoffs.
        variableValues:
          $ref: '#/components/schemas/ArtifactVariableValues'
          description: These are the variable values at the end of the workflow execution.
        performanceMetrics:
          $ref: '#/components/schemas/PerformanceMetrics'
          description: >-
            This is the performance metrics for the call. It contains the turn
            latency, broken down by component.
        structuredOutputs:
          $ref: '#/components/schemas/ArtifactStructuredOutputs'
          description: >-
            These are the structured outputs that will be extracted from the
            call.

            To enable, set `assistant.artifactPlan.structuredOutputIds` with the
            IDs of the structured outputs you want to extract.
        scorecards:
          $ref: '#/components/schemas/ArtifactScorecards'
          description: >-
            These are the scorecards that have been evaluated based on the
            structured outputs extracted during the call.

            To enable, set `assistant.artifactPlan.scorecardIds` or
            `assistant.artifactPlan.scorecards` with the IDs or objects of the
            scorecards you want to evaluate.
        transfers:
          type: array
          items:
            type: string
          description: >-
            These are the transfer records from warm transfers, including
            destinations, transcripts, and status.
        structuredOutputsLastUpdatedAt:
          type: string
          format: date-time
          description: This is when the structured outputs were last updated
      title: Artifact
    AssemblyAiTranscriberProvider:
      type: string
      enum:
        - assembly-ai
      description: This is the transcription provider that will be used.
      title: AssemblyAiTranscriberProvider
    AssemblyAiTranscriberLanguage:
      type: string
      enum:
        - multi
        - en
      description: This is the language that will be set for the transcription.
      title: AssemblyAiTranscriberLanguage
    AssemblyAiTranscriberSpeechModel:
      type: string
      enum:
        - universal-streaming-english
        - universal-streaming-multilingual
      description: |-
        This is the speech model used for the streaming session.
        Note: Keyterms prompting is not supported with multilingual streaming.
        @default 'universal-streaming-english'
      title: AssemblyAiTranscriberSpeechModel
    FallbackAssemblyAiTranscriberProvider:
      type: string
      enum:
        - assembly-ai
      description: This is the transcription provider that will be used.
      title: FallbackAssemblyAiTranscriberProvider
    FallbackAssemblyAiTranscriberLanguage:
      type: string
      enum:
        - multi
        - en
      description: This is the language that will be set for the transcription.
      title: FallbackAssemblyAiTranscriberLanguage
    FallbackAssemblyAiTranscriberSpeechModel:
      type: string
      enum:
        - universal-streaming-english
        - universal-streaming-multilingual
      description: |-
        This is the speech model used for the streaming session.
        Note: Keyterms prompting is not supported with multilingual streaming.
        @default 'universal-streaming-english'
      title: FallbackAssemblyAiTranscriberSpeechModel
    FallbackAssemblyAITranscriber:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/FallbackAssemblyAiTranscriberProvider'
          description: This is the transcription provider that will be used.
        language:
          $ref: '#/components/schemas/FallbackAssemblyAiTranscriberLanguage'
          description: This is the language that will be set for the transcription.
        confidenceThreshold:
          type: number
          format: double
          description: |-
            Transcripts below this confidence threshold will be discarded.

            @default 0.4
        formatTurns:
          type: boolean
          description: |-
            This enables formatting of transcripts.

            @default true
        endOfTurnConfidenceThreshold:
          type: number
          format: double
          description: >-
            This is the end of turn confidence threshold. The minimum confidence
            that the end of turn is detected.

            Note: Only used if startSpeakingPlan.smartEndpointingPlan is not
            set.

            @min 0

            @max 1

            @default 0.7
        minEndOfTurnSilenceWhenConfident:
          type: number
          format: double
          description: >-
            This is the minimum end of turn silence when confident in
            milliseconds.

            Note: Only used if startSpeakingPlan.smartEndpointingPlan is not
            set.

            @default 160
        wordFinalizationMaxWaitTime:
          type: number
          format: double
        maxTurnSilence:
          type: number
          format: double
          description: >-
            This is the maximum turn silence time in milliseconds.

            Note: Only used if startSpeakingPlan.smartEndpointingPlan is not
            set.

            @default 400
        vadAssistedEndpointingEnabled:
          type: boolean
          description: >-
            Use VAD to assist with endpointing decisions from the transcriber.

            When enabled, transcriber endpointing will be buffered if VAD
            detects the user is still speaking, preventing premature
            turn-taking.

            When disabled, transcriber endpointing will be used immediately
            regardless of VAD state, allowing for quicker but more aggressive
            turn-taking.

            Note: Only used if startSpeakingPlan.smartEndpointingPlan is not
            set.


            @default true
        speechModel:
          $ref: '#/components/schemas/FallbackAssemblyAiTranscriberSpeechModel'
          description: >-
            This is the speech model used for the streaming session.

            Note: Keyterms prompting is not supported with multilingual
            streaming.

            @default 'universal-streaming-english'
        realtimeUrl:
          type: string
          description: The WebSocket URL that the transcriber connects to.
        wordBoost:
          type: array
          items:
            type: string
          description: Add up to 2500 characters of custom vocabulary.
        keytermsPrompt:
          type: array
          items:
            type: string
          description: >-
            Keyterms prompting improves recognition accuracy for specific words
            and phrases.

            Can include up to 100 keyterms, each up to 50 characters.

            Costs an additional $0.04/hour when enabled.
        endUtteranceSilenceThreshold:
          type: number
          format: double
          description: The duration of the end utterance silence threshold in milliseconds.
        disablePartialTranscripts:
          type: boolean
          description: >-
            Disable partial transcripts.

            Set to `true` to not receive partial transcripts. Defaults to
            `false`.
      required:
        - provider
      title: FallbackAssemblyAITranscriber
    FallbackAzureSpeechTranscriberProvider:
      type: string
      enum:
        - azure
      description: This is the transcription provider that will be used.
      title: FallbackAzureSpeechTranscriberProvider
    FallbackAzureSpeechTranscriberLanguage:
      type: string
      enum:
        - af-ZA
        - am-ET
        - ar-AE
        - ar-BH
        - ar-DZ
        - ar-EG
        - ar-IL
        - ar-IQ
        - ar-JO
        - ar-KW
        - ar-LB
        - ar-LY
        - ar-MA
        - ar-OM
        - ar-PS
        - ar-QA
        - ar-SA
        - ar-SY
        - ar-TN
        - ar-YE
        - az-AZ
        - bg-BG
        - bn-IN
        - bs-BA
        - ca-ES
        - cs-CZ
        - cy-GB
        - da-DK
        - de-AT
        - de-CH
        - de-DE
        - el-GR
        - en-AU
        - en-CA
        - en-GB
        - en-GH
        - en-HK
        - en-IE
        - en-IN
        - en-KE
        - en-NG
        - en-NZ
        - en-PH
        - en-SG
        - en-TZ
        - en-US
        - en-ZA
        - es-AR
        - es-BO
        - es-CL
        - es-CO
        - es-CR
        - es-CU
        - es-DO
        - es-EC
        - es-ES
        - es-GQ
        - es-GT
        - es-HN
        - es-MX
        - es-NI
        - es-PA
        - es-PE
        - es-PR
        - es-PY
        - es-SV
        - es-US
        - es-UY
        - es-VE
        - et-EE
        - eu-ES
        - fa-IR
        - fi-FI
        - fil-PH
        - fr-BE
        - fr-CA
        - fr-CH
        - fr-FR
        - ga-IE
        - gl-ES
        - gu-IN
        - he-IL
        - hi-IN
        - hr-HR
        - hu-HU
        - hy-AM
        - id-ID
        - is-IS
        - it-CH
        - it-IT
        - ja-JP
        - jv-ID
        - ka-GE
        - kk-KZ
        - km-KH
        - kn-IN
        - ko-KR
        - lo-LA
        - lt-LT
        - lv-LV
        - mk-MK
        - ml-IN
        - mn-MN
        - mr-IN
        - ms-MY
        - mt-MT
        - my-MM
        - nb-NO
        - ne-NP
        - nl-BE
        - nl-NL
        - pa-IN
        - pl-PL
        - ps-AF
        - pt-BR
        - pt-PT
        - ro-RO
        - ru-RU
        - si-LK
        - sk-SK
        - sl-SI
        - so-SO
        - sq-AL
        - sr-RS
        - sv-SE
        - sw-KE
        - sw-TZ
        - ta-IN
        - te-IN
        - th-TH
        - tr-TR
        - uk-UA
        - ur-IN
        - uz-UZ
        - vi-VN
        - wuu-CN
        - yue-CN
        - zh-CN
        - zh-CN-shandong
        - zh-CN-sichuan
        - zh-HK
        - zh-TW
        - zu-ZA
      description: >-
        This is the language that will be set for the transcription. The list of
        languages Azure supports can be found here:
        https://learn.microsoft.com/en-us/azure/ai-services/speech-service/language-support?tabs=stt
      title: FallbackAzureSpeechTranscriberLanguage
    FallbackAzureSpeechTranscriberSegmentationStrategy:
      type: string
      enum:
        - Default
        - Time
        - Semantic
      description: >-
        Controls how phrase boundaries are detected, enabling either simple
        time/silence heuristics or more advanced semantic segmentation.
      title: FallbackAzureSpeechTranscriberSegmentationStrategy
    FallbackAzureSpeechTranscriber:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/FallbackAzureSpeechTranscriberProvider'
          description: This is the transcription provider that will be used.
        language:
          $ref: '#/components/schemas/FallbackAzureSpeechTranscriberLanguage'
          description: >-
            This is the language that will be set for the transcription. The
            list of languages Azure supports can be found here:
            https://learn.microsoft.com/en-us/azure/ai-services/speech-service/language-support?tabs=stt
        segmentationStrategy:
          $ref: >-
            #/components/schemas/FallbackAzureSpeechTranscriberSegmentationStrategy
          description: >-
            Controls how phrase boundaries are detected, enabling either simple
            time/silence heuristics or more advanced semantic segmentation.
        segmentationSilenceTimeoutMs:
          type: number
          format: double
          description: >-
            Duration of detected silence after which the service finalizes a
            phrase. Configure to adjust sensitivity to pauses in speech.
        segmentationMaximumTimeMs:
          type: number
          format: double
          description: >-
            Maximum duration a segment can reach before being cut off when using
            time-based segmentation.
      required:
        - provider
      title: FallbackAzureSpeechTranscriber
    FallbackCustomTranscriberProvider:
      type: string
      enum:
        - custom-transcriber
      description: >-
        This is the transcription provider that will be used. Use
        `custom-transcriber` for providers that are not natively supported.
      title: FallbackCustomTranscriberProvider
    FallbackCustomTranscriber:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/FallbackCustomTranscriberProvider'
          description: >-
            This is the transcription provider that will be used. Use
            `custom-transcriber` for providers that are not natively supported.
        server:
          $ref: '#/components/schemas/Server'
          description: >-
            This is where the transcription request will be sent.


            Usage:

            1. Vapi will initiate a websocket connection with `server.url`.


            2. Vapi will send an initial text frame with the sample rate.
            Format:

            ```
                {
                  "type": "start",
                  "encoding": "linear16", // 16-bit raw PCM format
                  "container": "raw",
                  "sampleRate": {{sampleRate}},
                  "channels": 2 // customer is channel 0, assistant is channel 1
                }
            ```


            3. Vapi will send the audio data in 16-bit raw PCM format as binary
            frames.


            4. You can read the messages something like this:

            ```

            ws.on('message', (data, isBinary) => {
              if (isBinary) {
                pcmBuffer = Buffer.concat([pcmBuffer, data]);
                console.log(`Received PCM data, buffer size: ${pcmBuffer.length}`);
              } else {
                console.log('Received message:', JSON.parse(data.toString()));
              }
            });

            ```


            5. You will respond with transcriptions as you have them. Format:

            ```
             {
                "type": "transcriber-response",
                "transcription": "Hello, world!",
                "channel": "customer" | "assistant"
             }
            ```
      required:
        - provider
        - server
      title: FallbackCustomTranscriber
    FallbackDeepgramTranscriberProvider:
      type: string
      enum:
        - deepgram
      description: This is the transcription provider that will be used.
      title: FallbackDeepgramTranscriberProvider
    FallbackDeepgramTranscriberModel0:
      type: string
      enum:
        - nova-3
        - nova-3-general
        - nova-3-medical
        - nova-2
        - nova-2-general
        - nova-2-meeting
        - nova-2-phonecall
        - nova-2-finance
        - nova-2-conversationalai
        - nova-2-voicemail
        - nova-2-video
        - nova-2-medical
        - nova-2-drivethru
        - nova-2-automotive
        - nova
        - nova-general
        - nova-phonecall
        - nova-medical
        - enhanced
        - enhanced-general
        - enhanced-meeting
        - enhanced-phonecall
        - enhanced-finance
        - base
        - base-general
        - base-meeting
        - base-phonecall
        - base-finance
        - base-conversationalai
        - base-voicemail
        - base-video
        - whisper
        - flux-general-en
      title: FallbackDeepgramTranscriberModel0
    FallbackDeepgramTranscriberModel:
      oneOf:
        - $ref: '#/components/schemas/FallbackDeepgramTranscriberModel0'
        - type: string
      description: >-
        This is the Deepgram model that will be used. A list of models can be
        found here:
        https://developers.deepgram.com/docs/models-languages-overview
      title: FallbackDeepgramTranscriberModel
    FallbackDeepgramTranscriberLanguage:
      type: string
      enum:
        - ar
        - az
        - ba
        - bg
        - br
        - ca
        - cs
        - da
        - da-DK
        - de
        - de-CH
        - el
        - en
        - en-AU
        - en-CA
        - en-GB
        - en-IE
        - en-IN
        - en-NZ
        - en-US
        - es
        - es-419
        - es-LATAM
        - et
        - eu
        - fa
        - fi
        - fr
        - fr-CA
        - ha
        - haw
        - he
        - hi
        - hi-Latn
        - hu
        - id
        - is
        - it
        - ja
        - jw
        - kn
        - ko
        - ko-KR
        - ln
        - lt
        - lv
        - mk
        - ms
        - multi
        - nl
        - nl-BE
        - 'no'
        - pl
        - pt
        - pt-BR
        - pt-PT
        - ro
        - ru
        - sk
        - sl
        - sn
        - so
        - sr
        - su
        - sv
        - sv-SE
        - ta
        - taq
        - th
        - th-TH
        - tr
        - tt
        - uk
        - ur
        - vi
        - yo
        - zh
        - zh-CN
        - zh-HK
        - zh-Hans
        - zh-Hant
        - zh-TW
      description: >-
        This is the language that will be set for the transcription. The list of
        languages Deepgram supports can be found here:
        https://developers.deepgram.com/docs/models-languages-overview
      title: FallbackDeepgramTranscriberLanguage
    FallbackDeepgramTranscriber:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/FallbackDeepgramTranscriberProvider'
          description: This is the transcription provider that will be used.
        model:
          $ref: '#/components/schemas/FallbackDeepgramTranscriberModel'
          description: >-
            This is the Deepgram model that will be used. A list of models can
            be found here:
            https://developers.deepgram.com/docs/models-languages-overview
        language:
          $ref: '#/components/schemas/FallbackDeepgramTranscriberLanguage'
          description: >-
            This is the language that will be set for the transcription. The
            list of languages Deepgram supports can be found here:
            https://developers.deepgram.com/docs/models-languages-overview
        smartFormat:
          type: boolean
          description: >-
            This will be use smart format option provided by Deepgram. It's
            default disabled because it can sometimes format numbers as times
            but it's getting better.
        mipOptOut:
          type: boolean
          default: false
          description: >-
            If set to true, this will add mip_opt_out=true as a query parameter
            of all API requests. See
            https://developers.deepgram.com/docs/the-deepgram-model-improvement-partnership-program#want-to-opt-out


            This will only be used if you are using your own Deepgram API key.


            @default false
        numerals:
          type: boolean
          description: >-
            If set to true, this will cause deepgram to convert spoken numbers
            to literal numerals. For example, "my phone number is
            nine-seven-two..." would become "my phone number is 972..."


            @default false
        profanityFilter:
          type: boolean
          description: >-
            If set to true, Deepgram will replace profanity in transcripts with
            surrounding asterisks, e.g. "f***".


            @default false
        confidenceThreshold:
          type: number
          format: double
          description: |-
            Transcripts below this confidence threshold will be discarded.

            @default 0.4
        eagerEotThreshold:
          type: number
          format: double
          description: >-
            Eager end-of-turn confidence required to fire a eager end-of-turn
            event. Setting a value here will enable EagerEndOfTurn and
            SpeechResumed events. It is disabled by default. Only used with Flux
            models.
        eotThreshold:
          type: number
          format: double
          description: >-
            End-of-turn confidence required to finish a turn. Only used with
            Flux models.


            @default 0.7
        eotTimeoutMs:
          type: number
          format: double
          description: >-
            A turn will be finished when this much time has passed after speech,
            regardless of EOT confidence. Only used with Flux models.


            @default 5000
        keywords:
          type: array
          items:
            type: string
          description: >-
            These keywords are passed to the transcription model to help it pick
            up use-case specific words. Anything that may not be a common word,
            like your company name, should be added here.
        keyterm:
          type: array
          items:
            type: string
          description: >-
            Keyterm Prompting allows you improve Keyword Recall Rate (KRR) for
            important keyterms or phrases up to 90%.
        endpointing:
          type: number
          format: double
          description: >-
            This is the timeout after which Deepgram will send transcription on
            user silence. You can read in-depth documentation here:
            https://developers.deepgram.com/docs/endpointing.


            Here are the most important bits:

            - Defaults to 10. This is recommended for most use cases to optimize
            for latency.

            - 10 can cause some missing transcriptions since because of the
            shorter context. This mostly happens for one-word utterances. For
            those uses cases, it's recommended to try 300. It will add a bit of
            latency but the quality and reliability of the experience will be
            better.

            - If neither 10 nor 300 work, contact support@vapi.ai and we'll find
            another solution.


            @default 10
      required:
        - provider
      title: FallbackDeepgramTranscriber
    FallbackElevenLabsTranscriberProvider:
      type: string
      enum:
        - 11labs
      description: This is the transcription provider that will be used.
      title: FallbackElevenLabsTranscriberProvider
    FallbackElevenLabsTranscriberModel0:
      type: string
      enum:
        - scribe_v1
        - scribe_v2
        - scribe_v2_realtime
      title: FallbackElevenLabsTranscriberModel0
    FallbackElevenLabsTranscriberModel:
      oneOf:
        - $ref: '#/components/schemas/FallbackElevenLabsTranscriberModel0'
      description: This is the model that will be used for the transcription.
      title: FallbackElevenLabsTranscriberModel
    FallbackElevenLabsTranscriberLanguage:
      type: string
      enum:
        - aa
        - ab
        - ae
        - af
        - ak
        - am
        - an
        - ar
        - as
        - av
        - ay
        - az
        - ba
        - be
        - bg
        - bh
        - bi
        - bm
        - bn
        - bo
        - br
        - bs
        - ca
        - ce
        - ch
        - co
        - cr
        - cs
        - cu
        - cv
        - cy
        - da
        - de
        - dv
        - dz
        - ee
        - el
        - en
        - eo
        - es
        - et
        - eu
        - fa
        - ff
        - fi
        - fj
        - fo
        - fr
        - fy
        - ga
        - gd
        - gl
        - gn
        - gu
        - gv
        - ha
        - he
        - hi
        - ho
        - hr
        - ht
        - hu
        - hy
        - hz
        - ia
        - id
        - ie
        - ig
        - ii
        - ik
        - io
        - is
        - it
        - iu
        - ja
        - jv
        - ka
        - kg
        - ki
        - kj
        - kk
        - kl
        - km
        - kn
        - ko
        - kr
        - ks
        - ku
        - kv
        - kw
        - ky
        - la
        - lb
        - lg
        - li
        - ln
        - lo
        - lt
        - lu
        - lv
        - mg
        - mh
        - mi
        - mk
        - ml
        - mn
        - mr
        - ms
        - mt
        - my
        - na
        - nb
        - nd
        - ne
        - ng
        - nl
        - nn
        - 'no'
        - nr
        - nv
        - ny
        - oc
        - oj
        - om
        - or
        - os
        - pa
        - pi
        - pl
        - ps
        - pt
        - qu
        - rm
        - rn
        - ro
        - ru
        - rw
        - sa
        - sc
        - sd
        - se
        - sg
        - si
        - sk
        - sl
        - sm
        - sn
        - so
        - sq
        - sr
        - ss
        - st
        - su
        - sv
        - sw
        - ta
        - te
        - tg
        - th
        - ti
        - tk
        - tl
        - tn
        - to
        - tr
        - ts
        - tt
        - tw
        - ty
        - ug
        - uk
        - ur
        - uz
        - ve
        - vi
        - vo
        - wa
        - wo
        - xh
        - yi
        - yue
        - yo
        - za
        - zh
        - zu
      description: This is the language that will be used for the transcription.
      title: FallbackElevenLabsTranscriberLanguage
    FallbackElevenLabsTranscriber:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/FallbackElevenLabsTranscriberProvider'
          description: This is the transcription provider that will be used.
        model:
          $ref: '#/components/schemas/FallbackElevenLabsTranscriberModel'
          description: This is the model that will be used for the transcription.
        language:
          $ref: '#/components/schemas/FallbackElevenLabsTranscriberLanguage'
          description: This is the language that will be used for the transcription.
        silenceThresholdSeconds:
          type: number
          format: double
          description: >-
            This is the number of seconds of silence before VAD commits
            (0.3-3.0).
        confidenceThreshold:
          type: number
          format: double
          description: >-
            This is the VAD sensitivity (0.1-0.9, lower indicates more
            sensitive).
        minSpeechDurationMs:
          type: number
          format: double
          description: This is the minimum speech duration for VAD (50-2000ms).
        minSilenceDurationMs:
          type: number
          format: double
          description: This is the minimum silence duration for VAD (50-2000ms).
      required:
        - provider
      title: FallbackElevenLabsTranscriber
    FallbackGladiaTranscriberProvider:
      type: string
      enum:
        - gladia
      description: This is the transcription provider that will be used.
      title: FallbackGladiaTranscriberProvider
    FallbackGladiaTranscriberModel0:
      type: string
      enum:
        - fast
        - accurate
        - solaria-1
      title: FallbackGladiaTranscriberModel0
    FallbackGladiaTranscriberModel:
      oneOf:
        - $ref: '#/components/schemas/FallbackGladiaTranscriberModel0'
      description: This is the Gladia model that will be used. Default is 'fast'
      title: FallbackGladiaTranscriberModel
    FallbackGladiaTranscriberLanguageBehaviour0:
      type: string
      enum:
        - manual
        - automatic single language
        - automatic multiple languages
      title: FallbackGladiaTranscriberLanguageBehaviour0
    FallbackGladiaTranscriberLanguageBehaviour:
      oneOf:
        - $ref: '#/components/schemas/FallbackGladiaTranscriberLanguageBehaviour0'
      description: >-
        Defines how the transcription model detects the audio language. Default
        value is 'automatic single language'.
      title: FallbackGladiaTranscriberLanguageBehaviour
    FallbackGladiaTranscriberLanguage:
      type: string
      enum:
        - af
        - sq
        - am
        - ar
        - hy
        - as
        - az
        - ba
        - eu
        - be
        - bn
        - bs
        - br
        - bg
        - ca
        - zh
        - hr
        - cs
        - da
        - nl
        - en
        - et
        - fo
        - fi
        - fr
        - gl
        - ka
        - de
        - el
        - gu
        - ht
        - ha
        - haw
        - he
        - hi
        - hu
        - is
        - id
        - it
        - ja
        - jv
        - kn
        - kk
        - km
        - ko
        - lo
        - la
        - lv
        - ln
        - lt
        - lb
        - mk
        - mg
        - ms
        - ml
        - mt
        - mi
        - mr
        - mn
        - my
        - ne
        - 'no'
        - nn
        - oc
        - ps
        - fa
        - pl
        - pt
        - pa
        - ro
        - ru
        - sa
        - sr
        - sn
        - sd
        - si
        - sk
        - sl
        - so
        - es
        - su
        - sw
        - sv
        - tl
        - tg
        - ta
        - tt
        - te
        - th
        - bo
        - tr
        - tk
        - uk
        - ur
        - uz
        - vi
        - cy
        - yi
        - yo
      description: >-
        Defines the language to use for the transcription. Required when
        languageBehaviour is 'manual'.
      title: FallbackGladiaTranscriberLanguage
    FallbackGladiaTranscriberLanguages:
      type: string
      enum:
        - af
        - sq
        - am
        - ar
        - hy
        - as
        - az
        - ba
        - eu
        - be
        - bn
        - bs
        - br
        - bg
        - ca
        - zh
        - hr
        - cs
        - da
        - nl
        - en
        - et
        - fo
        - fi
        - fr
        - gl
        - ka
        - de
        - el
        - gu
        - ht
        - ha
        - haw
        - he
        - hi
        - hu
        - is
        - id
        - it
        - ja
        - jv
        - kn
        - kk
        - km
        - ko
        - lo
        - la
        - lv
        - ln
        - lt
        - lb
        - mk
        - mg
        - ms
        - ml
        - mt
        - mi
        - mr
        - mn
        - my
        - ne
        - 'no'
        - nn
        - oc
        - ps
        - fa
        - pl
        - pt
        - pa
        - ro
        - ru
        - sa
        - sr
        - sn
        - sd
        - si
        - sk
        - sl
        - so
        - es
        - su
        - sw
        - sv
        - tl
        - tg
        - ta
        - tt
        - te
        - th
        - bo
        - tr
        - tk
        - uk
        - ur
        - uz
        - vi
        - cy
        - yi
        - yo
      description: >-
        Defines the languages to use for the transcription. Required when
        languageBehaviour is 'manual'.
      title: FallbackGladiaTranscriberLanguages
    GladiaVocabularyItemDTO:
      type: object
      properties:
        value:
          type: string
          description: The vocabulary word or phrase
        pronunciations:
          type: array
          items:
            type: string
          description: Alternative pronunciations for the vocabulary item
        intensity:
          type: number
          format: double
          description: Intensity for this specific vocabulary item (0.0 to 1.0)
        language:
          type: string
          description: Language code for this vocabulary item (ISO 639-1)
      required:
        - value
      title: GladiaVocabularyItemDTO
    GladiaCustomVocabularyConfigDtoVocabularyItems:
      oneOf:
        - type: string
        - $ref: '#/components/schemas/GladiaVocabularyItemDTO'
      title: GladiaCustomVocabularyConfigDtoVocabularyItems
    GladiaCustomVocabularyConfigDTO:
      type: object
      properties:
        vocabulary:
          type: array
          items:
            $ref: >-
              #/components/schemas/GladiaCustomVocabularyConfigDtoVocabularyItems
          description: >-
            Array of vocabulary items (strings or objects with value,
            pronunciations, intensity, language)
        defaultIntensity:
          type: number
          format: double
          default: 0.5
          description: Default intensity for vocabulary items (0.0 to 1.0)
      required:
        - vocabulary
      title: GladiaCustomVocabularyConfigDTO
    FallbackGladiaTranscriberRegion:
      type: string
      enum:
        - us-west
        - eu-west
      description: Region for processing audio (us-west or eu-west)
      title: FallbackGladiaTranscriberRegion
    FallbackGladiaTranscriber:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/FallbackGladiaTranscriberProvider'
          description: This is the transcription provider that will be used.
        model:
          $ref: '#/components/schemas/FallbackGladiaTranscriberModel'
          description: This is the Gladia model that will be used. Default is 'fast'
        languageBehaviour:
          $ref: '#/components/schemas/FallbackGladiaTranscriberLanguageBehaviour'
          description: >-
            Defines how the transcription model detects the audio language.
            Default value is 'automatic single language'.
        language:
          $ref: '#/components/schemas/FallbackGladiaTranscriberLanguage'
          description: >-
            Defines the language to use for the transcription. Required when
            languageBehaviour is 'manual'.
        languages:
          $ref: '#/components/schemas/FallbackGladiaTranscriberLanguages'
          description: >-
            Defines the languages to use for the transcription. Required when
            languageBehaviour is 'manual'.
        transcriptionHint:
          type: string
          description: >-
            Provides a custom vocabulary to the model to improve accuracy of
            transcribing context specific words, technical terms, names, etc. If
            empty, this argument is ignored.

            ⚠️ Warning ⚠️: Please be aware that the transcription_hint field has
            a character limit of 600. If you provide a transcription_hint longer
            than 600 characters, it will be automatically truncated to meet this
            limit.
        prosody:
          type: boolean
          description: >-
            If prosody is true, you will get a transcription that can contain
            prosodies i.e. (laugh) (giggles) (malefic laugh) (toss) (music)…
            Default value is false.
        audioEnhancer:
          type: boolean
          description: >-
            If true, audio will be pre-processed to improve accuracy but latency
            will increase. Default value is false.
        confidenceThreshold:
          type: number
          format: double
          description: |-
            Transcripts below this confidence threshold will be discarded.

            @default 0.4
        endpointing:
          type: number
          format: double
          description: >-
            Endpointing time in seconds - time to wait before considering speech
            ended
        speechThreshold:
          type: number
          format: double
          description: >-
            Speech threshold - sensitivity configuration for speech detection
            (0.0 to 1.0)
        customVocabularyEnabled:
          type: boolean
          description: Enable custom vocabulary for improved accuracy
        customVocabularyConfig:
          $ref: '#/components/schemas/GladiaCustomVocabularyConfigDTO'
          description: Custom vocabulary configuration
        region:
          $ref: '#/components/schemas/FallbackGladiaTranscriberRegion'
          description: Region for processing audio (us-west or eu-west)
        receivePartialTranscripts:
          type: boolean
          description: Enable partial transcripts for low-latency streaming transcription
      required:
        - provider
      title: FallbackGladiaTranscriber
    FallbackGoogleTranscriberProvider:
      type: string
      enum:
        - google
      description: This is the transcription provider that will be used.
      title: FallbackGoogleTranscriberProvider
    FallbackGoogleTranscriberModel:
      type: string
      enum:
        - gemini-3-flash-preview
        - gemini-2.5-pro
        - gemini-2.5-flash
        - gemini-2.5-flash-lite
        - gemini-2.0-flash-thinking-exp
        - gemini-2.0-pro-exp-02-05
        - gemini-2.0-flash
        - gemini-2.0-flash-lite
        - gemini-2.0-flash-exp
        - gemini-2.0-flash-realtime-exp
        - gemini-1.5-flash
        - gemini-1.5-flash-002
        - gemini-1.5-pro
        - gemini-1.5-pro-002
        - gemini-1.0-pro
      description: This is the model that will be used for the transcription.
      title: FallbackGoogleTranscriberModel
    FallbackGoogleTranscriberLanguage:
      type: string
      enum:
        - Multilingual
        - Arabic
        - Bengali
        - Bulgarian
        - Chinese
        - Croatian
        - Czech
        - Danish
        - Dutch
        - English
        - Estonian
        - Finnish
        - French
        - German
        - Greek
        - Hebrew
        - Hindi
        - Hungarian
        - Indonesian
        - Italian
        - Japanese
        - Korean
        - Latvian
        - Lithuanian
        - Norwegian
        - Polish
        - Portuguese
        - Romanian
        - Russian
        - Serbian
        - Slovak
        - Slovenian
        - Spanish
        - Swahili
        - Swedish
        - Thai
        - Turkish
        - Ukrainian
        - Vietnamese
      description: This is the language that will be set for the transcription.
      title: FallbackGoogleTranscriberLanguage
    FallbackGoogleTranscriber:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/FallbackGoogleTranscriberProvider'
          description: This is the transcription provider that will be used.
        model:
          $ref: '#/components/schemas/FallbackGoogleTranscriberModel'
          description: This is the model that will be used for the transcription.
        language:
          $ref: '#/components/schemas/FallbackGoogleTranscriberLanguage'
          description: This is the language that will be set for the transcription.
      required:
        - provider
      title: FallbackGoogleTranscriber
    FallbackTalkscriberTranscriberProvider:
      type: string
      enum:
        - talkscriber
      description: This is the transcription provider that will be used.
      title: FallbackTalkscriberTranscriberProvider
    FallbackTalkscriberTranscriberModel:
      type: string
      enum:
        - whisper
      description: This is the model that will be used for the transcription.
      title: FallbackTalkscriberTranscriberModel
    FallbackTalkscriberTranscriberLanguage:
      type: string
      enum:
        - en
        - zh
        - de
        - es
        - ru
        - ko
        - fr
        - ja
        - pt
        - tr
        - pl
        - ca
        - nl
        - ar
        - sv
        - it
        - id
        - hi
        - fi
        - vi
        - he
        - uk
        - el
        - ms
        - cs
        - ro
        - da
        - hu
        - ta
        - 'no'
        - th
        - ur
        - hr
        - bg
        - lt
        - la
        - mi
        - ml
        - cy
        - sk
        - te
        - fa
        - lv
        - bn
        - sr
        - az
        - sl
        - kn
        - et
        - mk
        - br
        - eu
        - is
        - hy
        - ne
        - mn
        - bs
        - kk
        - sq
        - sw
        - gl
        - mr
        - pa
        - si
        - km
        - sn
        - yo
        - so
        - af
        - oc
        - ka
        - be
        - tg
        - sd
        - gu
        - am
        - yi
        - lo
        - uz
        - fo
        - ht
        - ps
        - tk
        - nn
        - mt
        - sa
        - lb
        - my
        - bo
        - tl
        - mg
        - as
        - tt
        - haw
        - ln
        - ha
        - ba
        - jw
        - su
        - yue
      description: >-
        This is the language that will be set for the transcription. The list of
        languages Whisper supports can be found here:
        https://github.com/openai/whisper/blob/main/whisper/tokenizer.py
      title: FallbackTalkscriberTranscriberLanguage
    FallbackTalkscriberTranscriber:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/FallbackTalkscriberTranscriberProvider'
          description: This is the transcription provider that will be used.
        model:
          $ref: '#/components/schemas/FallbackTalkscriberTranscriberModel'
          description: This is the model that will be used for the transcription.
        language:
          $ref: '#/components/schemas/FallbackTalkscriberTranscriberLanguage'
          description: >-
            This is the language that will be set for the transcription. The
            list of languages Whisper supports can be found here:
            https://github.com/openai/whisper/blob/main/whisper/tokenizer.py
      required:
        - provider
      title: FallbackTalkscriberTranscriber
    FallbackSpeechmaticsTranscriberProvider:
      type: string
      enum:
        - speechmatics
      description: This is the transcription provider that will be used.
      title: FallbackSpeechmaticsTranscriberProvider
    FallbackSpeechmaticsTranscriberModel:
      type: string
      enum:
        - default
      description: This is the model that will be used for the transcription.
      title: FallbackSpeechmaticsTranscriberModel
    FallbackSpeechmaticsTranscriberLanguage:
      type: string
      enum:
        - auto
        - ar
        - ar_en
        - ba
        - eu
        - be
        - bn
        - bg
        - yue
        - ca
        - hr
        - cs
        - da
        - nl
        - en
        - eo
        - et
        - fi
        - fr
        - gl
        - de
        - el
        - he
        - hi
        - hu
        - id
        - ia
        - ga
        - it
        - ja
        - ko
        - lv
        - lt
        - ms
        - en_ms
        - mt
        - cmn
        - cmn_en
        - mr
        - mn
        - 'no'
        - fa
        - pl
        - pt
        - ro
        - ru
        - sk
        - sl
        - es
        - en_es
        - sw
        - sv
        - tl
        - ta
        - en_ta
        - th
        - tr
        - uk
        - ur
        - ug
        - vi
        - cy
      title: FallbackSpeechmaticsTranscriberLanguage
    FallbackSpeechmaticsTranscriberOperatingPoint:
      type: string
      enum:
        - standard
        - enhanced
      default: enhanced
      description: >-
        This is the operating point for the transcription. Choose between
        `standard` for faster turnaround with strong accuracy or `enhanced` for
        highest accuracy when precision is critical.


        @default 'enhanced'
      title: FallbackSpeechmaticsTranscriberOperatingPoint
    FallbackSpeechmaticsTranscriberRegion:
      type: string
      enum:
        - eu
        - us
      default: eu
      description: >-
        This is the region for the Speechmatics API. Choose between EU (Europe)
        and US (United States) regions for lower latency and data sovereignty
        compliance.


        @default 'eu'
      title: FallbackSpeechmaticsTranscriberRegion
    SpeechmaticsCustomVocabularyItem:
      type: object
      properties:
        content:
          type: string
          description: The word or phrase to add to the custom vocabulary.
        soundsLike:
          type: array
          items:
            type: string
          description: >-
            Alternative phonetic representations of how the word might sound.
            This helps recognition when the word might be pronounced
            differently.
      required:
        - content
      title: SpeechmaticsCustomVocabularyItem
    FallbackSpeechmaticsTranscriberNumeralStyle:
      type: string
      enum:
        - written
        - spoken
      default: written
      description: >-
        This controls how numbers, dates, currencies, and other entities are
        formatted in the transcription output.


        @default 'written'
      title: FallbackSpeechmaticsTranscriberNumeralStyle
    FallbackSpeechmaticsTranscriber:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/FallbackSpeechmaticsTranscriberProvider'
          description: This is the transcription provider that will be used.
        model:
          $ref: '#/components/schemas/FallbackSpeechmaticsTranscriberModel'
          description: This is the model that will be used for the transcription.
        language:
          $ref: '#/components/schemas/FallbackSpeechmaticsTranscriberLanguage'
        operatingPoint:
          $ref: '#/components/schemas/FallbackSpeechmaticsTranscriberOperatingPoint'
          description: >-
            This is the operating point for the transcription. Choose between
            `standard` for faster turnaround with strong accuracy or `enhanced`
            for highest accuracy when precision is critical.


            @default 'enhanced'
        region:
          $ref: '#/components/schemas/FallbackSpeechmaticsTranscriberRegion'
          description: >-
            This is the region for the Speechmatics API. Choose between EU
            (Europe) and US (United States) regions for lower latency and data
            sovereignty compliance.


            @default 'eu'
        enableDiarization:
          type: boolean
          default: false
          description: >-
            This enables speaker diarization, which identifies and separates
            speakers in the transcription. Essential for multi-speaker
            conversations and conference calls.


            @default false
        maxDelay:
          type: number
          format: double
          default: 3000
          description: >-
            This sets the maximum delay in milliseconds for partial transcripts.
            Balances latency and accuracy.


            @default 3000
        customVocabulary:
          type: array
          items:
            $ref: '#/components/schemas/SpeechmaticsCustomVocabularyItem'
        numeralStyle:
          $ref: '#/components/schemas/FallbackSpeechmaticsTranscriberNumeralStyle'
          description: >-
            This controls how numbers, dates, currencies, and other entities are
            formatted in the transcription output.


            @default 'written'
        endOfTurnSensitivity:
          type: number
          format: double
          default: 0.5
          description: >-
            This is the sensitivity level for end-of-turn detection, which
            determines when a speaker has finished talking. Higher values are
            more sensitive.


            @default 0.5
        removeDisfluencies:
          type: boolean
          default: false
          description: >-
            This enables removal of disfluencies (um, uh) from the transcript to
            create cleaner, more professional output.


            This is only supported for the English language transcriber.


            @default false
        minimumSpeechDuration:
          type: number
          format: double
          default: 0
          description: >-
            This is the minimum duration in seconds for speech segments. Shorter
            segments will be filtered out. Helps remove noise and improve
            accuracy.


            @default 0.0
      required:
        - provider
        - customVocabulary
      title: FallbackSpeechmaticsTranscriber
    FallbackOpenAiTranscriberProvider:
      type: string
      enum:
        - openai
      description: This is the transcription provider that will be used.
      title: FallbackOpenAiTranscriberProvider
    FallbackOpenAiTranscriberModel:
      type: string
      enum:
        - gpt-4o-transcribe
        - gpt-4o-mini-transcribe
      description: This is the model that will be used for the transcription.
      title: FallbackOpenAiTranscriberModel
    FallbackOpenAiTranscriberLanguage:
      type: string
      enum:
        - af
        - ar
        - hy
        - az
        - be
        - bs
        - bg
        - ca
        - zh
        - hr
        - cs
        - da
        - nl
        - en
        - et
        - fi
        - fr
        - gl
        - de
        - el
        - he
        - hi
        - hu
        - is
        - id
        - it
        - ja
        - kn
        - kk
        - ko
        - lv
        - lt
        - mk
        - ms
        - mr
        - mi
        - ne
        - 'no'
        - fa
        - pl
        - pt
        - ro
        - ru
        - sr
        - sk
        - sl
        - es
        - sw
        - sv
        - tl
        - ta
        - th
        - tr
        - uk
        - ur
        - vi
        - cy
      description: This is the language that will be set for the transcription.
      title: FallbackOpenAiTranscriberLanguage
    FallbackOpenAITranscriber:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/FallbackOpenAiTranscriberProvider'
          description: This is the transcription provider that will be used.
        model:
          $ref: '#/components/schemas/FallbackOpenAiTranscriberModel'
          description: This is the model that will be used for the transcription.
        language:
          $ref: '#/components/schemas/FallbackOpenAiTranscriberLanguage'
          description: This is the language that will be set for the transcription.
      required:
        - provider
        - model
      title: FallbackOpenAITranscriber
    FallbackCartesiaTranscriberProvider:
      type: string
      enum:
        - cartesia
      title: FallbackCartesiaTranscriberProvider
    FallbackCartesiaTranscriberModel:
      type: string
      enum:
        - ink-whisper
      title: FallbackCartesiaTranscriberModel
    FallbackCartesiaTranscriberLanguage:
      type: string
      enum:
        - aa
        - ab
        - ae
        - af
        - ak
        - am
        - an
        - ar
        - as
        - av
        - ay
        - az
        - ba
        - be
        - bg
        - bh
        - bi
        - bm
        - bn
        - bo
        - br
        - bs
        - ca
        - ce
        - ch
        - co
        - cr
        - cs
        - cu
        - cv
        - cy
        - da
        - de
        - dv
        - dz
        - ee
        - el
        - en
        - eo
        - es
        - et
        - eu
        - fa
        - ff
        - fi
        - fj
        - fo
        - fr
        - fy
        - ga
        - gd
        - gl
        - gn
        - gu
        - gv
        - ha
        - he
        - hi
        - ho
        - hr
        - ht
        - hu
        - hy
        - hz
        - ia
        - id
        - ie
        - ig
        - ii
        - ik
        - io
        - is
        - it
        - iu
        - ja
        - jv
        - ka
        - kg
        - ki
        - kj
        - kk
        - kl
        - km
        - kn
        - ko
        - kr
        - ks
        - ku
        - kv
        - kw
        - ky
        - la
        - lb
        - lg
        - li
        - ln
        - lo
        - lt
        - lu
        - lv
        - mg
        - mh
        - mi
        - mk
        - ml
        - mn
        - mr
        - ms
        - mt
        - my
        - na
        - nb
        - nd
        - ne
        - ng
        - nl
        - nn
        - 'no'
        - nr
        - nv
        - ny
        - oc
        - oj
        - om
        - or
        - os
        - pa
        - pi
        - pl
        - ps
        - pt
        - qu
        - rm
        - rn
        - ro
        - ru
        - rw
        - sa
        - sc
        - sd
        - se
        - sg
        - si
        - sk
        - sl
        - sm
        - sn
        - so
        - sq
        - sr
        - ss
        - st
        - su
        - sv
        - sw
        - ta
        - te
        - tg
        - th
        - ti
        - tk
        - tl
        - tn
        - to
        - tr
        - ts
        - tt
        - tw
        - ty
        - ug
        - uk
        - ur
        - uz
        - ve
        - vi
        - vo
        - wa
        - wo
        - xh
        - yi
        - yue
        - yo
        - za
        - zh
        - zu
      title: FallbackCartesiaTranscriberLanguage
    FallbackCartesiaTranscriber:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/FallbackCartesiaTranscriberProvider'
        model:
          $ref: '#/components/schemas/FallbackCartesiaTranscriberModel'
        language:
          $ref: '#/components/schemas/FallbackCartesiaTranscriberLanguage'
      required:
        - provider
      title: FallbackCartesiaTranscriber
    FallbackSonioxTranscriberProvider:
      type: string
      enum:
        - soniox
      title: FallbackSonioxTranscriberProvider
    FallbackSonioxTranscriberModel:
      type: string
      enum:
        - stt-rt-v4
      description: The Soniox model to use for transcription.
      title: FallbackSonioxTranscriberModel
    FallbackSonioxTranscriberLanguage:
      type: string
      enum:
        - aa
        - ab
        - ae
        - af
        - ak
        - am
        - an
        - ar
        - as
        - av
        - ay
        - az
        - ba
        - be
        - bg
        - bh
        - bi
        - bm
        - bn
        - bo
        - br
        - bs
        - ca
        - ce
        - ch
        - co
        - cr
        - cs
        - cu
        - cv
        - cy
        - da
        - de
        - dv
        - dz
        - ee
        - el
        - en
        - eo
        - es
        - et
        - eu
        - fa
        - ff
        - fi
        - fj
        - fo
        - fr
        - fy
        - ga
        - gd
        - gl
        - gn
        - gu
        - gv
        - ha
        - he
        - hi
        - ho
        - hr
        - ht
        - hu
        - hy
        - hz
        - ia
        - id
        - ie
        - ig
        - ii
        - ik
        - io
        - is
        - it
        - iu
        - ja
        - jv
        - ka
        - kg
        - ki
        - kj
        - kk
        - kl
        - km
        - kn
        - ko
        - kr
        - ks
        - ku
        - kv
        - kw
        - ky
        - la
        - lb
        - lg
        - li
        - ln
        - lo
        - lt
        - lu
        - lv
        - mg
        - mh
        - mi
        - mk
        - ml
        - mn
        - mr
        - ms
        - mt
        - my
        - na
        - nb
        - nd
        - ne
        - ng
        - nl
        - nn
        - 'no'
        - nr
        - nv
        - ny
        - oc
        - oj
        - om
        - or
        - os
        - pa
        - pi
        - pl
        - ps
        - pt
        - qu
        - rm
        - rn
        - ro
        - ru
        - rw
        - sa
        - sc
        - sd
        - se
        - sg
        - si
        - sk
        - sl
        - sm
        - sn
        - so
        - sq
        - sr
        - ss
        - st
        - su
        - sv
        - sw
        - ta
        - te
        - tg
        - th
        - ti
        - tk
        - tl
        - tn
        - to
        - tr
        - ts
        - tt
        - tw
        - ty
        - ug
        - uk
        - ur
        - uz
        - ve
        - vi
        - vo
        - wa
        - wo
        - xh
        - yi
        - yue
        - yo
        - za
        - zh
        - zu
      description: >-
        The language for transcription. Uses ISO 639-1 codes. Soniox supports
        60+ languages with a single universal model.
      title: FallbackSonioxTranscriberLanguage
    FallbackSonioxTranscriber:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/FallbackSonioxTranscriberProvider'
        model:
          $ref: '#/components/schemas/FallbackSonioxTranscriberModel'
          description: The Soniox model to use for transcription.
        language:
          $ref: '#/components/schemas/FallbackSonioxTranscriberLanguage'
          description: >-
            The language for transcription. Uses ISO 639-1 codes. Soniox
            supports 60+ languages with a single universal model.
        languageHintsStrict:
          type: boolean
          description: >-
            When enabled, restricts transcription to the language specified in
            the language field. When disabled, the model can detect and
            transcribe any of 60+ supported languages. Defaults to true.
        maxEndpointDelayMs:
          type: number
          format: double
          description: >-
            Maximum delay in milliseconds between when the speaker stops and
            when the endpoint is detected. Lower values mean faster turn-taking
            but more false endpoints. Range: 500-3000. Default: 500.
        customVocabulary:
          type: array
          items:
            type: string
          description: >-
            Custom vocabulary terms to boost recognition accuracy. Useful for
            brand names, product names, and domain-specific terminology. Maps to
            Soniox context.terms.
      required:
        - provider
      title: FallbackSonioxTranscriber
    FallbackTranscriberPlanTranscribersItems:
      oneOf:
        - $ref: '#/components/schemas/FallbackAssemblyAITranscriber'
        - $ref: '#/components/schemas/FallbackAzureSpeechTranscriber'
        - $ref: '#/components/schemas/FallbackCustomTranscriber'
        - $ref: '#/components/schemas/FallbackDeepgramTranscriber'
        - $ref: '#/components/schemas/FallbackElevenLabsTranscriber'
        - $ref: '#/components/schemas/FallbackGladiaTranscriber'
        - $ref: '#/components/schemas/FallbackGoogleTranscriber'
        - $ref: '#/components/schemas/FallbackTalkscriberTranscriber'
        - $ref: '#/components/schemas/FallbackSpeechmaticsTranscriber'
        - $ref: '#/components/schemas/FallbackOpenAITranscriber'
        - $ref: '#/components/schemas/FallbackCartesiaTranscriber'
        - $ref: '#/components/schemas/FallbackSonioxTranscriber'
      title: FallbackTranscriberPlanTranscribersItems
    FallbackTranscriberPlan:
      type: object
      properties:
        transcribers:
          type: array
          items:
            $ref: '#/components/schemas/FallbackTranscriberPlanTranscribersItems'
      required:
        - transcribers
      title: FallbackTranscriberPlan
    AssemblyAITranscriber:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/AssemblyAiTranscriberProvider'
          description: This is the transcription provider that will be used.
        language:
          $ref: '#/components/schemas/AssemblyAiTranscriberLanguage'
          description: This is the language that will be set for the transcription.
        confidenceThreshold:
          type: number
          format: double
          description: |-
            Transcripts below this confidence threshold will be discarded.

            @default 0.4
        formatTurns:
          type: boolean
          description: |-
            This enables formatting of transcripts.

            @default true
        endOfTurnConfidenceThreshold:
          type: number
          format: double
          description: >-
            This is the end of turn confidence threshold. The minimum confidence
            that the end of turn is detected.

            Note: Only used if startSpeakingPlan.smartEndpointingPlan is not
            set.

            @min 0

            @max 1

            @default 0.7
        minEndOfTurnSilenceWhenConfident:
          type: number
          format: double
          description: >-
            This is the minimum end of turn silence when confident in
            milliseconds.

            Note: Only used if startSpeakingPlan.smartEndpointingPlan is not
            set.

            @default 160
        wordFinalizationMaxWaitTime:
          type: number
          format: double
        maxTurnSilence:
          type: number
          format: double
          description: >-
            This is the maximum turn silence time in milliseconds.

            Note: Only used if startSpeakingPlan.smartEndpointingPlan is not
            set.

            @default 400
        vadAssistedEndpointingEnabled:
          type: boolean
          description: >-
            Use VAD to assist with endpointing decisions from the transcriber.

            When enabled, transcriber endpointing will be buffered if VAD
            detects the user is still speaking, preventing premature
            turn-taking.

            When disabled, transcriber endpointing will be used immediately
            regardless of VAD state, allowing for quicker but more aggressive
            turn-taking.

            Note: Only used if startSpeakingPlan.smartEndpointingPlan is not
            set.


            @default true
        speechModel:
          $ref: '#/components/schemas/AssemblyAiTranscriberSpeechModel'
          description: >-
            This is the speech model used for the streaming session.

            Note: Keyterms prompting is not supported with multilingual
            streaming.

            @default 'universal-streaming-english'
        realtimeUrl:
          type: string
          description: The WebSocket URL that the transcriber connects to.
        wordBoost:
          type: array
          items:
            type: string
          description: Add up to 2500 characters of custom vocabulary.
        keytermsPrompt:
          type: array
          items:
            type: string
          description: >-
            Keyterms prompting improves recognition accuracy for specific words
            and phrases.

            Can include up to 100 keyterms, each up to 50 characters.

            Costs an additional $0.04/hour when enabled.
        endUtteranceSilenceThreshold:
          type: number
          format: double
          description: The duration of the end utterance silence threshold in milliseconds.
        disablePartialTranscripts:
          type: boolean
          description: >-
            Disable partial transcripts.

            Set to `true` to not receive partial transcripts. Defaults to
            `false`.
        fallbackPlan:
          $ref: '#/components/schemas/FallbackTranscriberPlan'
          description: >-
            This is the plan for transcriber provider fallbacks in the event
            that the primary transcriber provider fails.
      required:
        - provider
      title: AssemblyAITranscriber
    AzureSpeechTranscriberProvider:
      type: string
      enum:
        - azure
      description: This is the transcription provider that will be used.
      title: AzureSpeechTranscriberProvider
    AzureSpeechTranscriberLanguage:
      type: string
      enum:
        - af-ZA
        - am-ET
        - ar-AE
        - ar-BH
        - ar-DZ
        - ar-EG
        - ar-IL
        - ar-IQ
        - ar-JO
        - ar-KW
        - ar-LB
        - ar-LY
        - ar-MA
        - ar-OM
        - ar-PS
        - ar-QA
        - ar-SA
        - ar-SY
        - ar-TN
        - ar-YE
        - az-AZ
        - bg-BG
        - bn-IN
        - bs-BA
        - ca-ES
        - cs-CZ
        - cy-GB
        - da-DK
        - de-AT
        - de-CH
        - de-DE
        - el-GR
        - en-AU
        - en-CA
        - en-GB
        - en-GH
        - en-HK
        - en-IE
        - en-IN
        - en-KE
        - en-NG
        - en-NZ
        - en-PH
        - en-SG
        - en-TZ
        - en-US
        - en-ZA
        - es-AR
        - es-BO
        - es-CL
        - es-CO
        - es-CR
        - es-CU
        - es-DO
        - es-EC
        - es-ES
        - es-GQ
        - es-GT
        - es-HN
        - es-MX
        - es-NI
        - es-PA
        - es-PE
        - es-PR
        - es-PY
        - es-SV
        - es-US
        - es-UY
        - es-VE
        - et-EE
        - eu-ES
        - fa-IR
        - fi-FI
        - fil-PH
        - fr-BE
        - fr-CA
        - fr-CH
        - fr-FR
        - ga-IE
        - gl-ES
        - gu-IN
        - he-IL
        - hi-IN
        - hr-HR
        - hu-HU
        - hy-AM
        - id-ID
        - is-IS
        - it-CH
        - it-IT
        - ja-JP
        - jv-ID
        - ka-GE
        - kk-KZ
        - km-KH
        - kn-IN
        - ko-KR
        - lo-LA
        - lt-LT
        - lv-LV
        - mk-MK
        - ml-IN
        - mn-MN
        - mr-IN
        - ms-MY
        - mt-MT
        - my-MM
        - nb-NO
        - ne-NP
        - nl-BE
        - nl-NL
        - pa-IN
        - pl-PL
        - ps-AF
        - pt-BR
        - pt-PT
        - ro-RO
        - ru-RU
        - si-LK
        - sk-SK
        - sl-SI
        - so-SO
        - sq-AL
        - sr-RS
        - sv-SE
        - sw-KE
        - sw-TZ
        - ta-IN
        - te-IN
        - th-TH
        - tr-TR
        - uk-UA
        - ur-IN
        - uz-UZ
        - vi-VN
        - wuu-CN
        - yue-CN
        - zh-CN
        - zh-CN-shandong
        - zh-CN-sichuan
        - zh-HK
        - zh-TW
        - zu-ZA
      description: >-
        This is the language that will be set for the transcription. The list of
        languages Azure supports can be found here:
        https://learn.microsoft.com/en-us/azure/ai-services/speech-service/language-support?tabs=stt
      title: AzureSpeechTranscriberLanguage
    AzureSpeechTranscriberSegmentationStrategy:
      type: string
      enum:
        - Default
        - Time
        - Semantic
      description: >-
        Controls how phrase boundaries are detected, enabling either simple
        time/silence heuristics or more advanced semantic segmentation.
      title: AzureSpeechTranscriberSegmentationStrategy
    AzureSpeechTranscriber:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/AzureSpeechTranscriberProvider'
          description: This is the transcription provider that will be used.
        language:
          $ref: '#/components/schemas/AzureSpeechTranscriberLanguage'
          description: >-
            This is the language that will be set for the transcription. The
            list of languages Azure supports can be found here:
            https://learn.microsoft.com/en-us/azure/ai-services/speech-service/language-support?tabs=stt
        segmentationStrategy:
          $ref: '#/components/schemas/AzureSpeechTranscriberSegmentationStrategy'
          description: >-
            Controls how phrase boundaries are detected, enabling either simple
            time/silence heuristics or more advanced semantic segmentation.
        segmentationSilenceTimeoutMs:
          type: number
          format: double
          description: >-
            Duration of detected silence after which the service finalizes a
            phrase. Configure to adjust sensitivity to pauses in speech.
        segmentationMaximumTimeMs:
          type: number
          format: double
          description: >-
            Maximum duration a segment can reach before being cut off when using
            time-based segmentation.
        fallbackPlan:
          $ref: '#/components/schemas/FallbackTranscriberPlan'
          description: >-
            This is the plan for transcriber provider fallbacks in the event
            that the primary transcriber provider fails.
      required:
        - provider
      title: AzureSpeechTranscriber
    CustomTranscriberProvider:
      type: string
      enum:
        - custom-transcriber
      description: >-
        This is the transcription provider that will be used. Use
        `custom-transcriber` for providers that are not natively supported.
      title: CustomTranscriberProvider
    CustomTranscriber:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/CustomTranscriberProvider'
          description: >-
            This is the transcription provider that will be used. Use
            `custom-transcriber` for providers that are not natively supported.
        server:
          $ref: '#/components/schemas/Server'
          description: >-
            This is where the transcription request will be sent.


            Usage:

            1. Vapi will initiate a websocket connection with `server.url`.


            2. Vapi will send an initial text frame with the sample rate.
            Format:

            ```
                {
                  "type": "start",
                  "encoding": "linear16", // 16-bit raw PCM format
                  "container": "raw",
                  "sampleRate": {{sampleRate}},
                  "channels": 2 // customer is channel 0, assistant is channel 1
                }
            ```


            3. Vapi will send the audio data in 16-bit raw PCM format as binary
            frames.


            4. You can read the messages something like this:

            ```

            ws.on('message', (data, isBinary) => {
              if (isBinary) {
                pcmBuffer = Buffer.concat([pcmBuffer, data]);
                console.log(`Received PCM data, buffer size: ${pcmBuffer.length}`);
              } else {
                console.log('Received message:', JSON.parse(data.toString()));
              }
            });

            ```


            5. You will respond with transcriptions as you have them. Format:

            ```
             {
                "type": "transcriber-response",
                "transcription": "Hello, world!",
                "channel": "customer" | "assistant"
             }
            ```
        fallbackPlan:
          $ref: '#/components/schemas/FallbackTranscriberPlan'
          description: >-
            This is the plan for transcriber provider fallbacks in the event
            that the primary transcriber provider fails.
      required:
        - provider
        - server
      title: CustomTranscriber
    DeepgramTranscriberProvider:
      type: string
      enum:
        - deepgram
      description: This is the transcription provider that will be used.
      title: DeepgramTranscriberProvider
    DeepgramTranscriberModel:
      type: string
      enum:
        - nova-2
        - nova-2-general
        - nova-2-meeting
        - nova-2-phonecall
        - nova-2-finance
        - nova-2-conversationalai
        - nova-2-voicemail
        - nova-2-video
        - nova-2-medical
        - nova-2-drivethru
        - nova-2-automotive
        - nova
        - nova-general
        - nova-phonecall
        - nova-medical
        - enhanced
        - enhanced-general
        - enhanced-meeting
        - enhanced-phonecall
        - enhanced-finance
        - base
        - base-general
        - base-meeting
        - base-phonecall
        - base-finance
        - base-conversationalai
        - base-voicemail
        - base-video
      title: DeepgramTranscriberModel
    DeepgramTranscriberLanguage:
      type: string
      enum:
        - bg
        - ca
        - cs
        - da
        - da-DK
        - de
        - de-CH
        - el
        - en
        - en-AU
        - en-GB
        - en-IN
        - en-NZ
        - en-US
        - es
        - es-419
        - es-LATAM
        - et
        - fi
        - fr
        - fr-CA
        - hi
        - hi-Latn
        - hu
        - id
        - it
        - ja
        - ko
        - ko-KR
        - lt
        - lv
        - ms
        - multi
        - nl
        - nl-BE
        - 'no'
        - pl
        - pt
        - pt-BR
        - ro
        - ru
        - sk
        - sv
        - sv-SE
        - ta
        - taq
        - th
        - th-TH
        - tr
        - uk
        - vi
        - zh
        - zh-CN
        - zh-Hans
        - zh-Hant
        - zh-TW
      title: DeepgramTranscriberLanguage
    DeepgramTranscriber:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/DeepgramTranscriberProvider'
          description: This is the transcription provider that will be used.
        model:
          $ref: '#/components/schemas/DeepgramTranscriberModel'
          description: >-
            This is the Deepgram model that will be used. A list of models can
            be found here:
            https://developers.deepgram.com/docs/models-languages-overview
        language:
          $ref: '#/components/schemas/DeepgramTranscriberLanguage'
          description: >-
            This is the language that will be set for the transcription. The
            list of languages Deepgram supports can be found here:
            https://developers.deepgram.com/docs/models-languages-overview
        smartFormat:
          type: boolean
          description: >-
            This will be use smart format option provided by Deepgram. It's
            default disabled because it can sometimes format numbers as times
            but it's getting better.
        mipOptOut:
          type: boolean
          default: false
          description: >-
            If set to true, this will add mip_opt_out=true as a query parameter
            of all API requests. See
            https://developers.deepgram.com/docs/the-deepgram-model-improvement-partnership-program#want-to-opt-out


            This will only be used if you are using your own Deepgram API key.


            @default false
        numerals:
          type: boolean
          description: >-
            If set to true, this will cause deepgram to convert spoken numbers
            to literal numerals. For example, "my phone number is
            nine-seven-two..." would become "my phone number is 972..."


            @default false
        profanityFilter:
          type: boolean
          description: >-
            If set to true, Deepgram will replace profanity in transcripts with
            surrounding asterisks, e.g. "f***".


            @default false
        confidenceThreshold:
          type: number
          format: double
          description: |-
            Transcripts below this confidence threshold will be discarded.

            @default 0.4
        eagerEotThreshold:
          type: number
          format: double
          description: >-
            Eager end-of-turn confidence required to fire a eager end-of-turn
            event. Setting a value here will enable EagerEndOfTurn and
            SpeechResumed events. It is disabled by default. Only used with Flux
            models.
        eotThreshold:
          type: number
          format: double
          description: >-
            End-of-turn confidence required to finish a turn. Only used with
            Flux models.


            @default 0.7
        eotTimeoutMs:
          type: number
          format: double
          description: >-
            A turn will be finished when this much time has passed after speech,
            regardless of EOT confidence. Only used with Flux models.


            @default 5000
        keywords:
          type: array
          items:
            type: string
          description: >-
            These keywords are passed to the transcription model to help it pick
            up use-case specific words. Anything that may not be a common word,
            like your company name, should be added here.
        keyterm:
          type: array
          items:
            type: string
          description: >-
            Keyterm Prompting allows you improve Keyword Recall Rate (KRR) for
            important keyterms or phrases up to 90%.
        endpointing:
          type: number
          format: double
          description: >-
            This is the timeout after which Deepgram will send transcription on
            user silence. You can read in-depth documentation here:
            https://developers.deepgram.com/docs/endpointing.


            Here are the most important bits:

            - Defaults to 10. This is recommended for most use cases to optimize
            for latency.

            - 10 can cause some missing transcriptions since because of the
            shorter context. This mostly happens for one-word utterances. For
            those uses cases, it's recommended to try 300. It will add a bit of
            latency but the quality and reliability of the experience will be
            better.

            - If neither 10 nor 300 work, contact support@vapi.ai and we'll find
            another solution.


            @default 10
        fallbackPlan:
          $ref: '#/components/schemas/FallbackTranscriberPlan'
          description: >-
            This is the plan for transcriber provider fallbacks in the event
            that the primary transcriber provider fails.
      required:
        - provider
      title: DeepgramTranscriber
    ElevenLabsTranscriberProvider:
      type: string
      enum:
        - 11labs
      description: This is the transcription provider that will be used.
      title: ElevenLabsTranscriberProvider
    ElevenLabsTranscriberModel0:
      type: string
      enum:
        - scribe_v1
        - scribe_v2
        - scribe_v2_realtime
      title: ElevenLabsTranscriberModel0
    ElevenLabsTranscriberModel:
      oneOf:
        - $ref: '#/components/schemas/ElevenLabsTranscriberModel0'
      description: This is the model that will be used for the transcription.
      title: ElevenLabsTranscriberModel
    ElevenLabsTranscriberLanguage:
      type: string
      enum:
        - aa
        - ab
        - ae
        - af
        - ak
        - am
        - an
        - ar
        - as
        - av
        - ay
        - az
        - ba
        - be
        - bg
        - bh
        - bi
        - bm
        - bn
        - bo
        - br
        - bs
        - ca
        - ce
        - ch
        - co
        - cr
        - cs
        - cu
        - cv
        - cy
        - da
        - de
        - dv
        - dz
        - ee
        - el
        - en
        - eo
        - es
        - et
        - eu
        - fa
        - ff
        - fi
        - fj
        - fo
        - fr
        - fy
        - ga
        - gd
        - gl
        - gn
        - gu
        - gv
        - ha
        - he
        - hi
        - ho
        - hr
        - ht
        - hu
        - hy
        - hz
        - ia
        - id
        - ie
        - ig
        - ii
        - ik
        - io
        - is
        - it
        - iu
        - ja
        - jv
        - ka
        - kg
        - ki
        - kj
        - kk
        - kl
        - km
        - kn
        - ko
        - kr
        - ks
        - ku
        - kv
        - kw
        - ky
        - la
        - lb
        - lg
        - li
        - ln
        - lo
        - lt
        - lu
        - lv
        - mg
        - mh
        - mi
        - mk
        - ml
        - mn
        - mr
        - ms
        - mt
        - my
        - na
        - nb
        - nd
        - ne
        - ng
        - nl
        - nn
        - 'no'
        - nr
        - nv
        - ny
        - oc
        - oj
        - om
        - or
        - os
        - pa
        - pi
        - pl
        - ps
        - pt
        - qu
        - rm
        - rn
        - ro
        - ru
        - rw
        - sa
        - sc
        - sd
        - se
        - sg
        - si
        - sk
        - sl
        - sm
        - sn
        - so
        - sq
        - sr
        - ss
        - st
        - su
        - sv
        - sw
        - ta
        - te
        - tg
        - th
        - ti
        - tk
        - tl
        - tn
        - to
        - tr
        - ts
        - tt
        - tw
        - ty
        - ug
        - uk
        - ur
        - uz
        - ve
        - vi
        - vo
        - wa
        - wo
        - xh
        - yi
        - yue
        - yo
        - za
        - zh
        - zu
      description: This is the language that will be used for the transcription.
      title: ElevenLabsTranscriberLanguage
    ElevenLabsTranscriber:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/ElevenLabsTranscriberProvider'
          description: This is the transcription provider that will be used.
        model:
          $ref: '#/components/schemas/ElevenLabsTranscriberModel'
          description: This is the model that will be used for the transcription.
        language:
          $ref: '#/components/schemas/ElevenLabsTranscriberLanguage'
          description: This is the language that will be used for the transcription.
        silenceThresholdSeconds:
          type: number
          format: double
          description: >-
            This is the number of seconds of silence before VAD commits
            (0.3-3.0).
        confidenceThreshold:
          type: number
          format: double
          description: >-
            This is the VAD sensitivity (0.1-0.9, lower indicates more
            sensitive).
        minSpeechDurationMs:
          type: number
          format: double
          description: This is the minimum speech duration for VAD (50-2000ms).
        minSilenceDurationMs:
          type: number
          format: double
          description: This is the minimum silence duration for VAD (50-2000ms).
        fallbackPlan:
          $ref: '#/components/schemas/FallbackTranscriberPlan'
          description: >-
            This is the plan for transcriber provider fallbacks in the event
            that the primary transcriber provider fails.
      required:
        - provider
      title: ElevenLabsTranscriber
    GladiaTranscriberProvider:
      type: string
      enum:
        - gladia
      description: This is the transcription provider that will be used.
      title: GladiaTranscriberProvider
    GladiaTranscriberModel0:
      type: string
      enum:
        - fast
        - accurate
        - solaria-1
      title: GladiaTranscriberModel0
    GladiaTranscriberModel:
      oneOf:
        - $ref: '#/components/schemas/GladiaTranscriberModel0'
      description: This is the Gladia model that will be used. Default is 'fast'
      title: GladiaTranscriberModel
    GladiaTranscriberLanguageBehaviour0:
      type: string
      enum:
        - manual
        - automatic single language
        - automatic multiple languages
      title: GladiaTranscriberLanguageBehaviour0
    GladiaTranscriberLanguageBehaviour:
      oneOf:
        - $ref: '#/components/schemas/GladiaTranscriberLanguageBehaviour0'
      description: >-
        Defines how the transcription model detects the audio language. Default
        value is 'automatic single language'.
      title: GladiaTranscriberLanguageBehaviour
    GladiaTranscriberLanguage:
      type: string
      enum:
        - af
        - sq
        - am
        - ar
        - hy
        - as
        - az
        - ba
        - eu
        - be
        - bn
        - bs
        - br
        - bg
        - ca
        - zh
        - hr
        - cs
        - da
        - nl
        - en
        - et
        - fo
        - fi
        - fr
        - gl
        - ka
        - de
        - el
        - gu
        - ht
        - ha
        - haw
        - he
        - hi
        - hu
        - is
        - id
        - it
        - ja
        - jv
        - kn
        - kk
        - km
        - ko
        - lo
        - la
        - lv
        - ln
        - lt
        - lb
        - mk
        - mg
        - ms
        - ml
        - mt
        - mi
        - mr
        - mn
        - my
        - ne
        - 'no'
        - nn
        - oc
        - ps
        - fa
        - pl
        - pt
        - pa
        - ro
        - ru
        - sa
        - sr
        - sn
        - sd
        - si
        - sk
        - sl
        - so
        - es
        - su
        - sw
        - sv
        - tl
        - tg
        - ta
        - tt
        - te
        - th
        - bo
        - tr
        - tk
        - uk
        - ur
        - uz
        - vi
        - cy
        - yi
        - yo
      description: >-
        Defines the language to use for the transcription. Required when
        languageBehaviour is 'manual'.
      title: GladiaTranscriberLanguage
    GladiaTranscriberLanguages:
      type: string
      enum:
        - af
        - sq
        - am
        - ar
        - hy
        - as
        - az
        - ba
        - eu
        - be
        - bn
        - bs
        - br
        - bg
        - ca
        - zh
        - hr
        - cs
        - da
        - nl
        - en
        - et
        - fo
        - fi
        - fr
        - gl
        - ka
        - de
        - el
        - gu
        - ht
        - ha
        - haw
        - he
        - hi
        - hu
        - is
        - id
        - it
        - ja
        - jv
        - kn
        - kk
        - km
        - ko
        - lo
        - la
        - lv
        - ln
        - lt
        - lb
        - mk
        - mg
        - ms
        - ml
        - mt
        - mi
        - mr
        - mn
        - my
        - ne
        - 'no'
        - nn
        - oc
        - ps
        - fa
        - pl
        - pt
        - pa
        - ro
        - ru
        - sa
        - sr
        - sn
        - sd
        - si
        - sk
        - sl
        - so
        - es
        - su
        - sw
        - sv
        - tl
        - tg
        - ta
        - tt
        - te
        - th
        - bo
        - tr
        - tk
        - uk
        - ur
        - uz
        - vi
        - cy
        - yi
        - yo
      description: >-
        Defines the languages to use for the transcription. Required when
        languageBehaviour is 'manual'.
      title: GladiaTranscriberLanguages
    GladiaTranscriberRegion:
      type: string
      enum:
        - us-west
        - eu-west
      description: Region for processing audio (us-west or eu-west)
      title: GladiaTranscriberRegion
    GladiaTranscriber:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/GladiaTranscriberProvider'
          description: This is the transcription provider that will be used.
        model:
          $ref: '#/components/schemas/GladiaTranscriberModel'
          description: This is the Gladia model that will be used. Default is 'fast'
        languageBehaviour:
          $ref: '#/components/schemas/GladiaTranscriberLanguageBehaviour'
          description: >-
            Defines how the transcription model detects the audio language.
            Default value is 'automatic single language'.
        language:
          $ref: '#/components/schemas/GladiaTranscriberLanguage'
          description: >-
            Defines the language to use for the transcription. Required when
            languageBehaviour is 'manual'.
        languages:
          $ref: '#/components/schemas/GladiaTranscriberLanguages'
          description: >-
            Defines the languages to use for the transcription. Required when
            languageBehaviour is 'manual'.
        transcriptionHint:
          type: string
          description: >-
            Provides a custom vocabulary to the model to improve accuracy of
            transcribing context specific words, technical terms, names, etc. If
            empty, this argument is ignored.

            ⚠️ Warning ⚠️: Please be aware that the transcription_hint field has
            a character limit of 600. If you provide a transcription_hint longer
            than 600 characters, it will be automatically truncated to meet this
            limit.
        prosody:
          type: boolean
          description: >-
            If prosody is true, you will get a transcription that can contain
            prosodies i.e. (laugh) (giggles) (malefic laugh) (toss) (music)…
            Default value is false.
        audioEnhancer:
          type: boolean
          description: >-
            If true, audio will be pre-processed to improve accuracy but latency
            will increase. Default value is false.
        confidenceThreshold:
          type: number
          format: double
          description: |-
            Transcripts below this confidence threshold will be discarded.

            @default 0.4
        endpointing:
          type: number
          format: double
          description: >-
            Endpointing time in seconds - time to wait before considering speech
            ended
        speechThreshold:
          type: number
          format: double
          description: >-
            Speech threshold - sensitivity configuration for speech detection
            (0.0 to 1.0)
        customVocabularyEnabled:
          type: boolean
          description: Enable custom vocabulary for improved accuracy
        customVocabularyConfig:
          $ref: '#/components/schemas/GladiaCustomVocabularyConfigDTO'
          description: Custom vocabulary configuration
        region:
          $ref: '#/components/schemas/GladiaTranscriberRegion'
          description: Region for processing audio (us-west or eu-west)
        receivePartialTranscripts:
          type: boolean
          description: Enable partial transcripts for low-latency streaming transcription
        fallbackPlan:
          $ref: '#/components/schemas/FallbackTranscriberPlan'
          description: >-
            This is the plan for transcriber provider fallbacks in the event
            that the primary transcriber provider fails.
      required:
        - provider
      title: GladiaTranscriber
    GoogleTranscriberProvider:
      type: string
      enum:
        - google
      description: This is the transcription provider that will be used.
      title: GoogleTranscriberProvider
    GoogleTranscriberModel:
      type: string
      enum:
        - gemini-3-flash-preview
        - gemini-2.5-pro
        - gemini-2.5-flash
        - gemini-2.5-flash-lite
        - gemini-2.0-flash-thinking-exp
        - gemini-2.0-pro-exp-02-05
        - gemini-2.0-flash
        - gemini-2.0-flash-lite
        - gemini-2.0-flash-exp
        - gemini-2.0-flash-realtime-exp
        - gemini-1.5-flash
        - gemini-1.5-flash-002
        - gemini-1.5-pro
        - gemini-1.5-pro-002
        - gemini-1.0-pro
      description: This is the model that will be used for the transcription.
      title: GoogleTranscriberModel
    GoogleTranscriberLanguage:
      type: string
      enum:
        - Multilingual
        - Arabic
        - Bengali
        - Bulgarian
        - Chinese
        - Croatian
        - Czech
        - Danish
        - Dutch
        - English
        - Estonian
        - Finnish
        - French
        - German
        - Greek
        - Hebrew
        - Hindi
        - Hungarian
        - Indonesian
        - Italian
        - Japanese
        - Korean
        - Latvian
        - Lithuanian
        - Norwegian
        - Polish
        - Portuguese
        - Romanian
        - Russian
        - Serbian
        - Slovak
        - Slovenian
        - Spanish
        - Swahili
        - Swedish
        - Thai
        - Turkish
        - Ukrainian
        - Vietnamese
      description: This is the language that will be set for the transcription.
      title: GoogleTranscriberLanguage
    GoogleTranscriber:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/GoogleTranscriberProvider'
          description: This is the transcription provider that will be used.
        model:
          $ref: '#/components/schemas/GoogleTranscriberModel'
          description: This is the model that will be used for the transcription.
        language:
          $ref: '#/components/schemas/GoogleTranscriberLanguage'
          description: This is the language that will be set for the transcription.
        fallbackPlan:
          $ref: '#/components/schemas/FallbackTranscriberPlan'
          description: >-
            This is the plan for transcriber provider fallbacks in the event
            that the primary transcriber provider fails.
      required:
        - provider
      title: GoogleTranscriber
    SpeechmaticsTranscriberProvider:
      type: string
      enum:
        - speechmatics
      description: This is the transcription provider that will be used.
      title: SpeechmaticsTranscriberProvider
    SpeechmaticsTranscriberModel:
      type: string
      enum:
        - default
      description: This is the model that will be used for the transcription.
      title: SpeechmaticsTranscriberModel
    SpeechmaticsTranscriberLanguage:
      type: string
      enum:
        - auto
        - ar
        - ar_en
        - ba
        - eu
        - be
        - bn
        - bg
        - yue
        - ca
        - hr
        - cs
        - da
        - nl
        - en
        - eo
        - et
        - fi
        - fr
        - gl
        - de
        - el
        - he
        - hi
        - hu
        - id
        - ia
        - ga
        - it
        - ja
        - ko
        - lv
        - lt
        - ms
        - en_ms
        - mt
        - cmn
        - cmn_en
        - mr
        - mn
        - 'no'
        - fa
        - pl
        - pt
        - ro
        - ru
        - sk
        - sl
        - es
        - en_es
        - sw
        - sv
        - tl
        - ta
        - en_ta
        - th
        - tr
        - uk
        - ur
        - ug
        - vi
        - cy
      title: SpeechmaticsTranscriberLanguage
    SpeechmaticsTranscriberOperatingPoint:
      type: string
      enum:
        - standard
        - enhanced
      default: enhanced
      description: >-
        This is the operating point for the transcription. Choose between
        `standard` for faster turnaround with strong accuracy or `enhanced` for
        highest accuracy when precision is critical.


        @default 'enhanced'
      title: SpeechmaticsTranscriberOperatingPoint
    SpeechmaticsTranscriberRegion:
      type: string
      enum:
        - eu
        - us
      default: eu
      description: >-
        This is the region for the Speechmatics API. Choose between EU (Europe)
        and US (United States) regions for lower latency and data sovereignty
        compliance.


        @default 'eu'
      title: SpeechmaticsTranscriberRegion
    SpeechmaticsTranscriberNumeralStyle:
      type: string
      enum:
        - written
        - spoken
      default: written
      description: >-
        This controls how numbers, dates, currencies, and other entities are
        formatted in the transcription output.


        @default 'written'
      title: SpeechmaticsTranscriberNumeralStyle
    SpeechmaticsTranscriber:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/SpeechmaticsTranscriberProvider'
          description: This is the transcription provider that will be used.
        model:
          $ref: '#/components/schemas/SpeechmaticsTranscriberModel'
          description: This is the model that will be used for the transcription.
        language:
          $ref: '#/components/schemas/SpeechmaticsTranscriberLanguage'
        operatingPoint:
          $ref: '#/components/schemas/SpeechmaticsTranscriberOperatingPoint'
          description: >-
            This is the operating point for the transcription. Choose between
            `standard` for faster turnaround with strong accuracy or `enhanced`
            for highest accuracy when precision is critical.


            @default 'enhanced'
        region:
          $ref: '#/components/schemas/SpeechmaticsTranscriberRegion'
          description: >-
            This is the region for the Speechmatics API. Choose between EU
            (Europe) and US (United States) regions for lower latency and data
            sovereignty compliance.


            @default 'eu'
        enableDiarization:
          type: boolean
          default: false
          description: >-
            This enables speaker diarization, which identifies and separates
            speakers in the transcription. Essential for multi-speaker
            conversations and conference calls.


            @default false
        maxDelay:
          type: number
          format: double
          default: 3000
          description: >-
            This sets the maximum delay in milliseconds for partial transcripts.
            Balances latency and accuracy.


            @default 3000
        customVocabulary:
          type: array
          items:
            $ref: '#/components/schemas/SpeechmaticsCustomVocabularyItem'
        numeralStyle:
          $ref: '#/components/schemas/SpeechmaticsTranscriberNumeralStyle'
          description: >-
            This controls how numbers, dates, currencies, and other entities are
            formatted in the transcription output.


            @default 'written'
        endOfTurnSensitivity:
          type: number
          format: double
          default: 0.5
          description: >-
            This is the sensitivity level for end-of-turn detection, which
            determines when a speaker has finished talking. Higher values are
            more sensitive.


            @default 0.5
        removeDisfluencies:
          type: boolean
          default: false
          description: >-
            This enables removal of disfluencies (um, uh) from the transcript to
            create cleaner, more professional output.


            This is only supported for the English language transcriber.


            @default false
        minimumSpeechDuration:
          type: number
          format: double
          default: 0
          description: >-
            This is the minimum duration in seconds for speech segments. Shorter
            segments will be filtered out. Helps remove noise and improve
            accuracy.


            @default 0.0
        fallbackPlan:
          $ref: '#/components/schemas/FallbackTranscriberPlan'
          description: >-
            This is the plan for transcriber provider fallbacks in the event
            that the primary transcriber provider fails.
      required:
        - provider
        - customVocabulary
      title: SpeechmaticsTranscriber
    TalkscriberTranscriberProvider:
      type: string
      enum:
        - talkscriber
      description: This is the transcription provider that will be used.
      title: TalkscriberTranscriberProvider
    TalkscriberTranscriberModel:
      type: string
      enum:
        - whisper
      description: This is the model that will be used for the transcription.
      title: TalkscriberTranscriberModel
    TalkscriberTranscriberLanguage:
      type: string
      enum:
        - en
        - zh
        - de
        - es
        - ru
        - ko
        - fr
        - ja
        - pt
        - tr
        - pl
        - ca
        - nl
        - ar
        - sv
        - it
        - id
        - hi
        - fi
        - vi
        - he
        - uk
        - el
        - ms
        - cs
        - ro
        - da
        - hu
        - ta
        - 'no'
        - th
        - ur
        - hr
        - bg
        - lt
        - la
        - mi
        - ml
        - cy
        - sk
        - te
        - fa
        - lv
        - bn
        - sr
        - az
        - sl
        - kn
        - et
        - mk
        - br
        - eu
        - is
        - hy
        - ne
        - mn
        - bs
        - kk
        - sq
        - sw
        - gl
        - mr
        - pa
        - si
        - km
        - sn
        - yo
        - so
        - af
        - oc
        - ka
        - be
        - tg
        - sd
        - gu
        - am
        - yi
        - lo
        - uz
        - fo
        - ht
        - ps
        - tk
        - nn
        - mt
        - sa
        - lb
        - my
        - bo
        - tl
        - mg
        - as
        - tt
        - haw
        - ln
        - ha
        - ba
        - jw
        - su
        - yue
      description: >-
        This is the language that will be set for the transcription. The list of
        languages Whisper supports can be found here:
        https://github.com/openai/whisper/blob/main/whisper/tokenizer.py
      title: TalkscriberTranscriberLanguage
    TalkscriberTranscriber:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/TalkscriberTranscriberProvider'
          description: This is the transcription provider that will be used.
        model:
          $ref: '#/components/schemas/TalkscriberTranscriberModel'
          description: This is the model that will be used for the transcription.
        language:
          $ref: '#/components/schemas/TalkscriberTranscriberLanguage'
          description: >-
            This is the language that will be set for the transcription. The
            list of languages Whisper supports can be found here:
            https://github.com/openai/whisper/blob/main/whisper/tokenizer.py
        fallbackPlan:
          $ref: '#/components/schemas/FallbackTranscriberPlan'
          description: >-
            This is the plan for transcriber provider fallbacks in the event
            that the primary transcriber provider fails.
      required:
        - provider
      title: TalkscriberTranscriber
    OpenAiTranscriberProvider:
      type: string
      enum:
        - openai
      description: This is the transcription provider that will be used.
      title: OpenAiTranscriberProvider
    OpenAiTranscriberModel:
      type: string
      enum:
        - gpt-4o-transcribe
        - gpt-4o-mini-transcribe
      description: This is the model that will be used for the transcription.
      title: OpenAiTranscriberModel
    OpenAiTranscriberLanguage:
      type: string
      enum:
        - af
        - ar
        - hy
        - az
        - be
        - bs
        - bg
        - ca
        - zh
        - hr
        - cs
        - da
        - nl
        - en
        - et
        - fi
        - fr
        - gl
        - de
        - el
        - he
        - hi
        - hu
        - is
        - id
        - it
        - ja
        - kn
        - kk
        - ko
        - lv
        - lt
        - mk
        - ms
        - mr
        - mi
        - ne
        - 'no'
        - fa
        - pl
        - pt
        - ro
        - ru
        - sr
        - sk
        - sl
        - es
        - sw
        - sv
        - tl
        - ta
        - th
        - tr
        - uk
        - ur
        - vi
        - cy
      description: This is the language that will be set for the transcription.
      title: OpenAiTranscriberLanguage
    OpenAITranscriber:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/OpenAiTranscriberProvider'
          description: This is the transcription provider that will be used.
        model:
          $ref: '#/components/schemas/OpenAiTranscriberModel'
          description: This is the model that will be used for the transcription.
        language:
          $ref: '#/components/schemas/OpenAiTranscriberLanguage'
          description: This is the language that will be set for the transcription.
        fallbackPlan:
          $ref: '#/components/schemas/FallbackTranscriberPlan'
          description: >-
            This is the plan for transcriber provider fallbacks in the event
            that the primary transcriber provider fails.
      required:
        - provider
        - model
      title: OpenAITranscriber
    CartesiaTranscriberProvider:
      type: string
      enum:
        - cartesia
      title: CartesiaTranscriberProvider
    CartesiaTranscriberModel:
      type: string
      enum:
        - ink-whisper
      title: CartesiaTranscriberModel
    CartesiaTranscriberLanguage:
      type: string
      enum:
        - aa
        - ab
        - ae
        - af
        - ak
        - am
        - an
        - ar
        - as
        - av
        - ay
        - az
        - ba
        - be
        - bg
        - bh
        - bi
        - bm
        - bn
        - bo
        - br
        - bs
        - ca
        - ce
        - ch
        - co
        - cr
        - cs
        - cu
        - cv
        - cy
        - da
        - de
        - dv
        - dz
        - ee
        - el
        - en
        - eo
        - es
        - et
        - eu
        - fa
        - ff
        - fi
        - fj
        - fo
        - fr
        - fy
        - ga
        - gd
        - gl
        - gn
        - gu
        - gv
        - ha
        - he
        - hi
        - ho
        - hr
        - ht
        - hu
        - hy
        - hz
        - ia
        - id
        - ie
        - ig
        - ii
        - ik
        - io
        - is
        - it
        - iu
        - ja
        - jv
        - ka
        - kg
        - ki
        - kj
        - kk
        - kl
        - km
        - kn
        - ko
        - kr
        - ks
        - ku
        - kv
        - kw
        - ky
        - la
        - lb
        - lg
        - li
        - ln
        - lo
        - lt
        - lu
        - lv
        - mg
        - mh
        - mi
        - mk
        - ml
        - mn
        - mr
        - ms
        - mt
        - my
        - na
        - nb
        - nd
        - ne
        - ng
        - nl
        - nn
        - 'no'
        - nr
        - nv
        - ny
        - oc
        - oj
        - om
        - or
        - os
        - pa
        - pi
        - pl
        - ps
        - pt
        - qu
        - rm
        - rn
        - ro
        - ru
        - rw
        - sa
        - sc
        - sd
        - se
        - sg
        - si
        - sk
        - sl
        - sm
        - sn
        - so
        - sq
        - sr
        - ss
        - st
        - su
        - sv
        - sw
        - ta
        - te
        - tg
        - th
        - ti
        - tk
        - tl
        - tn
        - to
        - tr
        - ts
        - tt
        - tw
        - ty
        - ug
        - uk
        - ur
        - uz
        - ve
        - vi
        - vo
        - wa
        - wo
        - xh
        - yi
        - yue
        - yo
        - za
        - zh
        - zu
      title: CartesiaTranscriberLanguage
    CartesiaTranscriber:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/CartesiaTranscriberProvider'
        model:
          $ref: '#/components/schemas/CartesiaTranscriberModel'
        language:
          $ref: '#/components/schemas/CartesiaTranscriberLanguage'
        fallbackPlan:
          $ref: '#/components/schemas/FallbackTranscriberPlan'
          description: >-
            This is the plan for transcriber provider fallbacks in the event
            that the primary transcriber provider fails.
      required:
        - provider
      title: CartesiaTranscriber
    SonioxTranscriberProvider:
      type: string
      enum:
        - soniox
      title: SonioxTranscriberProvider
    SonioxTranscriberModel:
      type: string
      enum:
        - stt-rt-v4
      description: The Soniox model to use for transcription.
      title: SonioxTranscriberModel
    SonioxTranscriberLanguage:
      type: string
      enum:
        - aa
        - ab
        - ae
        - af
        - ak
        - am
        - an
        - ar
        - as
        - av
        - ay
        - az
        - ba
        - be
        - bg
        - bh
        - bi
        - bm
        - bn
        - bo
        - br
        - bs
        - ca
        - ce
        - ch
        - co
        - cr
        - cs
        - cu
        - cv
        - cy
        - da
        - de
        - dv
        - dz
        - ee
        - el
        - en
        - eo
        - es
        - et
        - eu
        - fa
        - ff
        - fi
        - fj
        - fo
        - fr
        - fy
        - ga
        - gd
        - gl
        - gn
        - gu
        - gv
        - ha
        - he
        - hi
        - ho
        - hr
        - ht
        - hu
        - hy
        - hz
        - ia
        - id
        - ie
        - ig
        - ii
        - ik
        - io
        - is
        - it
        - iu
        - ja
        - jv
        - ka
        - kg
        - ki
        - kj
        - kk
        - kl
        - km
        - kn
        - ko
        - kr
        - ks
        - ku
        - kv
        - kw
        - ky
        - la
        - lb
        - lg
        - li
        - ln
        - lo
        - lt
        - lu
        - lv
        - mg
        - mh
        - mi
        - mk
        - ml
        - mn
        - mr
        - ms
        - mt
        - my
        - na
        - nb
        - nd
        - ne
        - ng
        - nl
        - nn
        - 'no'
        - nr
        - nv
        - ny
        - oc
        - oj
        - om
        - or
        - os
        - pa
        - pi
        - pl
        - ps
        - pt
        - qu
        - rm
        - rn
        - ro
        - ru
        - rw
        - sa
        - sc
        - sd
        - se
        - sg
        - si
        - sk
        - sl
        - sm
        - sn
        - so
        - sq
        - sr
        - ss
        - st
        - su
        - sv
        - sw
        - ta
        - te
        - tg
        - th
        - ti
        - tk
        - tl
        - tn
        - to
        - tr
        - ts
        - tt
        - tw
        - ty
        - ug
        - uk
        - ur
        - uz
        - ve
        - vi
        - vo
        - wa
        - wo
        - xh
        - yi
        - yue
        - yo
        - za
        - zh
        - zu
      description: >-
        The language for transcription. Uses ISO 639-1 codes. Soniox supports
        60+ languages with a single universal model.
      title: SonioxTranscriberLanguage
    SonioxTranscriber:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/SonioxTranscriberProvider'
        model:
          $ref: '#/components/schemas/SonioxTranscriberModel'
          description: The Soniox model to use for transcription.
        language:
          $ref: '#/components/schemas/SonioxTranscriberLanguage'
          description: >-
            The language for transcription. Uses ISO 639-1 codes. Soniox
            supports 60+ languages with a single universal model.
        languageHintsStrict:
          type: boolean
          description: >-
            When enabled, restricts transcription to the language specified in
            the language field. When disabled, the model can detect and
            transcribe any of 60+ supported languages. Defaults to true.
        maxEndpointDelayMs:
          type: number
          format: double
          description: >-
            Maximum delay in milliseconds between when the speaker stops and
            when the endpoint is detected. Lower values mean faster turn-taking
            but more false endpoints. Range: 500-3000. Default: 500.
        customVocabulary:
          type: array
          items:
            type: string
          description: >-
            Custom vocabulary terms to boost recognition accuracy. Useful for
            brand names, product names, and domain-specific terminology. Maps to
            Soniox context.terms.
        fallbackPlan:
          $ref: '#/components/schemas/FallbackTranscriberPlan'
          description: >-
            This is the plan for transcriber provider fallbacks in the event
            that the primary transcriber provider fails.
      required:
        - provider
      title: SonioxTranscriber
    CreateAssistantDtoTranscriber:
      oneOf:
        - $ref: '#/components/schemas/AssemblyAITranscriber'
        - $ref: '#/components/schemas/AzureSpeechTranscriber'
        - $ref: '#/components/schemas/CustomTranscriber'
        - $ref: '#/components/schemas/DeepgramTranscriber'
        - $ref: '#/components/schemas/ElevenLabsTranscriber'
        - $ref: '#/components/schemas/GladiaTranscriber'
        - $ref: '#/components/schemas/GoogleTranscriber'
        - $ref: '#/components/schemas/SpeechmaticsTranscriber'
        - $ref: '#/components/schemas/TalkscriberTranscriber'
        - $ref: '#/components/schemas/OpenAITranscriber'
        - $ref: '#/components/schemas/CartesiaTranscriber'
        - $ref: '#/components/schemas/SonioxTranscriber'
      description: These are the options for the assistant's transcriber.
      title: CreateAssistantDtoTranscriber
    ToolMessageStartContentsItems:
      oneOf:
        - $ref: '#/components/schemas/TextContent'
      title: ToolMessageStartContentsItems
    ToolMessageStartType:
      type: string
      enum:
        - request-start
      description: >-
        This message is triggered when the tool call starts.


        This message is never triggered for async tools.


        If this message is not provided, one of the default filler messages
        "Hold on a sec", "One moment", "Just a sec", "Give me a moment" or
        "This'll just take a sec" will be used.
      title: ToolMessageStartType
    ToolMessageStart:
      type: object
      properties:
        contents:
          type: array
          items:
            $ref: '#/components/schemas/ToolMessageStartContentsItems'
          description: >-
            This is an alternative to the `content` property. It allows to
            specify variants of the same content, one per language.


            Usage:

            - If your assistants are multilingual, you can provide content for
            each language.

            - If you don't provide content for a language, the first item in the
            array will be automatically translated to the active language at
            that moment.


            This will override the `content` property.
        type:
          $ref: '#/components/schemas/ToolMessageStartType'
          description: >-
            This message is triggered when the tool call starts.


            This message is never triggered for async tools.


            If this message is not provided, one of the default filler messages
            "Hold on a sec", "One moment", "Just a sec", "Give me a moment" or
            "This'll just take a sec" will be used.
        blocking:
          type: boolean
          default: false
          description: >-
            This is an optional boolean that if true, the tool call will only
            trigger after the message is spoken. Default is false.


            @default false
        content:
          type: string
          description: >-
            This is the content that the assistant says when this message is
            triggered.
        conditions:
          type: array
          items:
            $ref: '#/components/schemas/Condition'
          description: >-
            This is an optional array of conditions that the tool call arguments
            must meet in order for this message to be triggered.
      required:
        - type
      title: ToolMessageStart
    ToolMessageDelayedContentsItems:
      oneOf:
        - $ref: '#/components/schemas/TextContent'
      title: ToolMessageDelayedContentsItems
    ToolMessageDelayedType:
      type: string
      enum:
        - request-response-delayed
      description: >-
        This message is triggered when the tool call is delayed.


        There are the two things that can trigger this message:

        1. The user talks with the assistant while your server is processing the
        request. Default is "Sorry, a few more seconds."

        2. The server doesn't respond within `timingMilliseconds`.


        This message is never triggered for async tool calls.
      title: ToolMessageDelayedType
    ToolMessageDelayed:
      type: object
      properties:
        contents:
          type: array
          items:
            $ref: '#/components/schemas/ToolMessageDelayedContentsItems'
          description: >-
            This is an alternative to the `content` property. It allows to
            specify variants of the same content, one per language.


            Usage:

            - If your assistants are multilingual, you can provide content for
            each language.

            - If you don't provide content for a language, the first item in the
            array will be automatically translated to the active language at
            that moment.


            This will override the `content` property.
        type:
          $ref: '#/components/schemas/ToolMessageDelayedType'
          description: >-
            This message is triggered when the tool call is delayed.


            There are the two things that can trigger this message:

            1. The user talks with the assistant while your server is processing
            the request. Default is "Sorry, a few more seconds."

            2. The server doesn't respond within `timingMilliseconds`.


            This message is never triggered for async tool calls.
        timingMilliseconds:
          type: number
          format: double
          description: >-
            The number of milliseconds to wait for the server response before
            saying this message.
        content:
          type: string
          description: >-
            This is the content that the assistant says when this message is
            triggered.
        conditions:
          type: array
          items:
            $ref: '#/components/schemas/Condition'
          description: >-
            This is an optional array of conditions that the tool call arguments
            must meet in order for this message to be triggered.
      required:
        - type
      title: ToolMessageDelayed
    CreateApiRequestToolDtoMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: CreateApiRequestToolDtoMessagesItems
    CreateApiRequestToolDtoType:
      type: string
      enum:
        - apiRequest
      description: The type of tool. "apiRequest" for API request tool.
      title: CreateApiRequestToolDtoType
    CreateApiRequestToolDtoMethod:
      type: string
      enum:
        - POST
        - GET
        - PUT
        - PATCH
        - DELETE
      title: CreateApiRequestToolDtoMethod
    ToolParameterValue:
      oneOf:
        - type: string
        - type: number
          format: double
        - type: boolean
        - type: object
          additionalProperties:
            description: Any type
        - type: array
          items:
            description: Any type
      description: >-
        The value of the parameter. Any JSON type. String values support Liquid
        templates.
      title: ToolParameterValue
    ToolParameter:
      type: object
      properties:
        key:
          type: string
          description: This is the key of the parameter.
        value:
          $ref: '#/components/schemas/ToolParameterValue'
          description: >-
            The value of the parameter. Any JSON type. String values support
            Liquid templates.
      required:
        - key
        - value
      title: ToolParameter
    JsonSchemaType:
      type: string
      enum:
        - string
        - number
        - integer
        - boolean
        - array
        - object
      description: >-
        This is the type of output you'd like.


        `string`, `number`, `integer`, `boolean` are the primitive types and
        should be obvious.


        `array` and `object` are more interesting and quite powerful. They allow
        you to define nested structures.


        For `array`, you can define the schema of the items in the array using
        the `items` property.


        For `object`, you can define the properties of the object using the
        `properties` property.
      title: JsonSchemaType
    JsonSchemaFormat:
      type: string
      enum:
        - date-time
        - time
        - date
        - duration
        - email
        - hostname
        - ipv4
        - ipv6
        - uuid
      description: >-
        This is the format of the string. To pass a regex, use the `pattern`
        property instead.


        OpenAI documentation:
        https://platform.openai.com/docs/guides/structured-outputs?api-mode=chat&type-restrictions=string-restrictions
      title: JsonSchemaFormat
    JsonSchema:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/JsonSchemaType'
          description: >-
            This is the type of output you'd like.


            `string`, `number`, `integer`, `boolean` are the primitive types and
            should be obvious.


            `array` and `object` are more interesting and quite powerful. They
            allow you to define nested structures.


            For `array`, you can define the schema of the items in the array
            using the `items` property.


            For `object`, you can define the properties of the object using the
            `properties` property.
        items:
          $ref: '#/components/schemas/JsonSchema'
          description: >-
            This is required if the type is "array". This is the schema of the
            items in the array. This is a recursive reference to JsonSchema.
        properties:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/JsonSchema'
          description: >-
            This is required if the type is "object". This specifies the
            properties of the object. This is a map of property names to
            JsonSchema objects.
        description:
          type: string
          description: >-
            This is the description to help the model understand what it needs
            to output.
        pattern:
          type: string
          description: >-
            This is the pattern of the string. This is a regex that will be used
            to validate the data in question. To use a common format, use the
            `format` property instead.


            OpenAI documentation:
            https://platform.openai.com/docs/guides/structured-outputs#supported-properties
        format:
          $ref: '#/components/schemas/JsonSchemaFormat'
          description: >-
            This is the format of the string. To pass a regex, use the `pattern`
            property instead.


            OpenAI documentation:
            https://platform.openai.com/docs/guides/structured-outputs?api-mode=chat&type-restrictions=string-restrictions
        required:
          type: array
          items:
            type: string
          description: |-
            This is a list of properties that are required.

            This only makes sense if the type is "object".
        enum:
          type: array
          items:
            type: string
          description: >-
            This array specifies the allowed values that can be used to restrict
            the output of the model.
        title:
          type: string
          description: This is the title of the schema.
      required:
        - type
      title: JsonSchema
    VariableExtractionAlias:
      type: object
      properties:
        key:
          type: string
          description: >-
            This is the key of the variable.


            This variable will be accessible during the call as `{{key}}` and
            stored in `call.artifact.variableValues` after the call.


            Rules:

            - Must start with a letter (a-z, A-Z).

            - Subsequent characters can be letters, numbers, or underscores.

            - Minimum length of 1 and maximum length of 40.
        value:
          type: string
          description: >-
            This is the value of the variable.


            This can reference existing variables, use filters, and perform
            transformations.


            Examples: "{{name}}", "{{customer.email}}", "Hello {{name |
            upcase}}"
      required:
        - key
        - value
      title: VariableExtractionAlias
    VariableExtractionPlan:
      type: object
      properties:
        schema:
          $ref: '#/components/schemas/JsonSchema'
          description: >-
            This is the schema to extract.


            Examples:

            1. To extract object properties, you can use the following schema:

            ```json

            {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "age": {
                  "type": "number"
                }
              }
            }

            ```


            These will be extracted as `{{ name }}` and `{{ age }}`
            respectively. To emphasize, object properties are extracted as
            direct global variables.


            2. To extract nested properties, you can use the following schema:

            ```json

            {
              "type": "object",
              "properties": {
                "name": {
                  "type": "object",
                  "properties": {
                    "first": {
                      "type": "string"
                    },
                    "last": {
                      "type": "string"
                    }
                  }
                }
              }
            }

            ```


            These will be extracted as `{{ name }}`. And, `{{ name.first }}` and
            `{{ name.last }}` will be accessible.


            3. To extract array items, you can use the following schema:

            ```json

            {
              "type": "array",
              "title": "zipCodes",
              "items": {
                "type": "string"
              }
            }

            ```


            This will be extracted as `{{ zipCodes }}`. To access the array
            items, you can use `{{ zipCodes[0] }}` and `{{ zipCodes[1] }}`.


            4. To extract array of objects, you can use the following schema:


            ```json

            {
              "type": "array",
              "name": "people",
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "age": {
                    "type": "number"
                  },
                  "zipCodes": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              }
            }

            ```


            This will be extracted as `{{ people }}`. To access the array items,
            you can use `{{ people[n].name }}`, `{{ people[n].age }}`, `{{
            people[n].zipCodes }}`, `{{ people[n].zipCodes[0] }}` and `{{
            people[n].zipCodes[1] }}`.
        aliases:
          type: array
          items:
            $ref: '#/components/schemas/VariableExtractionAlias'
          description: >-
            These are additional variables to create.


            These will be accessible during the call as `{{key}}` and stored in
            `call.artifact.variableValues` after the call.


            Example:

            ```json

            {
              "aliases": [
                {
                  "key": "customerName",
                  "value": "{{name}}"
                },
                {
                  "key": "fullName",
                  "value": "{{firstName}} {{lastName}}"
                },
                {
                  "key": "greeting",
                  "value": "Hello {{name}}, welcome to {{company}}!"
                },
                {
                  "key": "customerCity",
                  "value": "{{addresses[0].city}}"
                },
                {
                  "key": "something",
                  "value": "{{any liquid}}"
                }
              ]
            }

            ```


            This will create variables `customerName`, `fullName`, `greeting`,
            `customerCity`, and `something`. To access these variables, you can
            reference them as `{{customerName}}`, `{{fullName}}`,
            `{{greeting}}`, `{{customerCity}}`, and `{{something}}`.
      title: VariableExtractionPlan
    RegexConditionType:
      type: string
      enum:
        - regex
      description: This is the type discriminator for regex condition
      title: RegexConditionType
    MessageTargetRole:
      type: string
      enum:
        - user
        - assistant
      description: >-
        This is the role of the message to target.


        If not specified, will find the position in the message history ignoring
        role (effectively `any`).
      title: MessageTargetRole
    MessageTarget:
      type: object
      properties:
        role:
          $ref: '#/components/schemas/MessageTargetRole'
          description: >-
            This is the role of the message to target.


            If not specified, will find the position in the message history
            ignoring role (effectively `any`).
        position:
          type: number
          format: double
          description: >-
            This is the position of the message to target.

            - Negative numbers: Count from end (-1 = most recent, -2 = second
            most recent)

            - 0: First/oldest message in history

            - Positive numbers: Specific position (0-indexed from start)


            @default -1 (most recent message)
      title: MessageTarget
    RegexCondition:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/RegexConditionType'
          description: This is the type discriminator for regex condition
        regex:
          type: string
          description: >-
            This is the regular expression pattern to match against message
            content.


            Note:

            - This works by using the RegExp.test method in Node.JS. Eg.
            /hello/.test("hello there") will return true.


            Hot tips:

            - In JavaScript, escape \ when sending the regex pattern. Eg.
            "hello\sthere" will be sent over the wire as "hellosthere". Send
            "hello\\sthere" instead.

            - RegExp.test does substring matching, so /cat/.test("I love cats")
            will return true. To do full string matching, use anchors: /^cat$/
            will only match exactly "cat".

            - Word boundaries \b are useful for matching whole words: /\bcat\b/
            matches "cat" but not "cats" or "category".

            - Use inline flags for portability: (?i) for case insensitive, (?m)
            for multiline
        target:
          $ref: '#/components/schemas/MessageTarget'
          description: >-
            This is the target for messages to check against.

            If not specified, the condition will run on the last message
            (position: -1).

            If role is not specified, it will look at the last message
            regardless of role.

            @default { position: -1 }
        negate:
          type: boolean
          description: >-
            This is the flag that when true, the condition matches if the
            pattern does NOT match.

            Useful for ensuring certain words/phrases are absent.


            @default false
      required:
        - type
        - regex
      title: RegexCondition
    LiquidConditionType:
      type: string
      enum:
        - liquid
      description: This is the type discriminator for liquid condition
      title: LiquidConditionType
    LiquidCondition:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/LiquidConditionType'
          description: This is the type discriminator for liquid condition
        liquid:
          type: string
          description: >-
            This is the Liquid template that must return exactly "true" or
            "false" as a string.

            The template is evaluated and the entire output must be either
            "true" or "false" - nothing else.


            Available variables:

            - `messages`: Array of recent messages in OpenAI chat completions
            format (ChatCompletionMessageParam[])
              Each message has properties like: role ('user', 'assistant', 'system'), content (string), etc.
            - `now`: Current timestamp in milliseconds (built-in Liquid
            variable)

            - Any assistant variable values (e.g., `userName`, `accountStatus`)


            Useful Liquid filters for messages:

            - `messages | last: 5` - Get the 5 most recent messages

            - `messages | where: 'role', 'user'` - Filter to only user messages

            - `messages | reverse` - Reverse the order of messages
      required:
        - type
        - liquid
      title: LiquidCondition
    GroupConditionType:
      type: string
      enum:
        - group
      description: This is the type discriminator for group condition
      title: GroupConditionType
    GroupConditionOperator:
      type: string
      enum:
        - AND
        - OR
      description: This is the logical operator for combining conditions in this group
      title: GroupConditionOperator
    GroupConditionConditionsItems:
      oneOf:
        - $ref: '#/components/schemas/RegexCondition'
        - $ref: '#/components/schemas/LiquidCondition'
        - $ref: '#/components/schemas/GroupCondition'
      title: GroupConditionConditionsItems
    GroupCondition:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/GroupConditionType'
          description: This is the type discriminator for group condition
        operator:
          $ref: '#/components/schemas/GroupConditionOperator'
          description: This is the logical operator for combining conditions in this group
        conditions:
          type: array
          items:
            $ref: '#/components/schemas/GroupConditionConditionsItems'
          description: |-
            This is the list of nested conditions to evaluate.
            Supports recursive nesting of groups for complex logic.
      required:
        - type
        - operator
        - conditions
      title: GroupCondition
    ToolRejectionPlanConditionsItems:
      oneOf:
        - $ref: '#/components/schemas/RegexCondition'
        - $ref: '#/components/schemas/LiquidCondition'
        - $ref: '#/components/schemas/GroupCondition'
      title: ToolRejectionPlanConditionsItems
    ToolRejectionPlan:
      type: object
      properties:
        conditions:
          type: array
          items:
            $ref: '#/components/schemas/ToolRejectionPlanConditionsItems'
          description: >-
            This is the list of conditions that must be evaluated.


            Usage:

            - If all conditions match (AND logic), the tool call is rejected.

            - For OR logic at the top level, use a single 'group' condition with
            operator: 'OR'.


            @default [] - Empty array means tool always executes
      title: ToolRejectionPlan
    CreateApiRequestToolDTO:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/CreateApiRequestToolDtoMessagesItems'
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/CreateApiRequestToolDtoType'
          description: The type of tool. "apiRequest" for API request tool.
        method:
          $ref: '#/components/schemas/CreateApiRequestToolDtoMethod'
        timeoutSeconds:
          type: number
          format: double
          description: >-
            This is the timeout in seconds for the request. Defaults to 20
            seconds.


            @default 20
        credentialId:
          type: string
          description: The credential ID for API request authentication
        encryptedPaths:
          type: array
          items:
            type: string
          description: >-
            This is the paths to encrypt in the request body if credentialId and
            encryptionPlan are defined.
        parameters:
          type: array
          items:
            $ref: '#/components/schemas/ToolParameter'
          description: >-
            Static key-value pairs merged into the request body. Values support
            Liquid templates.
        name:
          type: string
          description: >-
            This is the name of the tool. This will be passed to the model.


            Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a
            maximum length of 40.
        description:
          type: string
          description: >-
            This is the description of the tool. This will be passed to the
            model.
        url:
          type: string
          description: This is where the request will be sent.
        body:
          $ref: '#/components/schemas/JsonSchema'
          description: This is the body of the request.
        headers:
          $ref: '#/components/schemas/JsonSchema'
          description: These are the headers to send with the request.
        backoffPlan:
          $ref: '#/components/schemas/BackoffPlan'
          description: >-
            This is the backoff plan if the request fails. Defaults to undefined
            (the request will not be retried).


            @default undefined (the request will not be retried)
        variableExtractionPlan:
          $ref: '#/components/schemas/VariableExtractionPlan'
          description: >-
            This is the plan to extract variables from the tool's response.
            These will be accessible during the call and stored in
            `call.artifact.variableValues` after the call.


            Usage:

            1. Use `aliases` to extract variables from the tool's response body.
            (Most common case)


            ```json

            {
              "aliases": [
                {
                  "key": "customerName",
                  "value": "{{customer.name}}"
                },
                {
                  "key": "customerAge",
                  "value": "{{customer.age}}"
                }
              ]
            }

            ```


            The tool response body is made available to the liquid template.


            2. Use `aliases` to extract variables from the tool's response body
            if the response is an array.


            ```json

            {
              "aliases": [
                {
                  "key": "customerName",
                  "value": "{{$[0].name}}"
                },
                {
                  "key": "customerAge",
                  "value": "{{$[0].age}}"
                }
              ]
            }

            ```


            $ is a shorthand for the tool's response body. `$[0]` is the first
            item in the array. `$[n]` is the nth item in the array. Note, $ is
            available regardless of the response body type (both object and
            array).


            3. Use `aliases` to extract variables from the tool's response
            headers.


            ```json

            {
              "aliases": [
                {
                  "key": "customerName",
                  "value": "{{tool.response.headers.customer-name}}"
                },
                {
                  "key": "customerAge",
                  "value": "{{tool.response.headers.customer-age}}"
                }
              ]
            }

            ```


            `tool.response` is made available to the liquid template.
            Particularly, both `tool.response.headers` and `tool.response.body`
            are available. Note, `tool.response` is available regardless of the
            response body type (both object and array).


            4. Use `schema` to extract a large portion of the tool's response
            body.


            4.1. If you hit example.com and it returns `{"name": "John", "age":
            30}`, then you can specify the schema as:


            ```json

            {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "age": {
                    "type": "number"
                  }
                }
              }
            }

            ```

            These will be extracted as `{{ name }}` and `{{ age }}`
            respectively. To emphasize, object properties are extracted as
            direct global variables.


            4.2. If you hit example.com and it returns `{"name": {"first":
            "John", "last": "Doe"}}`, then you can specify the schema as:


            ```json

            {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "object",
                    "properties": {
                      "first": {
                        "type": "string"
                      },
                      "last": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }

            ```


            These will be extracted as `{{ name }}`. And, `{{ name.first }}` and
            `{{ name.last }}` will be accessible.


            4.3. If you hit example.com and it returns `["94123", "94124"]`,
            then you can specify the schema as:


            ```json

            {
              "schema": {
                "type": "array",
                "title": "zipCodes",
                "items": {
                  "type": "string"
                }
              }
            }

            ```


            This will be extracted as `{{ zipCodes }}`. To access the array
            items, you can use `{{ zipCodes[0] }}` and `{{ zipCodes[1] }}`.


            4.4. If you hit example.com and it returns `[{"name": "John", "age":
            30, "zipCodes": ["94123", "94124"]}, {"name": "Jane", "age": 25,
            "zipCodes": ["94125", "94126"]}]`, then you can specify the schema
            as:


            ```json

            {
              "schema": {
                "type": "array",
                "title": "people",
                "items": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "age": {
                      "type": "number"
                    },
                    "zipCodes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }

            ```


            This will be extracted as `{{ people }}`. To access the array items,
            you can use `{{ people[n].name }}`, `{{ people[n].age }}`, `{{
            people[n].zipCodes }}`, `{{ people[n].zipCodes[0] }}` and `{{
            people[n].zipCodes[1] }}`.


            Note: Both `aliases` and `schema` can be used together.
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
        - method
        - url
      title: CreateApiRequestToolDTO
    CreateBashToolDtoMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: CreateBashToolDtoMessagesItems
    CreateBashToolDtoType:
      type: string
      enum:
        - bash
      description: The type of tool. "bash" for Bash tool.
      title: CreateBashToolDtoType
    CreateBashToolDtoSubType:
      type: string
      enum:
        - bash_20241022
      description: The sub type of tool.
      title: CreateBashToolDtoSubType
    CreateBashToolDtoName:
      type: string
      enum:
        - bash
      default: bash
      description: The name of the tool, fixed to 'bash'
      title: CreateBashToolDtoName
    CreateBashToolDTO:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/CreateBashToolDtoMessagesItems'
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/CreateBashToolDtoType'
          description: The type of tool. "bash" for Bash tool.
        subType:
          $ref: '#/components/schemas/CreateBashToolDtoSubType'
          description: The sub type of tool.
        server:
          $ref: '#/components/schemas/Server'
          description: |2-

              This is the server where a `tool-calls` webhook will be sent.

              Notes:
              - Webhook is sent to this server when a tool call is made.
              - Webhook contains the call, assistant, and phone number objects.
              - Webhook contains the variables set on the assistant.
              - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
              - Webhook expects a response with tool call result.
        name:
          $ref: '#/components/schemas/CreateBashToolDtoName'
          description: The name of the tool, fixed to 'bash'
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
        - subType
        - name
      title: CreateBashToolDTO
    CreateCodeToolDtoMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: CreateCodeToolDtoMessagesItems
    CreateCodeToolDtoType:
      type: string
      enum:
        - code
      description: The type of tool. "code" for Code tool.
      title: CreateCodeToolDtoType
    CodeToolEnvironmentVariable:
      type: object
      properties:
        name:
          type: string
          description: Name of the environment variable
        value:
          type: string
          description: Value of the environment variable. Supports Liquid templates.
      required:
        - name
        - value
      title: CodeToolEnvironmentVariable
    OpenAiFunctionParametersType:
      type: string
      enum:
        - object
      description: >-
        This must be set to 'object'. It instructs the model to return a JSON
        object containing the function call properties.
      title: OpenAiFunctionParametersType
    OpenAIFunctionParameters:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/OpenAiFunctionParametersType'
          description: >-
            This must be set to 'object'. It instructs the model to return a
            JSON object containing the function call properties.
        properties:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/JsonSchema'
          description: >-
            This provides a description of the properties required by the
            function.

            JSON Schema can be used to specify expectations for each property.

            Refer to [this
            doc](https://ajv.js.org/json-schema.html#json-data-type) for a
            comprehensive guide on JSON Schema.
        required:
          type: array
          items:
            type: string
          description: This specifies the properties that are required by the function.
      required:
        - type
        - properties
      title: OpenAIFunctionParameters
    OpenAIFunction:
      type: object
      properties:
        strict:
          type: boolean
          default: false
          description: >-
            This is a boolean that controls whether to enable strict schema
            adherence when generating the function call. If set to true, the
            model will follow the exact schema defined in the parameters field.
            Only a subset of JSON Schema is supported when strict is true. Learn
            more about Structured Outputs in the [OpenAI
            guide](https://openai.com/index/introducing-structured-outputs-in-the-api/).


            @default false
        name:
          type: string
          description: >-
            This is the the name of the function to be called.


            Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a
            maximum length of 64.
        description:
          type: string
          description: >-
            This is the description of what the function does, used by the AI to
            choose when and how to call the function.
        parameters:
          $ref: '#/components/schemas/OpenAIFunctionParameters'
          description: >-
            These are the parameters the functions accepts, described as a JSON
            Schema object.


            See the [OpenAI
            guide](https://platform.openai.com/docs/guides/function-calling) for
            examples, and the [JSON Schema
            reference](https://json-schema.org/understanding-json-schema) for
            documentation about the format.


            Omitting parameters defines a function with an empty parameter list.
      required:
        - name
      title: OpenAIFunction
    CreateCodeToolDTO:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/CreateCodeToolDtoMessagesItems'
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/CreateCodeToolDtoType'
          description: The type of tool. "code" for Code tool.
        async:
          type: boolean
          description: |-
            This determines if the tool is async.

              If async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.

              If sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.

              Defaults to synchronous (`false`).
        server:
          $ref: '#/components/schemas/Server'
          description: |2-

              This is the server where a `tool-calls` webhook will be sent.

              Notes:
              - Webhook is sent to this server when a tool call is made.
              - Webhook contains the call, assistant, and phone number objects.
              - Webhook contains the variables set on the assistant.
              - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
              - Webhook expects a response with tool call result.
        code:
          type: string
          description: TypeScript code to execute when the tool is called
        environmentVariables:
          type: array
          items:
            $ref: '#/components/schemas/CodeToolEnvironmentVariable'
          description: Environment variables available in code via `env` object
        timeoutSeconds:
          type: number
          format: double
          description: >-
            This is the timeout in seconds for the code execution. Defaults to
            10 seconds.

            Maximum is 30 seconds to prevent abuse.


            @default 10
        credentialId:
          type: string
          description: Credential ID containing the Val Town API key
        variableExtractionPlan:
          $ref: '#/components/schemas/VariableExtractionPlan'
          description: Plan to extract variables from the tool response
        function:
          $ref: '#/components/schemas/OpenAIFunction'
          description: >-
            This is the function definition of the tool.


            For the Code tool, this defines the name, description, and
            parameters that the model

            will use to understand when and how to call this tool.
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
        - code
      title: CreateCodeToolDTO
    CreateComputerToolDtoMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: CreateComputerToolDtoMessagesItems
    CreateComputerToolDtoType:
      type: string
      enum:
        - computer
      description: The type of tool. "computer" for Computer tool.
      title: CreateComputerToolDtoType
    CreateComputerToolDtoSubType:
      type: string
      enum:
        - computer_20241022
      description: The sub type of tool.
      title: CreateComputerToolDtoSubType
    CreateComputerToolDtoName:
      type: string
      enum:
        - computer
      default: computer
      description: The name of the tool, fixed to 'computer'
      title: CreateComputerToolDtoName
    CreateComputerToolDTO:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/CreateComputerToolDtoMessagesItems'
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/CreateComputerToolDtoType'
          description: The type of tool. "computer" for Computer tool.
        subType:
          $ref: '#/components/schemas/CreateComputerToolDtoSubType'
          description: The sub type of tool.
        server:
          $ref: '#/components/schemas/Server'
          description: |2-

              This is the server where a `tool-calls` webhook will be sent.

              Notes:
              - Webhook is sent to this server when a tool call is made.
              - Webhook contains the call, assistant, and phone number objects.
              - Webhook contains the variables set on the assistant.
              - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
              - Webhook expects a response with tool call result.
        name:
          $ref: '#/components/schemas/CreateComputerToolDtoName'
          description: The name of the tool, fixed to 'computer'
        displayWidthPx:
          type: number
          format: double
          description: The display width in pixels
        displayHeightPx:
          type: number
          format: double
          description: The display height in pixels
        displayNumber:
          type: number
          format: double
          description: Optional display number
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
        - subType
        - name
        - displayWidthPx
        - displayHeightPx
      title: CreateComputerToolDTO
    CreateDtmfToolDtoMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: CreateDtmfToolDtoMessagesItems
    CreateDtmfToolDtoType:
      type: string
      enum:
        - dtmf
      description: The type of tool. "dtmf" for DTMF tool.
      title: CreateDtmfToolDtoType
    CreateDtmfToolDTO:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/CreateDtmfToolDtoMessagesItems'
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/CreateDtmfToolDtoType'
          description: The type of tool. "dtmf" for DTMF tool.
        sipInfoDtmfEnabled:
          type: boolean
          default: false
          description: >-
            This enables sending DTMF tones via SIP INFO messages instead of RFC
            2833 (RTP events). When enabled, DTMF digits will be sent using the
            SIP INFO method, which can be more reliable in some network
            configurations. Only relevant when using the `vapi.sip` transport.
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
      title: CreateDtmfToolDTO
    CreateEndCallToolDtoMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: CreateEndCallToolDtoMessagesItems
    CreateEndCallToolDtoType:
      type: string
      enum:
        - endCall
      description: The type of tool. "endCall" for End Call tool.
      title: CreateEndCallToolDtoType
    CreateEndCallToolDTO:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/CreateEndCallToolDtoMessagesItems'
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/CreateEndCallToolDtoType'
          description: The type of tool. "endCall" for End Call tool.
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
      title: CreateEndCallToolDTO
    CreateFunctionToolDtoMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: CreateFunctionToolDtoMessagesItems
    CreateFunctionToolDtoType:
      type: string
      enum:
        - function
      description: The type of tool. "function" for Function tool.
      title: CreateFunctionToolDtoType
    CreateFunctionToolDTO:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/CreateFunctionToolDtoMessagesItems'
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/CreateFunctionToolDtoType'
          description: The type of tool. "function" for Function tool.
        async:
          type: boolean
          description: |-
            This determines if the tool is async.

              If async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.

              If sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.

              Defaults to synchronous (`false`).
        server:
          $ref: '#/components/schemas/Server'
          description: |2-

              This is the server where a `tool-calls` webhook will be sent.

              Notes:
              - Webhook is sent to this server when a tool call is made.
              - Webhook contains the call, assistant, and phone number objects.
              - Webhook contains the variables set on the assistant.
              - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
              - Webhook expects a response with tool call result.
        variableExtractionPlan:
          $ref: '#/components/schemas/VariableExtractionPlan'
          description: Plan to extract variables from the tool response
        parameters:
          type: array
          items:
            $ref: '#/components/schemas/ToolParameter'
          description: >-
            Static key-value pairs merged into the request body. Values support
            Liquid templates.
        function:
          $ref: '#/components/schemas/OpenAIFunction'
          description: This is the function definition of the tool.
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
      title: CreateFunctionToolDTO
    CreateGoHighLevelCalendarAvailabilityToolDtoMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: CreateGoHighLevelCalendarAvailabilityToolDtoMessagesItems
    CreateGoHighLevelCalendarAvailabilityToolDtoType:
      type: string
      enum:
        - gohighlevel.calendar.availability.check
      description: >-
        The type of tool. "gohighlevel.calendar.availability.check" for
        GoHighLevel Calendar Availability Check tool.
      title: CreateGoHighLevelCalendarAvailabilityToolDtoType
    CreateGoHighLevelCalendarAvailabilityToolDTO:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: >-
              #/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDtoMessagesItems
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: >-
            #/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDtoType
          description: >-
            The type of tool. "gohighlevel.calendar.availability.check" for
            GoHighLevel Calendar Availability Check tool.
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
      title: CreateGoHighLevelCalendarAvailabilityToolDTO
    CreateGoHighLevelCalendarEventCreateToolDtoMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: CreateGoHighLevelCalendarEventCreateToolDtoMessagesItems
    CreateGoHighLevelCalendarEventCreateToolDtoType:
      type: string
      enum:
        - gohighlevel.calendar.event.create
      description: >-
        The type of tool. "gohighlevel.calendar.event.create" for GoHighLevel
        Calendar Event Create tool.
      title: CreateGoHighLevelCalendarEventCreateToolDtoType
    CreateGoHighLevelCalendarEventCreateToolDTO:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: >-
              #/components/schemas/CreateGoHighLevelCalendarEventCreateToolDtoMessagesItems
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDtoType'
          description: >-
            The type of tool. "gohighlevel.calendar.event.create" for
            GoHighLevel Calendar Event Create tool.
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
      title: CreateGoHighLevelCalendarEventCreateToolDTO
    CreateGoHighLevelContactCreateToolDtoMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: CreateGoHighLevelContactCreateToolDtoMessagesItems
    CreateGoHighLevelContactCreateToolDtoType:
      type: string
      enum:
        - gohighlevel.contact.create
      description: >-
        The type of tool. "gohighlevel.contact.create" for GoHighLevel Contact
        Create tool.
      title: CreateGoHighLevelContactCreateToolDtoType
    CreateGoHighLevelContactCreateToolDTO:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: >-
              #/components/schemas/CreateGoHighLevelContactCreateToolDtoMessagesItems
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDtoType'
          description: >-
            The type of tool. "gohighlevel.contact.create" for GoHighLevel
            Contact Create tool.
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
      title: CreateGoHighLevelContactCreateToolDTO
    CreateGoHighLevelContactGetToolDtoMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: CreateGoHighLevelContactGetToolDtoMessagesItems
    CreateGoHighLevelContactGetToolDtoType:
      type: string
      enum:
        - gohighlevel.contact.get
      description: >-
        The type of tool. "gohighlevel.contact.get" for GoHighLevel Contact Get
        tool.
      title: CreateGoHighLevelContactGetToolDtoType
    CreateGoHighLevelContactGetToolDTO:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: >-
              #/components/schemas/CreateGoHighLevelContactGetToolDtoMessagesItems
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDtoType'
          description: >-
            The type of tool. "gohighlevel.contact.get" for GoHighLevel Contact
            Get tool.
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
      title: CreateGoHighLevelContactGetToolDTO
    CreateGoogleCalendarCheckAvailabilityToolDtoMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: CreateGoogleCalendarCheckAvailabilityToolDtoMessagesItems
    CreateGoogleCalendarCheckAvailabilityToolDtoType:
      type: string
      enum:
        - google.calendar.availability.check
      description: >-
        The type of tool. "google.calendar.availability.check" for Google
        Calendar Check Availability tool.
      title: CreateGoogleCalendarCheckAvailabilityToolDtoType
    CreateGoogleCalendarCheckAvailabilityToolDTO:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: >-
              #/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDtoMessagesItems
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: >-
            #/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDtoType
          description: >-
            The type of tool. "google.calendar.availability.check" for Google
            Calendar Check Availability tool.
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
      title: CreateGoogleCalendarCheckAvailabilityToolDTO
    CreateGoogleCalendarCreateEventToolDtoMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: CreateGoogleCalendarCreateEventToolDtoMessagesItems
    CreateGoogleCalendarCreateEventToolDtoType:
      type: string
      enum:
        - google.calendar.event.create
      description: >-
        The type of tool. "google.calendar.event.create" for Google Calendar
        Create Event tool.
      title: CreateGoogleCalendarCreateEventToolDtoType
    CreateGoogleCalendarCreateEventToolDTO:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: >-
              #/components/schemas/CreateGoogleCalendarCreateEventToolDtoMessagesItems
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDtoType'
          description: >-
            The type of tool. "google.calendar.event.create" for Google Calendar
            Create Event tool.
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
      title: CreateGoogleCalendarCreateEventToolDTO
    CreateGoogleSheetsRowAppendToolDtoMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: CreateGoogleSheetsRowAppendToolDtoMessagesItems
    CreateGoogleSheetsRowAppendToolDtoType:
      type: string
      enum:
        - google.sheets.row.append
      description: >-
        The type of tool. "google.sheets.row.append" for Google Sheets Row
        Append tool.
      title: CreateGoogleSheetsRowAppendToolDtoType
    CreateGoogleSheetsRowAppendToolDTO:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: >-
              #/components/schemas/CreateGoogleSheetsRowAppendToolDtoMessagesItems
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDtoType'
          description: >-
            The type of tool. "google.sheets.row.append" for Google Sheets Row
            Append tool.
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
      title: CreateGoogleSheetsRowAppendToolDTO
    CreateHandoffToolDtoMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: CreateHandoffToolDtoMessagesItems
    CreateHandoffToolDtoType:
      type: string
      enum:
        - handoff
      description: >-
        This is the type of the tool.

        When you're using handoff tool, we recommend adding this to your system
        prompt

        ---

        # System context


        You are part of a multi-agent system designed to make agent coordination
        and execution easy. Agents uses two primary abstraction: **Agents** and
        **Handoffs**. An agent encompasses instructions and tools and can hand
        off a conversation to another agent when appropriate. Handoffs are
        achieved by calling a handoff function, generally named
        `handoff_to_<agent_name>`. Handoffs between agents are handled
        seamlessly in the background; do not mention or draw attention to these
        handoffs in your conversation with the user.


        # Agent context


        {put your agent system prompt here}

        ---
      title: CreateHandoffToolDtoType
    HandoffDestinationAssistantType:
      type: string
      enum:
        - assistant
      title: HandoffDestinationAssistantType
    ContextEngineeringPlanUserAndAssistantMessagesType:
      type: string
      enum:
        - userAndAssistantMessages
      title: ContextEngineeringPlanUserAndAssistantMessagesType
    ContextEngineeringPlanUserAndAssistantMessages:
      type: object
      properties:
        type:
          $ref: >-
            #/components/schemas/ContextEngineeringPlanUserAndAssistantMessagesType
      required:
        - type
      title: ContextEngineeringPlanUserAndAssistantMessages
    HandoffDestinationAssistantContextEngineeringPlan:
      oneOf:
        - $ref: '#/components/schemas/ContextEngineeringPlanLastNMessages'
        - $ref: '#/components/schemas/ContextEngineeringPlanNone'
        - $ref: '#/components/schemas/ContextEngineeringPlanAll'
        - $ref: '#/components/schemas/ContextEngineeringPlanUserAndAssistantMessages'
      description: >-
        This is the plan for manipulating the message context before handing off
        the call to the next assistant.
      title: HandoffDestinationAssistantContextEngineeringPlan
    AssistantOverridesTranscriber:
      oneOf:
        - $ref: '#/components/schemas/AssemblyAITranscriber'
        - $ref: '#/components/schemas/AzureSpeechTranscriber'
        - $ref: '#/components/schemas/CustomTranscriber'
        - $ref: '#/components/schemas/DeepgramTranscriber'
        - $ref: '#/components/schemas/ElevenLabsTranscriber'
        - $ref: '#/components/schemas/GladiaTranscriber'
        - $ref: '#/components/schemas/GoogleTranscriber'
        - $ref: '#/components/schemas/SpeechmaticsTranscriber'
        - $ref: '#/components/schemas/TalkscriberTranscriber'
        - $ref: '#/components/schemas/OpenAITranscriber'
        - $ref: '#/components/schemas/CartesiaTranscriber'
        - $ref: '#/components/schemas/SonioxTranscriber'
      description: These are the options for the assistant's transcriber.
      title: AssistantOverridesTranscriber
    CreateMcpToolDtoMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: CreateMcpToolDtoMessagesItems
    CreateMcpToolDtoType:
      type: string
      enum:
        - mcp
      description: The type of tool. "mcp" for MCP tool.
      title: CreateMcpToolDtoType
    McpToolMessagesMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: McpToolMessagesMessagesItems
    McpToolMessages:
      type: object
      properties:
        name:
          type: string
          description: The name of the tool from the MCP server.
        messages:
          type: array
          items:
            $ref: '#/components/schemas/McpToolMessagesMessagesItems'
          description: >-
            Custom messages for this specific tool. Set to an empty array to
            suppress all messages for this tool. If not provided, the tool will
            use the default messages from the parent MCP tool configuration.
      required:
        - name
      title: McpToolMessages
    McpToolMetadataProtocol:
      type: string
      enum:
        - sse
        - shttp
      description: >-
        This is the protocol used for MCP communication. Defaults to Streamable
        HTTP.
      title: McpToolMetadataProtocol
    McpToolMetadata:
      type: object
      properties:
        protocol:
          $ref: '#/components/schemas/McpToolMetadataProtocol'
          description: >-
            This is the protocol used for MCP communication. Defaults to
            Streamable HTTP.
      title: McpToolMetadata
    CreateMcpToolDTO:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/CreateMcpToolDtoMessagesItems'
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/CreateMcpToolDtoType'
          description: The type of tool. "mcp" for MCP tool.
        server:
          $ref: '#/components/schemas/Server'
          description: |2-

              This is the server where a `tool-calls` webhook will be sent.

              Notes:
              - Webhook is sent to this server when a tool call is made.
              - Webhook contains the call, assistant, and phone number objects.
              - Webhook contains the variables set on the assistant.
              - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
              - Webhook expects a response with tool call result.
        toolMessages:
          type: array
          items:
            $ref: '#/components/schemas/McpToolMessages'
          description: >-
            Per-tool message overrides for individual tools loaded from the MCP
            server. Set messages to an empty array to suppress messages for a
            specific tool. Tools not listed here will use the default messages
            from the parent tool.
        metadata:
          $ref: '#/components/schemas/McpToolMetadata'
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
      title: CreateMcpToolDTO
    CreateQueryToolDtoMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: CreateQueryToolDtoMessagesItems
    CreateQueryToolDtoType:
      type: string
      enum:
        - query
      description: The type of tool. "query" for Query tool.
      title: CreateQueryToolDtoType
    KnowledgeBaseProvider:
      type: string
      enum:
        - google
      description: The provider of the knowledge base
      title: KnowledgeBaseProvider
    KnowledgeBaseModel:
      type: string
      enum:
        - gemini-3-flash-preview
        - gemini-2.5-pro
        - gemini-2.5-flash
        - gemini-2.5-flash-lite
        - gemini-2.0-flash-thinking-exp
        - gemini-2.0-pro-exp-02-05
        - gemini-2.0-flash
        - gemini-2.0-flash-lite
        - gemini-2.0-flash-exp
        - gemini-2.0-flash-realtime-exp
        - gemini-1.5-flash
        - gemini-1.5-flash-002
        - gemini-1.5-pro
        - gemini-1.5-pro-002
        - gemini-1.0-pro
      description: The model to use for the knowledge base
      title: KnowledgeBaseModel
    KnowledgeBase:
      type: object
      properties:
        name:
          type: string
          description: The name of the knowledge base
        provider:
          $ref: '#/components/schemas/KnowledgeBaseProvider'
          description: The provider of the knowledge base
        model:
          $ref: '#/components/schemas/KnowledgeBaseModel'
          description: The model to use for the knowledge base
        description:
          type: string
          description: A description of the knowledge base
        fileIds:
          type: array
          items:
            type: string
          description: The file IDs associated with this knowledge base
      required:
        - name
        - provider
        - description
        - fileIds
      title: KnowledgeBase
    CreateQueryToolDTO:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/CreateQueryToolDtoMessagesItems'
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/CreateQueryToolDtoType'
          description: The type of tool. "query" for Query tool.
        knowledgeBases:
          type: array
          items:
            $ref: '#/components/schemas/KnowledgeBase'
          description: The knowledge bases to query
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
      title: CreateQueryToolDTO
    CreateSlackSendMessageToolDtoMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: CreateSlackSendMessageToolDtoMessagesItems
    CreateSlackSendMessageToolDtoType:
      type: string
      enum:
        - slack.message.send
      description: The type of tool. "slack.message.send" for Slack Send Message tool.
      title: CreateSlackSendMessageToolDtoType
    CreateSlackSendMessageToolDTO:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/CreateSlackSendMessageToolDtoMessagesItems'
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/CreateSlackSendMessageToolDtoType'
          description: The type of tool. "slack.message.send" for Slack Send Message tool.
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
      title: CreateSlackSendMessageToolDTO
    CreateSmsToolDtoMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: CreateSmsToolDtoMessagesItems
    CreateSmsToolDtoType:
      type: string
      enum:
        - sms
      description: The type of tool. "sms" for Twilio SMS sending tool.
      title: CreateSmsToolDtoType
    CreateSmsToolDTO:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/CreateSmsToolDtoMessagesItems'
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/CreateSmsToolDtoType'
          description: The type of tool. "sms" for Twilio SMS sending tool.
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
      title: CreateSmsToolDTO
    CreateTextEditorToolDtoMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: CreateTextEditorToolDtoMessagesItems
    CreateTextEditorToolDtoType:
      type: string
      enum:
        - textEditor
      description: The type of tool. "textEditor" for Text Editor tool.
      title: CreateTextEditorToolDtoType
    CreateTextEditorToolDtoSubType:
      type: string
      enum:
        - text_editor_20241022
      description: The sub type of tool.
      title: CreateTextEditorToolDtoSubType
    CreateTextEditorToolDtoName:
      type: string
      enum:
        - str_replace_editor
      default: str_replace_editor
      description: The name of the tool, fixed to 'str_replace_editor'
      title: CreateTextEditorToolDtoName
    CreateTextEditorToolDTO:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/CreateTextEditorToolDtoMessagesItems'
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/CreateTextEditorToolDtoType'
          description: The type of tool. "textEditor" for Text Editor tool.
        subType:
          $ref: '#/components/schemas/CreateTextEditorToolDtoSubType'
          description: The sub type of tool.
        server:
          $ref: '#/components/schemas/Server'
          description: |2-

              This is the server where a `tool-calls` webhook will be sent.

              Notes:
              - Webhook is sent to this server when a tool call is made.
              - Webhook contains the call, assistant, and phone number objects.
              - Webhook contains the variables set on the assistant.
              - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
              - Webhook expects a response with tool call result.
        name:
          $ref: '#/components/schemas/CreateTextEditorToolDtoName'
          description: The name of the tool, fixed to 'str_replace_editor'
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
        - subType
        - name
      title: CreateTextEditorToolDTO
    CreateTransferCallToolDtoMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: CreateTransferCallToolDtoMessagesItems
    CreateTransferCallToolDtoType:
      type: string
      enum:
        - transferCall
      title: CreateTransferCallToolDtoType
    TransferDestinationAssistantMessage:
      oneOf:
        - type: string
        - $ref: '#/components/schemas/CustomMessage'
      description: >-
        This is spoken to the customer before connecting them to the
        destination.


        Usage:

        - If this is not provided and transfer tool messages is not provided,
        default is "Transferring the call now".

        - If set to "", nothing is spoken. This is useful when you want to
        silently transfer. This is especially useful when transferring between
        assistants in a squad. In this scenario, you likely also want to set
        `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message`
        for the destination assistant.


        This accepts a string or a ToolMessageStart class. Latter is useful if
        you want to specify multiple messages for different languages through
        the `contents` field.
      title: TransferDestinationAssistantMessage
    TransferDestinationAssistantType:
      type: string
      enum:
        - assistant
      title: TransferDestinationAssistantType
    TransferMode:
      type: string
      enum:
        - rolling-history
        - swap-system-message-in-history
      title: TransferMode
    TransferDestinationAssistant:
      type: object
      properties:
        message:
          $ref: '#/components/schemas/TransferDestinationAssistantMessage'
          description: >-
            This is spoken to the customer before connecting them to the
            destination.


            Usage:

            - If this is not provided and transfer tool messages is not
            provided, default is "Transferring the call now".

            - If set to "", nothing is spoken. This is useful when you want to
            silently transfer. This is especially useful when transferring
            between assistants in a squad. In this scenario, you likely also
            want to set
            `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message`
            for the destination assistant.


            This accepts a string or a ToolMessageStart class. Latter is useful
            if you want to specify multiple messages for different languages
            through the `contents` field.
        type:
          $ref: '#/components/schemas/TransferDestinationAssistantType'
        transferMode:
          $ref: '#/components/schemas/TransferMode'
          description: >-
            This is the mode to use for the transfer. Defaults to
            `rolling-history`.


            - `rolling-history`: This is the default mode. It keeps the entire
            conversation history and appends the new assistant's system message
            on transfer.

              Example:

              Pre-transfer:
                system: assistant1 system message
                assistant: assistant1 first message
                user: hey, good morning
                assistant: how can i help?
                user: i need help with my account
                assistant: (destination.message)

              Post-transfer:
                system: assistant1 system message
                assistant: assistant1 first message
                user: hey, good morning
                assistant: how can i help?
                user: i need help with my account
                assistant: (destination.message)
                system: assistant2 system message
                assistant: assistant2 first message (or model generated if firstMessageMode is set to `assistant-speaks-first-with-model-generated-message`)

            - `swap-system-message-in-history`: This replaces the original
            system message with the new assistant's system message on transfer.

              Example:

              Pre-transfer:
                system: assistant1 system message
                assistant: assistant1 first message
                user: hey, good morning
                assistant: how can i help?
                user: i need help with my account
                assistant: (destination.message)

              Post-transfer:
                system: assistant2 system message
                assistant: assistant1 first message
                user: hey, good morning
                assistant: how can i help?
                user: i need help with my account
                assistant: (destination.message)
                assistant: assistant2 first message (or model generated if firstMessageMode is set to `assistant-speaks-first-with-model-generated-message`)

            - `delete-history`: This deletes the entire conversation history on
            transfer.

              Example:

              Pre-transfer:
                system: assistant1 system message
                assistant: assistant1 first message
                user: hey, good morning
                assistant: how can i help?
                user: i need help with my account
                assistant: (destination.message)

              Post-transfer:
                system: assistant2 system message
                assistant: assistant2 first message
                user: Yes, please
                assistant: how can i help?
                user: i need help with my account

            -
            `swap-system-message-in-history-and-remove-transfer-tool-messages`:
            This replaces the original system message with the new assistant's
            system message on transfer and removes transfer tool messages from
            conversation history sent to the LLM.

              Example:

              Pre-transfer:
                system: assistant1 system message
                assistant: assistant1 first message
                user: hey, good morning
                assistant: how can i help?
                user: i need help with my account
                transfer-tool
                transfer-tool-result
                assistant: (destination.message)

              Post-transfer:
                system: assistant2 system message
                assistant: assistant1 first message
                user: hey, good morning
                assistant: how can i help?
                user: i need help with my account
                assistant: (destination.message)
                assistant: assistant2 first message (or model generated if firstMessageMode is set to `assistant-speaks-first-with-model-generated-message`)

            @default 'rolling-history'
        assistantName:
          type: string
          description: This is the assistant to transfer the call to.
        description:
          type: string
          description: >-
            This is the description of the destination, used by the AI to choose
            when and how to transfer the call.
      required:
        - type
        - assistantName
      title: TransferDestinationAssistant
    CreateTransferCallToolDtoDestinationsItems:
      oneOf:
        - $ref: '#/components/schemas/TransferDestinationAssistant'
        - $ref: '#/components/schemas/TransferDestinationNumber'
        - $ref: '#/components/schemas/TransferDestinationSip'
      title: CreateTransferCallToolDtoDestinationsItems
    CreateTransferCallToolDTO:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/CreateTransferCallToolDtoMessagesItems'
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/CreateTransferCallToolDtoType'
        destinations:
          type: array
          items:
            $ref: '#/components/schemas/CreateTransferCallToolDtoDestinationsItems'
          description: >-
            These are the destinations that the call can be transferred to. If
            no destinations are provided, server.url will be used to get the
            transfer destination once the tool is called.
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
      title: CreateTransferCallToolDTO
    CreateSipRequestToolDtoMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: CreateSipRequestToolDtoMessagesItems
    CreateSipRequestToolDtoType:
      type: string
      enum:
        - sipRequest
      description: The type of tool. "sipRequest" for SIP request tool.
      title: CreateSipRequestToolDtoType
    CreateSipRequestToolDtoVerb:
      type: string
      enum:
        - INFO
        - MESSAGE
        - NOTIFY
      description: The SIP method to send.
      title: CreateSipRequestToolDtoVerb
    CreateSipRequestToolDtoBody:
      oneOf:
        - type: string
        - $ref: '#/components/schemas/JsonSchema'
      description: >-
        Body to include in the SIP request. Either a literal string body, or a
        JSON schema describing a structured body that the model should populate.
      title: CreateSipRequestToolDtoBody
    CreateSipRequestToolDTO:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/CreateSipRequestToolDtoMessagesItems'
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/CreateSipRequestToolDtoType'
          description: The type of tool. "sipRequest" for SIP request tool.
        verb:
          $ref: '#/components/schemas/CreateSipRequestToolDtoVerb'
          description: The SIP method to send.
        headers:
          $ref: '#/components/schemas/JsonSchema'
          description: >-
            JSON schema for headers the model should populate when sending the
            SIP request.
        body:
          $ref: '#/components/schemas/CreateSipRequestToolDtoBody'
          description: >-
            Body to include in the SIP request. Either a literal string body, or
            a JSON schema describing a structured body that the model should
            populate.
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
        - verb
      title: CreateSipRequestToolDTO
    CreateVoicemailToolDtoMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: CreateVoicemailToolDtoMessagesItems
    CreateVoicemailToolDtoType:
      type: string
      enum:
        - voicemail
      description: The type of tool. "voicemail" for Voicemail tool.
      title: CreateVoicemailToolDtoType
    CreateVoicemailToolDTO:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/CreateVoicemailToolDtoMessagesItems'
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/CreateVoicemailToolDtoType'
          description: The type of tool. "voicemail" for Voicemail tool.
        beepDetectionEnabled:
          type: boolean
          default: false
          description: >-
            This is the flag that enables beep detection for voicemail detection
            and applies only for twilio based calls.


            @default false
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
      title: CreateVoicemailToolDTO
    AnthropicBedrockModelToolsItems:
      oneOf:
        - $ref: '#/components/schemas/CreateApiRequestToolDTO'
        - $ref: '#/components/schemas/CreateBashToolDTO'
        - $ref: '#/components/schemas/CreateCodeToolDTO'
        - $ref: '#/components/schemas/CreateComputerToolDTO'
        - $ref: '#/components/schemas/CreateDtmfToolDTO'
        - $ref: '#/components/schemas/CreateEndCallToolDTO'
        - $ref: '#/components/schemas/CreateFunctionToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
        - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
        - $ref: '#/components/schemas/CreateHandoffToolDTO'
        - $ref: '#/components/schemas/CreateMcpToolDTO'
        - $ref: '#/components/schemas/CreateQueryToolDTO'
        - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
        - $ref: '#/components/schemas/CreateSmsToolDTO'
        - $ref: '#/components/schemas/CreateTextEditorToolDTO'
        - $ref: '#/components/schemas/CreateTransferCallToolDTO'
        - $ref: '#/components/schemas/CreateSipRequestToolDTO'
        - $ref: '#/components/schemas/CreateVoicemailToolDTO'
      title: AnthropicBedrockModelToolsItems
    CreateCustomKnowledgeBaseDtoProvider:
      type: string
      enum:
        - custom-knowledge-base
      description: This knowledge base is bring your own knowledge base implementation.
      title: CreateCustomKnowledgeBaseDtoProvider
    CreateCustomKnowledgeBaseDTO:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/CreateCustomKnowledgeBaseDtoProvider'
          description: This knowledge base is bring your own knowledge base implementation.
        server:
          $ref: '#/components/schemas/Server'
          description: |-
            This is where the knowledge base request will be sent.

            Request Example:

            POST https://{server.url}
            Content-Type: application/json

            {
              "messsage": {
                "type": "knowledge-base-request",
                "messages": [
                  {
                    "role": "user",
                    "content": "Why is ocean blue?"
                  }
                ],
                ...other metadata about the call...
              }
            }

            Response Expected:
            ```
            {
              "message": {
                 "role": "assistant",
                 "content": "The ocean is blue because water absorbs everything but blue.",
              }, // YOU CAN RETURN THE EXACT RESPONSE TO SPEAK
              "documents": [
                {
                  "content": "The ocean is blue primarily because water absorbs colors in the red part of the light spectrum and scatters the blue light, making it more visible to our eyes.",
                  "similarity": 1
                },
                {
                  "content": "Blue light is scattered more by the water molecules than other colors, enhancing the blue appearance of the ocean.",
                  "similarity": .5
                }
              ] // OR, YOU CAN RETURN AN ARRAY OF DOCUMENTS THAT WILL BE SENT TO THE MODEL
            }
            ```
      required:
        - provider
        - server
      title: CreateCustomKnowledgeBaseDTO
    AnthropicBedrockModelKnowledgeBase:
      oneOf:
        - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
      description: These are the options for the knowledge base.
      title: AnthropicBedrockModelKnowledgeBase
    AnthropicBedrockModelProvider:
      type: string
      enum:
        - anthropic-bedrock
      description: The provider identifier for Anthropic via AWS Bedrock.
      title: AnthropicBedrockModelProvider
    AnthropicBedrockModelModel:
      type: string
      enum:
        - claude-3-opus-20240229
        - claude-3-sonnet-20240229
        - claude-3-haiku-20240307
        - claude-3-5-sonnet-20240620
        - claude-3-5-sonnet-20241022
        - claude-3-5-haiku-20241022
        - claude-3-7-sonnet-20250219
        - claude-opus-4-20250514
        - claude-opus-4-5-20251101
        - claude-opus-4-6
        - claude-sonnet-4-20250514
        - claude-sonnet-4-5-20250929
        - claude-sonnet-4-6
        - claude-haiku-4-5-20251001
      description: The specific Anthropic/Claude model that will be used via Bedrock.
      title: AnthropicBedrockModelModel
    AnthropicThinkingConfigType:
      type: string
      enum:
        - enabled
      title: AnthropicThinkingConfigType
    AnthropicThinkingConfig:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/AnthropicThinkingConfigType'
        budgetTokens:
          type: number
          format: double
          description: |-
            The maximum number of tokens to allocate for thinking.
            Must be between 1024 and 100000 tokens.
      required:
        - type
        - budgetTokens
      title: AnthropicThinkingConfig
    AnthropicBedrockModel:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
          description: This is the starting state for the conversation.
        tools:
          type: array
          items:
            $ref: '#/components/schemas/AnthropicBedrockModelToolsItems'
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
        toolIds:
          type: array
          items:
            type: string
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
        knowledgeBase:
          $ref: '#/components/schemas/AnthropicBedrockModelKnowledgeBase'
          description: These are the options for the knowledge base.
        provider:
          $ref: '#/components/schemas/AnthropicBedrockModelProvider'
          description: The provider identifier for Anthropic via AWS Bedrock.
        model:
          $ref: '#/components/schemas/AnthropicBedrockModelModel'
          description: The specific Anthropic/Claude model that will be used via Bedrock.
        thinking:
          $ref: '#/components/schemas/AnthropicThinkingConfig'
          description: |-
            Optional configuration for Anthropic's thinking feature.
            Only applicable for claude-3-7-sonnet-20250219 model.
            If provided, maxTokens must be greater than thinking.budgetTokens.
        temperature:
          type: number
          format: double
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
        maxTokens:
          type: number
          format: double
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          format: double
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
      required:
        - provider
        - model
      title: AnthropicBedrockModel
    AnyscaleModelToolsItems:
      oneOf:
        - $ref: '#/components/schemas/CreateApiRequestToolDTO'
        - $ref: '#/components/schemas/CreateBashToolDTO'
        - $ref: '#/components/schemas/CreateCodeToolDTO'
        - $ref: '#/components/schemas/CreateComputerToolDTO'
        - $ref: '#/components/schemas/CreateDtmfToolDTO'
        - $ref: '#/components/schemas/CreateEndCallToolDTO'
        - $ref: '#/components/schemas/CreateFunctionToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
        - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
        - $ref: '#/components/schemas/CreateHandoffToolDTO'
        - $ref: '#/components/schemas/CreateMcpToolDTO'
        - $ref: '#/components/schemas/CreateQueryToolDTO'
        - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
        - $ref: '#/components/schemas/CreateSmsToolDTO'
        - $ref: '#/components/schemas/CreateTextEditorToolDTO'
        - $ref: '#/components/schemas/CreateTransferCallToolDTO'
        - $ref: '#/components/schemas/CreateSipRequestToolDTO'
        - $ref: '#/components/schemas/CreateVoicemailToolDTO'
      title: AnyscaleModelToolsItems
    AnyscaleModelKnowledgeBase:
      oneOf:
        - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
      description: These are the options for the knowledge base.
      title: AnyscaleModelKnowledgeBase
    AnyscaleModelProvider:
      type: string
      enum:
        - anyscale
      title: AnyscaleModelProvider
    AnyscaleModel:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
          description: This is the starting state for the conversation.
        tools:
          type: array
          items:
            $ref: '#/components/schemas/AnyscaleModelToolsItems'
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
        toolIds:
          type: array
          items:
            type: string
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
        knowledgeBase:
          $ref: '#/components/schemas/AnyscaleModelKnowledgeBase'
          description: These are the options for the knowledge base.
        provider:
          $ref: '#/components/schemas/AnyscaleModelProvider'
        model:
          type: string
          description: >-
            This is the name of the model. Ex.
            cognitivecomputations/dolphin-mixtral-8x7b
        temperature:
          type: number
          format: double
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
        maxTokens:
          type: number
          format: double
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          format: double
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
      required:
        - provider
        - model
      title: AnyscaleModel
    CerebrasModelToolsItems:
      oneOf:
        - $ref: '#/components/schemas/CreateApiRequestToolDTO'
        - $ref: '#/components/schemas/CreateBashToolDTO'
        - $ref: '#/components/schemas/CreateCodeToolDTO'
        - $ref: '#/components/schemas/CreateComputerToolDTO'
        - $ref: '#/components/schemas/CreateDtmfToolDTO'
        - $ref: '#/components/schemas/CreateEndCallToolDTO'
        - $ref: '#/components/schemas/CreateFunctionToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
        - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
        - $ref: '#/components/schemas/CreateHandoffToolDTO'
        - $ref: '#/components/schemas/CreateMcpToolDTO'
        - $ref: '#/components/schemas/CreateQueryToolDTO'
        - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
        - $ref: '#/components/schemas/CreateSmsToolDTO'
        - $ref: '#/components/schemas/CreateTextEditorToolDTO'
        - $ref: '#/components/schemas/CreateTransferCallToolDTO'
        - $ref: '#/components/schemas/CreateSipRequestToolDTO'
        - $ref: '#/components/schemas/CreateVoicemailToolDTO'
      title: CerebrasModelToolsItems
    CerebrasModelKnowledgeBase:
      oneOf:
        - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
      description: These are the options for the knowledge base.
      title: CerebrasModelKnowledgeBase
    CerebrasModelModel:
      type: string
      enum:
        - llama3.1-8b
        - llama-3.3-70b
      description: >-
        This is the name of the model. Ex.
        cognitivecomputations/dolphin-mixtral-8x7b
      title: CerebrasModelModel
    CerebrasModelProvider:
      type: string
      enum:
        - cerebras
      title: CerebrasModelProvider
    CerebrasModel:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
          description: This is the starting state for the conversation.
        tools:
          type: array
          items:
            $ref: '#/components/schemas/CerebrasModelToolsItems'
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
        toolIds:
          type: array
          items:
            type: string
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
        knowledgeBase:
          $ref: '#/components/schemas/CerebrasModelKnowledgeBase'
          description: These are the options for the knowledge base.
        model:
          $ref: '#/components/schemas/CerebrasModelModel'
          description: >-
            This is the name of the model. Ex.
            cognitivecomputations/dolphin-mixtral-8x7b
        provider:
          $ref: '#/components/schemas/CerebrasModelProvider'
        temperature:
          type: number
          format: double
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
        maxTokens:
          type: number
          format: double
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          format: double
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
      required:
        - model
        - provider
      title: CerebrasModel
    CustomLlmModelToolsItems:
      oneOf:
        - $ref: '#/components/schemas/CreateApiRequestToolDTO'
        - $ref: '#/components/schemas/CreateBashToolDTO'
        - $ref: '#/components/schemas/CreateCodeToolDTO'
        - $ref: '#/components/schemas/CreateComputerToolDTO'
        - $ref: '#/components/schemas/CreateDtmfToolDTO'
        - $ref: '#/components/schemas/CreateEndCallToolDTO'
        - $ref: '#/components/schemas/CreateFunctionToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
        - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
        - $ref: '#/components/schemas/CreateHandoffToolDTO'
        - $ref: '#/components/schemas/CreateMcpToolDTO'
        - $ref: '#/components/schemas/CreateQueryToolDTO'
        - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
        - $ref: '#/components/schemas/CreateSmsToolDTO'
        - $ref: '#/components/schemas/CreateTextEditorToolDTO'
        - $ref: '#/components/schemas/CreateTransferCallToolDTO'
        - $ref: '#/components/schemas/CreateSipRequestToolDTO'
        - $ref: '#/components/schemas/CreateVoicemailToolDTO'
      title: CustomLlmModelToolsItems
    CustomLlmModelKnowledgeBase:
      oneOf:
        - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
      description: These are the options for the knowledge base.
      title: CustomLlmModelKnowledgeBase
    CustomLlmModelProvider:
      type: string
      enum:
        - custom-llm
      description: >-
        This is the provider that will be used for the model. Any service,
        including your own server, that is compatible with the OpenAI API can be
        used.
      title: CustomLlmModelProvider
    CustomLlmModelMetadataSendMode:
      type: string
      enum:
        - 'off'
        - variable
        - destructured
      description: >-
        This determines whether metadata is sent in requests to the custom
        provider.


        - `off` will not send any metadata. payload will look like `{ messages
        }`

        - `variable` will send `assistant.metadata` as a variable on the
        payload. payload will look like `{ messages, metadata }`

        - `destructured` will send `assistant.metadata` fields directly on the
        payload. payload will look like `{ messages, ...metadata }`


        Further, `variable` and `destructured` will send `call`, `phoneNumber`,
        and `customer` objects in the payload.


        Default is `variable`.
      title: CustomLlmModelMetadataSendMode
    CustomLLMModel:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
          description: This is the starting state for the conversation.
        tools:
          type: array
          items:
            $ref: '#/components/schemas/CustomLlmModelToolsItems'
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
        toolIds:
          type: array
          items:
            type: string
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
        knowledgeBase:
          $ref: '#/components/schemas/CustomLlmModelKnowledgeBase'
          description: These are the options for the knowledge base.
        provider:
          $ref: '#/components/schemas/CustomLlmModelProvider'
          description: >-
            This is the provider that will be used for the model. Any service,
            including your own server, that is compatible with the OpenAI API
            can be used.
        metadataSendMode:
          $ref: '#/components/schemas/CustomLlmModelMetadataSendMode'
          description: >-
            This determines whether metadata is sent in requests to the custom
            provider.


            - `off` will not send any metadata. payload will look like `{
            messages }`

            - `variable` will send `assistant.metadata` as a variable on the
            payload. payload will look like `{ messages, metadata }`

            - `destructured` will send `assistant.metadata` fields directly on
            the payload. payload will look like `{ messages, ...metadata }`


            Further, `variable` and `destructured` will send `call`,
            `phoneNumber`, and `customer` objects in the payload.


            Default is `variable`.
        headers:
          type: object
          additionalProperties:
            type: string
          description: >-
            Custom headers to send with requests. These headers can override
            default OpenAI headers except for Authorization (which should be
            specified using a custom-llm credential).
        url:
          type: string
          description: >-
            These is the URL we'll use for the OpenAI client's `baseURL`. Ex.
            https://openrouter.ai/api/v1
        wordLevelConfidenceEnabled:
          type: boolean
          description: >-
            This determines whether the transcriber's word level confidence is
            sent in requests to the custom provider. Default is false.

            This only works for Deepgram transcribers.
        timeoutSeconds:
          type: number
          format: double
          description: >-
            This sets the timeout for the connection to the custom provider
            without needing to stream any tokens back. Default is 20 seconds.
        model:
          type: string
          description: >-
            This is the name of the model. Ex.
            cognitivecomputations/dolphin-mixtral-8x7b
        temperature:
          type: number
          format: double
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
        maxTokens:
          type: number
          format: double
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          format: double
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
      required:
        - provider
        - url
        - model
      title: CustomLLMModel
    DeepInfraModelToolsItems:
      oneOf:
        - $ref: '#/components/schemas/CreateApiRequestToolDTO'
        - $ref: '#/components/schemas/CreateBashToolDTO'
        - $ref: '#/components/schemas/CreateCodeToolDTO'
        - $ref: '#/components/schemas/CreateComputerToolDTO'
        - $ref: '#/components/schemas/CreateDtmfToolDTO'
        - $ref: '#/components/schemas/CreateEndCallToolDTO'
        - $ref: '#/components/schemas/CreateFunctionToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
        - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
        - $ref: '#/components/schemas/CreateHandoffToolDTO'
        - $ref: '#/components/schemas/CreateMcpToolDTO'
        - $ref: '#/components/schemas/CreateQueryToolDTO'
        - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
        - $ref: '#/components/schemas/CreateSmsToolDTO'
        - $ref: '#/components/schemas/CreateTextEditorToolDTO'
        - $ref: '#/components/schemas/CreateTransferCallToolDTO'
        - $ref: '#/components/schemas/CreateSipRequestToolDTO'
        - $ref: '#/components/schemas/CreateVoicemailToolDTO'
      title: DeepInfraModelToolsItems
    DeepInfraModelKnowledgeBase:
      oneOf:
        - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
      description: These are the options for the knowledge base.
      title: DeepInfraModelKnowledgeBase
    DeepInfraModelProvider:
      type: string
      enum:
        - deepinfra
      title: DeepInfraModelProvider
    DeepInfraModel:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
          description: This is the starting state for the conversation.
        tools:
          type: array
          items:
            $ref: '#/components/schemas/DeepInfraModelToolsItems'
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
        toolIds:
          type: array
          items:
            type: string
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
        knowledgeBase:
          $ref: '#/components/schemas/DeepInfraModelKnowledgeBase'
          description: These are the options for the knowledge base.
        provider:
          $ref: '#/components/schemas/DeepInfraModelProvider'
        model:
          type: string
          description: >-
            This is the name of the model. Ex.
            cognitivecomputations/dolphin-mixtral-8x7b
        temperature:
          type: number
          format: double
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
        maxTokens:
          type: number
          format: double
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          format: double
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
      required:
        - provider
        - model
      title: DeepInfraModel
    DeepSeekModelToolsItems:
      oneOf:
        - $ref: '#/components/schemas/CreateApiRequestToolDTO'
        - $ref: '#/components/schemas/CreateBashToolDTO'
        - $ref: '#/components/schemas/CreateCodeToolDTO'
        - $ref: '#/components/schemas/CreateComputerToolDTO'
        - $ref: '#/components/schemas/CreateDtmfToolDTO'
        - $ref: '#/components/schemas/CreateEndCallToolDTO'
        - $ref: '#/components/schemas/CreateFunctionToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
        - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
        - $ref: '#/components/schemas/CreateHandoffToolDTO'
        - $ref: '#/components/schemas/CreateMcpToolDTO'
        - $ref: '#/components/schemas/CreateQueryToolDTO'
        - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
        - $ref: '#/components/schemas/CreateSmsToolDTO'
        - $ref: '#/components/schemas/CreateTextEditorToolDTO'
        - $ref: '#/components/schemas/CreateTransferCallToolDTO'
        - $ref: '#/components/schemas/CreateSipRequestToolDTO'
        - $ref: '#/components/schemas/CreateVoicemailToolDTO'
      title: DeepSeekModelToolsItems
    DeepSeekModelKnowledgeBase:
      oneOf:
        - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
      description: These are the options for the knowledge base.
      title: DeepSeekModelKnowledgeBase
    DeepSeekModelModel:
      type: string
      enum:
        - deepseek-chat
        - deepseek-reasoner
      description: >-
        This is the name of the model. Ex.
        cognitivecomputations/dolphin-mixtral-8x7b
      title: DeepSeekModelModel
    DeepSeekModelProvider:
      type: string
      enum:
        - deep-seek
      title: DeepSeekModelProvider
    DeepSeekModel:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
          description: This is the starting state for the conversation.
        tools:
          type: array
          items:
            $ref: '#/components/schemas/DeepSeekModelToolsItems'
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
        toolIds:
          type: array
          items:
            type: string
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
        knowledgeBase:
          $ref: '#/components/schemas/DeepSeekModelKnowledgeBase'
          description: These are the options for the knowledge base.
        model:
          $ref: '#/components/schemas/DeepSeekModelModel'
          description: >-
            This is the name of the model. Ex.
            cognitivecomputations/dolphin-mixtral-8x7b
        provider:
          $ref: '#/components/schemas/DeepSeekModelProvider'
        temperature:
          type: number
          format: double
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
        maxTokens:
          type: number
          format: double
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          format: double
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
      required:
        - model
        - provider
      title: DeepSeekModel
    GoogleModelToolsItems:
      oneOf:
        - $ref: '#/components/schemas/CreateApiRequestToolDTO'
        - $ref: '#/components/schemas/CreateBashToolDTO'
        - $ref: '#/components/schemas/CreateCodeToolDTO'
        - $ref: '#/components/schemas/CreateComputerToolDTO'
        - $ref: '#/components/schemas/CreateDtmfToolDTO'
        - $ref: '#/components/schemas/CreateEndCallToolDTO'
        - $ref: '#/components/schemas/CreateFunctionToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
        - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
        - $ref: '#/components/schemas/CreateHandoffToolDTO'
        - $ref: '#/components/schemas/CreateMcpToolDTO'
        - $ref: '#/components/schemas/CreateQueryToolDTO'
        - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
        - $ref: '#/components/schemas/CreateSmsToolDTO'
        - $ref: '#/components/schemas/CreateTextEditorToolDTO'
        - $ref: '#/components/schemas/CreateTransferCallToolDTO'
        - $ref: '#/components/schemas/CreateSipRequestToolDTO'
        - $ref: '#/components/schemas/CreateVoicemailToolDTO'
      title: GoogleModelToolsItems
    GoogleModelKnowledgeBase:
      oneOf:
        - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
      description: These are the options for the knowledge base.
      title: GoogleModelKnowledgeBase
    GoogleModelModel:
      type: string
      enum:
        - gemini-3-flash-preview
        - gemini-2.5-pro
        - gemini-2.5-flash
        - gemini-2.5-flash-lite
        - gemini-2.0-flash-thinking-exp
        - gemini-2.0-pro-exp-02-05
        - gemini-2.0-flash
        - gemini-2.0-flash-lite
        - gemini-2.0-flash-exp
        - gemini-2.0-flash-realtime-exp
        - gemini-1.5-flash
        - gemini-1.5-flash-002
        - gemini-1.5-pro
        - gemini-1.5-pro-002
        - gemini-1.0-pro
      description: This is the Google model that will be used.
      title: GoogleModelModel
    GoogleModelProvider:
      type: string
      enum:
        - google
      title: GoogleModelProvider
    GeminiMultimodalLivePrebuiltVoiceConfigVoiceName:
      type: string
      enum:
        - Puck
        - Charon
        - Kore
        - Fenrir
        - Aoede
      title: GeminiMultimodalLivePrebuiltVoiceConfigVoiceName
    GeminiMultimodalLivePrebuiltVoiceConfig:
      type: object
      properties:
        voiceName:
          $ref: >-
            #/components/schemas/GeminiMultimodalLivePrebuiltVoiceConfigVoiceName
      required:
        - voiceName
      title: GeminiMultimodalLivePrebuiltVoiceConfig
    GeminiMultimodalLiveVoiceConfig:
      type: object
      properties:
        prebuiltVoiceConfig:
          $ref: '#/components/schemas/GeminiMultimodalLivePrebuiltVoiceConfig'
      required:
        - prebuiltVoiceConfig
      title: GeminiMultimodalLiveVoiceConfig
    GeminiMultimodalLiveSpeechConfig:
      type: object
      properties:
        voiceConfig:
          $ref: '#/components/schemas/GeminiMultimodalLiveVoiceConfig'
      required:
        - voiceConfig
      title: GeminiMultimodalLiveSpeechConfig
    GoogleRealtimeConfig:
      type: object
      properties:
        topP:
          type: number
          format: double
          description: >-
            This is the nucleus sampling parameter that controls the cumulative
            probability of tokens considered during text generation.

            Only applicable with the Gemini Flash 2.0 Multimodal Live API.
        topK:
          type: number
          format: double
          description: >-
            This is the top-k sampling parameter that limits the number of
            highest probability tokens considered during text generation.

            Only applicable with the Gemini Flash 2.0 Multimodal Live API.
        presencePenalty:
          type: number
          format: double
          description: >-
            This is the presence penalty parameter that influences the model's
            likelihood to repeat information by penalizing tokens based on their
            presence in the text.

            Only applicable with the Gemini Flash 2.0 Multimodal Live API.
        frequencyPenalty:
          type: number
          format: double
          description: >-
            This is the frequency penalty parameter that influences the model's
            likelihood to repeat tokens by penalizing them based on their
            frequency in the text.

            Only applicable with the Gemini Flash 2.0 Multimodal Live API.
        speechConfig:
          $ref: '#/components/schemas/GeminiMultimodalLiveSpeechConfig'
          description: >-
            This is the speech configuration object that defines the voice
            settings to be used for the model's speech output.

            Only applicable with the Gemini Flash 2.0 Multimodal Live API.
      title: GoogleRealtimeConfig
    GoogleModel:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
          description: This is the starting state for the conversation.
        tools:
          type: array
          items:
            $ref: '#/components/schemas/GoogleModelToolsItems'
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
        toolIds:
          type: array
          items:
            type: string
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
        knowledgeBase:
          $ref: '#/components/schemas/GoogleModelKnowledgeBase'
          description: These are the options for the knowledge base.
        model:
          $ref: '#/components/schemas/GoogleModelModel'
          description: This is the Google model that will be used.
        provider:
          $ref: '#/components/schemas/GoogleModelProvider'
        realtimeConfig:
          $ref: '#/components/schemas/GoogleRealtimeConfig'
          description: >-
            This is the session configuration for the Gemini Flash 2.0
            Multimodal Live API.

            Only applicable if the model `gemini-2.0-flash-realtime-exp` is
            selected.
        temperature:
          type: number
          format: double
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
        maxTokens:
          type: number
          format: double
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          format: double
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
      required:
        - model
        - provider
      title: GoogleModel
    GroqModelToolsItems:
      oneOf:
        - $ref: '#/components/schemas/CreateApiRequestToolDTO'
        - $ref: '#/components/schemas/CreateBashToolDTO'
        - $ref: '#/components/schemas/CreateCodeToolDTO'
        - $ref: '#/components/schemas/CreateComputerToolDTO'
        - $ref: '#/components/schemas/CreateDtmfToolDTO'
        - $ref: '#/components/schemas/CreateEndCallToolDTO'
        - $ref: '#/components/schemas/CreateFunctionToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
        - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
        - $ref: '#/components/schemas/CreateHandoffToolDTO'
        - $ref: '#/components/schemas/CreateMcpToolDTO'
        - $ref: '#/components/schemas/CreateQueryToolDTO'
        - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
        - $ref: '#/components/schemas/CreateSmsToolDTO'
        - $ref: '#/components/schemas/CreateTextEditorToolDTO'
        - $ref: '#/components/schemas/CreateTransferCallToolDTO'
        - $ref: '#/components/schemas/CreateSipRequestToolDTO'
        - $ref: '#/components/schemas/CreateVoicemailToolDTO'
      title: GroqModelToolsItems
    GroqModelKnowledgeBase:
      oneOf:
        - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
      description: These are the options for the knowledge base.
      title: GroqModelKnowledgeBase
    GroqModelModel:
      type: string
      enum:
        - openai/gpt-oss-20b
        - openai/gpt-oss-120b
        - deepseek-r1-distill-llama-70b
        - llama-3.3-70b-versatile
        - llama-3.1-405b-reasoning
        - llama-3.1-8b-instant
        - llama3-8b-8192
        - llama3-70b-8192
        - gemma2-9b-it
        - moonshotai/kimi-k2-instruct-0905
        - meta-llama/llama-4-maverick-17b-128e-instruct
        - meta-llama/llama-4-scout-17b-16e-instruct
        - mistral-saba-24b
        - compound-beta
        - compound-beta-mini
      description: >-
        This is the name of the model. Ex.
        cognitivecomputations/dolphin-mixtral-8x7b
      title: GroqModelModel
    GroqModelProvider:
      type: string
      enum:
        - groq
      title: GroqModelProvider
    GroqModel:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
          description: This is the starting state for the conversation.
        tools:
          type: array
          items:
            $ref: '#/components/schemas/GroqModelToolsItems'
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
        toolIds:
          type: array
          items:
            type: string
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
        knowledgeBase:
          $ref: '#/components/schemas/GroqModelKnowledgeBase'
          description: These are the options for the knowledge base.
        model:
          $ref: '#/components/schemas/GroqModelModel'
          description: >-
            This is the name of the model. Ex.
            cognitivecomputations/dolphin-mixtral-8x7b
        provider:
          $ref: '#/components/schemas/GroqModelProvider'
        temperature:
          type: number
          format: double
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
        maxTokens:
          type: number
          format: double
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          format: double
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
      required:
        - model
        - provider
      title: GroqModel
    InflectionAiModelToolsItems:
      oneOf:
        - $ref: '#/components/schemas/CreateApiRequestToolDTO'
        - $ref: '#/components/schemas/CreateBashToolDTO'
        - $ref: '#/components/schemas/CreateCodeToolDTO'
        - $ref: '#/components/schemas/CreateComputerToolDTO'
        - $ref: '#/components/schemas/CreateDtmfToolDTO'
        - $ref: '#/components/schemas/CreateEndCallToolDTO'
        - $ref: '#/components/schemas/CreateFunctionToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
        - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
        - $ref: '#/components/schemas/CreateHandoffToolDTO'
        - $ref: '#/components/schemas/CreateMcpToolDTO'
        - $ref: '#/components/schemas/CreateQueryToolDTO'
        - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
        - $ref: '#/components/schemas/CreateSmsToolDTO'
        - $ref: '#/components/schemas/CreateTextEditorToolDTO'
        - $ref: '#/components/schemas/CreateTransferCallToolDTO'
        - $ref: '#/components/schemas/CreateSipRequestToolDTO'
        - $ref: '#/components/schemas/CreateVoicemailToolDTO'
      title: InflectionAiModelToolsItems
    InflectionAiModelKnowledgeBase:
      oneOf:
        - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
      description: These are the options for the knowledge base.
      title: InflectionAiModelKnowledgeBase
    InflectionAiModelModel:
      type: string
      enum:
        - inflection_3_pi
      description: >-
        This is the name of the model. Ex.
        cognitivecomputations/dolphin-mixtral-8x7b
      title: InflectionAiModelModel
    InflectionAiModelProvider:
      type: string
      enum:
        - inflection-ai
      title: InflectionAiModelProvider
    InflectionAIModel:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
          description: This is the starting state for the conversation.
        tools:
          type: array
          items:
            $ref: '#/components/schemas/InflectionAiModelToolsItems'
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
        toolIds:
          type: array
          items:
            type: string
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
        knowledgeBase:
          $ref: '#/components/schemas/InflectionAiModelKnowledgeBase'
          description: These are the options for the knowledge base.
        model:
          $ref: '#/components/schemas/InflectionAiModelModel'
          description: >-
            This is the name of the model. Ex.
            cognitivecomputations/dolphin-mixtral-8x7b
        provider:
          $ref: '#/components/schemas/InflectionAiModelProvider'
        temperature:
          type: number
          format: double
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
        maxTokens:
          type: number
          format: double
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          format: double
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
      required:
        - model
        - provider
      title: InflectionAIModel
    MinimaxLlmModelToolsItems:
      oneOf:
        - $ref: '#/components/schemas/CreateApiRequestToolDTO'
        - $ref: '#/components/schemas/CreateBashToolDTO'
        - $ref: '#/components/schemas/CreateCodeToolDTO'
        - $ref: '#/components/schemas/CreateComputerToolDTO'
        - $ref: '#/components/schemas/CreateDtmfToolDTO'
        - $ref: '#/components/schemas/CreateEndCallToolDTO'
        - $ref: '#/components/schemas/CreateFunctionToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
        - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
        - $ref: '#/components/schemas/CreateHandoffToolDTO'
        - $ref: '#/components/schemas/CreateMcpToolDTO'
        - $ref: '#/components/schemas/CreateQueryToolDTO'
        - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
        - $ref: '#/components/schemas/CreateSmsToolDTO'
        - $ref: '#/components/schemas/CreateTextEditorToolDTO'
        - $ref: '#/components/schemas/CreateTransferCallToolDTO'
        - $ref: '#/components/schemas/CreateSipRequestToolDTO'
        - $ref: '#/components/schemas/CreateVoicemailToolDTO'
      title: MinimaxLlmModelToolsItems
    MinimaxLlmModelKnowledgeBase:
      oneOf:
        - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
      description: These are the options for the knowledge base.
      title: MinimaxLlmModelKnowledgeBase
    MinimaxLlmModelProvider:
      type: string
      enum:
        - minimax
      title: MinimaxLlmModelProvider
    MinimaxLlmModelModel:
      type: string
      enum:
        - MiniMax-M2.7
      description: >-
        This is the name of the model. Ex.
        cognitivecomputations/dolphin-mixtral-8x7b
      title: MinimaxLlmModelModel
    MinimaxLLMModel:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
          description: This is the starting state for the conversation.
        tools:
          type: array
          items:
            $ref: '#/components/schemas/MinimaxLlmModelToolsItems'
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
        toolIds:
          type: array
          items:
            type: string
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
        knowledgeBase:
          $ref: '#/components/schemas/MinimaxLlmModelKnowledgeBase'
          description: These are the options for the knowledge base.
        provider:
          $ref: '#/components/schemas/MinimaxLlmModelProvider'
        model:
          $ref: '#/components/schemas/MinimaxLlmModelModel'
          description: >-
            This is the name of the model. Ex.
            cognitivecomputations/dolphin-mixtral-8x7b
        temperature:
          type: number
          format: double
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
        maxTokens:
          type: number
          format: double
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          format: double
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
      required:
        - provider
        - model
      title: MinimaxLLMModel
    OpenAiModelToolsItems:
      oneOf:
        - $ref: '#/components/schemas/CreateApiRequestToolDTO'
        - $ref: '#/components/schemas/CreateBashToolDTO'
        - $ref: '#/components/schemas/CreateCodeToolDTO'
        - $ref: '#/components/schemas/CreateComputerToolDTO'
        - $ref: '#/components/schemas/CreateDtmfToolDTO'
        - $ref: '#/components/schemas/CreateEndCallToolDTO'
        - $ref: '#/components/schemas/CreateFunctionToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
        - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
        - $ref: '#/components/schemas/CreateHandoffToolDTO'
        - $ref: '#/components/schemas/CreateMcpToolDTO'
        - $ref: '#/components/schemas/CreateQueryToolDTO'
        - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
        - $ref: '#/components/schemas/CreateSmsToolDTO'
        - $ref: '#/components/schemas/CreateTextEditorToolDTO'
        - $ref: '#/components/schemas/CreateTransferCallToolDTO'
        - $ref: '#/components/schemas/CreateSipRequestToolDTO'
        - $ref: '#/components/schemas/CreateVoicemailToolDTO'
      title: OpenAiModelToolsItems
    OpenAiModelKnowledgeBase:
      oneOf:
        - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
      description: These are the options for the knowledge base.
      title: OpenAiModelKnowledgeBase
    OpenAiModelProvider:
      type: string
      enum:
        - openai
      description: This is the provider that will be used for the model.
      title: OpenAiModelProvider
    OpenAiModelModel:
      type: string
      enum:
        - gpt-5.4
        - gpt-5.4-mini
        - gpt-5.4-nano
        - gpt-5.2
        - gpt-5.2-chat-latest
        - gpt-5.1
        - gpt-5.1-chat-latest
        - gpt-5
        - gpt-5-chat-latest
        - gpt-5-mini
        - gpt-5-nano
        - gpt-4.1-2025-04-14
        - gpt-4.1-mini-2025-04-14
        - gpt-4.1-nano-2025-04-14
        - gpt-4.1
        - gpt-4.1-mini
        - gpt-4.1-nano
        - chatgpt-4o-latest
        - o3
        - o3-mini
        - o4-mini
        - o1-mini
        - o1-mini-2024-09-12
        - gpt-4o-realtime-preview-2024-10-01
        - gpt-4o-realtime-preview-2024-12-17
        - gpt-4o-mini-realtime-preview-2024-12-17
        - gpt-realtime-2025-08-28
        - gpt-realtime-mini-2025-12-15
        - gpt-4o-mini-2024-07-18
        - gpt-4o-mini
        - gpt-4o
        - gpt-4o-2024-05-13
        - gpt-4o-2024-08-06
        - gpt-4o-2024-11-20
        - gpt-4-turbo
        - gpt-4-turbo-2024-04-09
        - gpt-4-turbo-preview
        - gpt-4-0125-preview
        - gpt-4-1106-preview
        - gpt-4
        - gpt-4-0613
        - gpt-3.5-turbo
        - gpt-3.5-turbo-0125
        - gpt-3.5-turbo-1106
        - gpt-3.5-turbo-16k
        - gpt-3.5-turbo-0613
        - gpt-4.1-2025-04-14:westus
        - gpt-4.1-2025-04-14:eastus2
        - gpt-4.1-2025-04-14:eastus
        - gpt-4.1-2025-04-14:westus3
        - gpt-4.1-2025-04-14:northcentralus
        - gpt-4.1-2025-04-14:southcentralus
        - gpt-4.1-2025-04-14:westeurope
        - gpt-4.1-2025-04-14:germanywestcentral
        - gpt-4.1-2025-04-14:polandcentral
        - gpt-4.1-2025-04-14:spaincentral
        - gpt-4.1-mini-2025-04-14:westus
        - gpt-4.1-mini-2025-04-14:eastus2
        - gpt-4.1-mini-2025-04-14:eastus
        - gpt-4.1-mini-2025-04-14:westus3
        - gpt-4.1-mini-2025-04-14:northcentralus
        - gpt-4.1-mini-2025-04-14:southcentralus
        - gpt-4.1-mini-2025-04-14:westeurope
        - gpt-4.1-mini-2025-04-14:germanywestcentral
        - gpt-4.1-mini-2025-04-14:polandcentral
        - gpt-4.1-mini-2025-04-14:spaincentral
        - gpt-4.1-nano-2025-04-14:westus
        - gpt-4.1-nano-2025-04-14:eastus2
        - gpt-4.1-nano-2025-04-14:westus3
        - gpt-4.1-nano-2025-04-14:northcentralus
        - gpt-4.1-nano-2025-04-14:southcentralus
        - gpt-4o-2024-11-20:swedencentral
        - gpt-4o-2024-11-20:westus
        - gpt-4o-2024-11-20:eastus2
        - gpt-4o-2024-11-20:eastus
        - gpt-4o-2024-11-20:westus3
        - gpt-4o-2024-11-20:southcentralus
        - gpt-4o-2024-11-20:westeurope
        - gpt-4o-2024-11-20:germanywestcentral
        - gpt-4o-2024-11-20:polandcentral
        - gpt-4o-2024-11-20:spaincentral
        - gpt-4o-2024-08-06:westus
        - gpt-4o-2024-08-06:westus3
        - gpt-4o-2024-08-06:eastus
        - gpt-4o-2024-08-06:eastus2
        - gpt-4o-2024-08-06:northcentralus
        - gpt-4o-2024-08-06:southcentralus
        - gpt-4o-mini-2024-07-18:westus
        - gpt-4o-mini-2024-07-18:westus3
        - gpt-4o-mini-2024-07-18:eastus
        - gpt-4o-mini-2024-07-18:eastus2
        - gpt-4o-mini-2024-07-18:northcentralus
        - gpt-4o-mini-2024-07-18:southcentralus
        - gpt-4o-2024-05-13:eastus2
        - gpt-4o-2024-05-13:eastus
        - gpt-4o-2024-05-13:northcentralus
        - gpt-4o-2024-05-13:southcentralus
        - gpt-4o-2024-05-13:westus3
        - gpt-4o-2024-05-13:westus
        - gpt-4-turbo-2024-04-09:eastus2
        - gpt-4-0125-preview:eastus
        - gpt-4-0125-preview:northcentralus
        - gpt-4-0125-preview:southcentralus
        - gpt-4-1106-preview:australiaeast
        - gpt-4-1106-preview:canadaeast
        - gpt-4-1106-preview:france
        - gpt-4-1106-preview:india
        - gpt-4-1106-preview:norway
        - gpt-4-1106-preview:swedencentral
        - gpt-4-1106-preview:uk
        - gpt-4-1106-preview:westus
        - gpt-4-1106-preview:westus3
        - gpt-4-0613:canadaeast
        - gpt-3.5-turbo-0125:canadaeast
        - gpt-3.5-turbo-0125:northcentralus
        - gpt-3.5-turbo-0125:southcentralus
        - gpt-3.5-turbo-1106:canadaeast
        - gpt-3.5-turbo-1106:westus
      description: >-
        This is the OpenAI model that will be used.


        When using Vapi OpenAI or your own Azure Credentials, you have the
        option to specify the region for the selected model. This shouldn't be
        specified unless you have a specific reason to do so. Vapi will
        automatically find the fastest region that make sense.

        This is helpful when you are required to comply with Data Residency
        rules. Learn more about Azure regions here
        https://azure.microsoft.com/en-us/explore/global-infrastructure/data-residency/.


        @default undefined
      title: OpenAiModelModel
    OpenAiModelFallbackModelsItems:
      type: string
      enum:
        - gpt-5.4
        - gpt-5.4-mini
        - gpt-5.4-nano
        - gpt-5.2
        - gpt-5.2-chat-latest
        - gpt-5.1
        - gpt-5.1-chat-latest
        - gpt-5
        - gpt-5-chat-latest
        - gpt-5-mini
        - gpt-5-nano
        - gpt-4.1-2025-04-14
        - gpt-4.1-mini-2025-04-14
        - gpt-4.1-nano-2025-04-14
        - gpt-4.1
        - gpt-4.1-mini
        - gpt-4.1-nano
        - chatgpt-4o-latest
        - o3
        - o3-mini
        - o4-mini
        - o1-mini
        - o1-mini-2024-09-12
        - gpt-4o-realtime-preview-2024-10-01
        - gpt-4o-realtime-preview-2024-12-17
        - gpt-4o-mini-realtime-preview-2024-12-17
        - gpt-realtime-2025-08-28
        - gpt-realtime-mini-2025-12-15
        - gpt-4o-mini-2024-07-18
        - gpt-4o-mini
        - gpt-4o
        - gpt-4o-2024-05-13
        - gpt-4o-2024-08-06
        - gpt-4o-2024-11-20
        - gpt-4-turbo
        - gpt-4-turbo-2024-04-09
        - gpt-4-turbo-preview
        - gpt-4-0125-preview
        - gpt-4-1106-preview
        - gpt-4
        - gpt-4-0613
        - gpt-3.5-turbo
        - gpt-3.5-turbo-0125
        - gpt-3.5-turbo-1106
        - gpt-3.5-turbo-16k
        - gpt-3.5-turbo-0613
        - gpt-4.1-2025-04-14:westus
        - gpt-4.1-2025-04-14:eastus2
        - gpt-4.1-2025-04-14:eastus
        - gpt-4.1-2025-04-14:westus3
        - gpt-4.1-2025-04-14:northcentralus
        - gpt-4.1-2025-04-14:southcentralus
        - gpt-4.1-2025-04-14:westeurope
        - gpt-4.1-2025-04-14:germanywestcentral
        - gpt-4.1-2025-04-14:polandcentral
        - gpt-4.1-2025-04-14:spaincentral
        - gpt-4.1-mini-2025-04-14:westus
        - gpt-4.1-mini-2025-04-14:eastus2
        - gpt-4.1-mini-2025-04-14:eastus
        - gpt-4.1-mini-2025-04-14:westus3
        - gpt-4.1-mini-2025-04-14:northcentralus
        - gpt-4.1-mini-2025-04-14:southcentralus
        - gpt-4.1-mini-2025-04-14:westeurope
        - gpt-4.1-mini-2025-04-14:germanywestcentral
        - gpt-4.1-mini-2025-04-14:polandcentral
        - gpt-4.1-mini-2025-04-14:spaincentral
        - gpt-4.1-nano-2025-04-14:westus
        - gpt-4.1-nano-2025-04-14:eastus2
        - gpt-4.1-nano-2025-04-14:westus3
        - gpt-4.1-nano-2025-04-14:northcentralus
        - gpt-4.1-nano-2025-04-14:southcentralus
        - gpt-4o-2024-11-20:swedencentral
        - gpt-4o-2024-11-20:westus
        - gpt-4o-2024-11-20:eastus2
        - gpt-4o-2024-11-20:eastus
        - gpt-4o-2024-11-20:westus3
        - gpt-4o-2024-11-20:southcentralus
        - gpt-4o-2024-11-20:westeurope
        - gpt-4o-2024-11-20:germanywestcentral
        - gpt-4o-2024-11-20:polandcentral
        - gpt-4o-2024-11-20:spaincentral
        - gpt-4o-2024-08-06:westus
        - gpt-4o-2024-08-06:westus3
        - gpt-4o-2024-08-06:eastus
        - gpt-4o-2024-08-06:eastus2
        - gpt-4o-2024-08-06:northcentralus
        - gpt-4o-2024-08-06:southcentralus
        - gpt-4o-mini-2024-07-18:westus
        - gpt-4o-mini-2024-07-18:westus3
        - gpt-4o-mini-2024-07-18:eastus
        - gpt-4o-mini-2024-07-18:eastus2
        - gpt-4o-mini-2024-07-18:northcentralus
        - gpt-4o-mini-2024-07-18:southcentralus
        - gpt-4o-2024-05-13:eastus2
        - gpt-4o-2024-05-13:eastus
        - gpt-4o-2024-05-13:northcentralus
        - gpt-4o-2024-05-13:southcentralus
        - gpt-4o-2024-05-13:westus3
        - gpt-4o-2024-05-13:westus
        - gpt-4-turbo-2024-04-09:eastus2
        - gpt-4-0125-preview:eastus
        - gpt-4-0125-preview:northcentralus
        - gpt-4-0125-preview:southcentralus
        - gpt-4-1106-preview:australiaeast
        - gpt-4-1106-preview:canadaeast
        - gpt-4-1106-preview:france
        - gpt-4-1106-preview:india
        - gpt-4-1106-preview:norway
        - gpt-4-1106-preview:swedencentral
        - gpt-4-1106-preview:uk
        - gpt-4-1106-preview:westus
        - gpt-4-1106-preview:westus3
        - gpt-4-0613:canadaeast
        - gpt-3.5-turbo-0125:canadaeast
        - gpt-3.5-turbo-0125:northcentralus
        - gpt-3.5-turbo-0125:southcentralus
        - gpt-3.5-turbo-1106:canadaeast
        - gpt-3.5-turbo-1106:westus
      title: OpenAiModelFallbackModelsItems
    OpenAiModelToolStrictCompatibilityMode:
      type: string
      enum:
        - strip-parameters-with-unsupported-validation
        - strip-unsupported-validation
      description: >-
        Azure OpenAI doesn't support `maxLength` right now
        https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/structured-outputs?tabs=python-secure%2Cdotnet-entra-id&pivots=programming-language-csharp#unsupported-type-specific-keywords.
        Need to strip.


        - `strip-parameters-with-unsupported-validation` will strip parameters
        with unsupported validation.

        - `strip-unsupported-validation` will keep the parameters but strip
        unsupported validation.


        @default `strip-unsupported-validation`
      title: OpenAiModelToolStrictCompatibilityMode
    OpenAiModelPromptCacheRetention:
      type: string
      enum:
        - in_memory
        - 24h
      description: >-
        This controls the prompt cache retention policy for models that support
        extended caching (GPT-4.1, GPT-5 series).


        - `in_memory`: Default behavior, cache retained in GPU memory only

        - `24h`: Extended caching, keeps cached prefixes active for up to 24
        hours by offloading to GPU-local storage


        Only applies to models: gpt-5.4, gpt-5.4-mini, gpt-5.4-nano, gpt-5.2,
        gpt-5.1, gpt-5.1-codex, gpt-5.1-codex-mini, gpt-5.1-chat-latest, gpt-5,
        gpt-5-codex, gpt-4.1


        @default undefined (uses API default which is 'in_memory')
      title: OpenAiModelPromptCacheRetention
    OpenAIModel:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
          description: This is the starting state for the conversation.
        tools:
          type: array
          items:
            $ref: '#/components/schemas/OpenAiModelToolsItems'
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
        toolIds:
          type: array
          items:
            type: string
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
        knowledgeBase:
          $ref: '#/components/schemas/OpenAiModelKnowledgeBase'
          description: These are the options for the knowledge base.
        provider:
          $ref: '#/components/schemas/OpenAiModelProvider'
          description: This is the provider that will be used for the model.
        model:
          $ref: '#/components/schemas/OpenAiModelModel'
          description: >-
            This is the OpenAI model that will be used.


            When using Vapi OpenAI or your own Azure Credentials, you have the
            option to specify the region for the selected model. This shouldn't
            be specified unless you have a specific reason to do so. Vapi will
            automatically find the fastest region that make sense.

            This is helpful when you are required to comply with Data Residency
            rules. Learn more about Azure regions here
            https://azure.microsoft.com/en-us/explore/global-infrastructure/data-residency/.


            @default undefined
        fallbackModels:
          type: array
          items:
            $ref: '#/components/schemas/OpenAiModelFallbackModelsItems'
          description: >-
            These are the fallback models that will be used if the primary model
            fails. This shouldn't be specified unless you have a specific reason
            to do so. Vapi will automatically find the fastest fallbacks that
            make sense.
        toolStrictCompatibilityMode:
          $ref: '#/components/schemas/OpenAiModelToolStrictCompatibilityMode'
          description: >-
            Azure OpenAI doesn't support `maxLength` right now
            https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/structured-outputs?tabs=python-secure%2Cdotnet-entra-id&pivots=programming-language-csharp#unsupported-type-specific-keywords.
            Need to strip.


            - `strip-parameters-with-unsupported-validation` will strip
            parameters with unsupported validation.

            - `strip-unsupported-validation` will keep the parameters but strip
            unsupported validation.


            @default `strip-unsupported-validation`
        promptCacheRetention:
          $ref: '#/components/schemas/OpenAiModelPromptCacheRetention'
          description: >-
            This controls the prompt cache retention policy for models that
            support extended caching (GPT-4.1, GPT-5 series).


            - `in_memory`: Default behavior, cache retained in GPU memory only

            - `24h`: Extended caching, keeps cached prefixes active for up to 24
            hours by offloading to GPU-local storage


            Only applies to models: gpt-5.4, gpt-5.4-mini, gpt-5.4-nano,
            gpt-5.2, gpt-5.1, gpt-5.1-codex, gpt-5.1-codex-mini,
            gpt-5.1-chat-latest, gpt-5, gpt-5-codex, gpt-4.1


            @default undefined (uses API default which is 'in_memory')
        promptCacheKey:
          type: string
          description: >-
            This is the prompt cache key for models that support extended
            caching (GPT-4.1, GPT-5 series).


            Providing a cache key allows you to share cached prefixes across
            requests.


            @default undefined
        temperature:
          type: number
          format: double
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
        maxTokens:
          type: number
          format: double
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          format: double
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
      required:
        - provider
        - model
      title: OpenAIModel
    OpenRouterModelToolsItems:
      oneOf:
        - $ref: '#/components/schemas/CreateApiRequestToolDTO'
        - $ref: '#/components/schemas/CreateBashToolDTO'
        - $ref: '#/components/schemas/CreateCodeToolDTO'
        - $ref: '#/components/schemas/CreateComputerToolDTO'
        - $ref: '#/components/schemas/CreateDtmfToolDTO'
        - $ref: '#/components/schemas/CreateEndCallToolDTO'
        - $ref: '#/components/schemas/CreateFunctionToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
        - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
        - $ref: '#/components/schemas/CreateHandoffToolDTO'
        - $ref: '#/components/schemas/CreateMcpToolDTO'
        - $ref: '#/components/schemas/CreateQueryToolDTO'
        - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
        - $ref: '#/components/schemas/CreateSmsToolDTO'
        - $ref: '#/components/schemas/CreateTextEditorToolDTO'
        - $ref: '#/components/schemas/CreateTransferCallToolDTO'
        - $ref: '#/components/schemas/CreateSipRequestToolDTO'
        - $ref: '#/components/schemas/CreateVoicemailToolDTO'
      title: OpenRouterModelToolsItems
    OpenRouterModelKnowledgeBase:
      oneOf:
        - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
      description: These are the options for the knowledge base.
      title: OpenRouterModelKnowledgeBase
    OpenRouterModelProvider:
      type: string
      enum:
        - openrouter
      title: OpenRouterModelProvider
    OpenRouterModel:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
          description: This is the starting state for the conversation.
        tools:
          type: array
          items:
            $ref: '#/components/schemas/OpenRouterModelToolsItems'
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
        toolIds:
          type: array
          items:
            type: string
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
        knowledgeBase:
          $ref: '#/components/schemas/OpenRouterModelKnowledgeBase'
          description: These are the options for the knowledge base.
        provider:
          $ref: '#/components/schemas/OpenRouterModelProvider'
        model:
          type: string
          description: >-
            This is the name of the model. Ex.
            cognitivecomputations/dolphin-mixtral-8x7b
        temperature:
          type: number
          format: double
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
        maxTokens:
          type: number
          format: double
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          format: double
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
      required:
        - provider
        - model
      title: OpenRouterModel
    PerplexityAiModelToolsItems:
      oneOf:
        - $ref: '#/components/schemas/CreateApiRequestToolDTO'
        - $ref: '#/components/schemas/CreateBashToolDTO'
        - $ref: '#/components/schemas/CreateCodeToolDTO'
        - $ref: '#/components/schemas/CreateComputerToolDTO'
        - $ref: '#/components/schemas/CreateDtmfToolDTO'
        - $ref: '#/components/schemas/CreateEndCallToolDTO'
        - $ref: '#/components/schemas/CreateFunctionToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
        - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
        - $ref: '#/components/schemas/CreateHandoffToolDTO'
        - $ref: '#/components/schemas/CreateMcpToolDTO'
        - $ref: '#/components/schemas/CreateQueryToolDTO'
        - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
        - $ref: '#/components/schemas/CreateSmsToolDTO'
        - $ref: '#/components/schemas/CreateTextEditorToolDTO'
        - $ref: '#/components/schemas/CreateTransferCallToolDTO'
        - $ref: '#/components/schemas/CreateSipRequestToolDTO'
        - $ref: '#/components/schemas/CreateVoicemailToolDTO'
      title: PerplexityAiModelToolsItems
    PerplexityAiModelKnowledgeBase:
      oneOf:
        - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
      description: These are the options for the knowledge base.
      title: PerplexityAiModelKnowledgeBase
    PerplexityAiModelProvider:
      type: string
      enum:
        - perplexity-ai
      title: PerplexityAiModelProvider
    PerplexityAIModel:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
          description: This is the starting state for the conversation.
        tools:
          type: array
          items:
            $ref: '#/components/schemas/PerplexityAiModelToolsItems'
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
        toolIds:
          type: array
          items:
            type: string
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
        knowledgeBase:
          $ref: '#/components/schemas/PerplexityAiModelKnowledgeBase'
          description: These are the options for the knowledge base.
        provider:
          $ref: '#/components/schemas/PerplexityAiModelProvider'
        model:
          type: string
          description: >-
            This is the name of the model. Ex.
            cognitivecomputations/dolphin-mixtral-8x7b
        temperature:
          type: number
          format: double
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
        maxTokens:
          type: number
          format: double
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          format: double
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
      required:
        - provider
        - model
      title: PerplexityAIModel
    TogetherAiModelToolsItems:
      oneOf:
        - $ref: '#/components/schemas/CreateApiRequestToolDTO'
        - $ref: '#/components/schemas/CreateBashToolDTO'
        - $ref: '#/components/schemas/CreateCodeToolDTO'
        - $ref: '#/components/schemas/CreateComputerToolDTO'
        - $ref: '#/components/schemas/CreateDtmfToolDTO'
        - $ref: '#/components/schemas/CreateEndCallToolDTO'
        - $ref: '#/components/schemas/CreateFunctionToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
        - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
        - $ref: '#/components/schemas/CreateHandoffToolDTO'
        - $ref: '#/components/schemas/CreateMcpToolDTO'
        - $ref: '#/components/schemas/CreateQueryToolDTO'
        - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
        - $ref: '#/components/schemas/CreateSmsToolDTO'
        - $ref: '#/components/schemas/CreateTextEditorToolDTO'
        - $ref: '#/components/schemas/CreateTransferCallToolDTO'
        - $ref: '#/components/schemas/CreateSipRequestToolDTO'
        - $ref: '#/components/schemas/CreateVoicemailToolDTO'
      title: TogetherAiModelToolsItems
    TogetherAiModelKnowledgeBase:
      oneOf:
        - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
      description: These are the options for the knowledge base.
      title: TogetherAiModelKnowledgeBase
    TogetherAiModelProvider:
      type: string
      enum:
        - together-ai
      title: TogetherAiModelProvider
    TogetherAIModel:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
          description: This is the starting state for the conversation.
        tools:
          type: array
          items:
            $ref: '#/components/schemas/TogetherAiModelToolsItems'
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
        toolIds:
          type: array
          items:
            type: string
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
        knowledgeBase:
          $ref: '#/components/schemas/TogetherAiModelKnowledgeBase'
          description: These are the options for the knowledge base.
        provider:
          $ref: '#/components/schemas/TogetherAiModelProvider'
        model:
          type: string
          description: >-
            This is the name of the model. Ex.
            cognitivecomputations/dolphin-mixtral-8x7b
        temperature:
          type: number
          format: double
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
        maxTokens:
          type: number
          format: double
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          format: double
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
      required:
        - provider
        - model
      title: TogetherAIModel
    XaiModelToolsItems:
      oneOf:
        - $ref: '#/components/schemas/CreateApiRequestToolDTO'
        - $ref: '#/components/schemas/CreateBashToolDTO'
        - $ref: '#/components/schemas/CreateCodeToolDTO'
        - $ref: '#/components/schemas/CreateComputerToolDTO'
        - $ref: '#/components/schemas/CreateDtmfToolDTO'
        - $ref: '#/components/schemas/CreateEndCallToolDTO'
        - $ref: '#/components/schemas/CreateFunctionToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
        - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
        - $ref: '#/components/schemas/CreateHandoffToolDTO'
        - $ref: '#/components/schemas/CreateMcpToolDTO'
        - $ref: '#/components/schemas/CreateQueryToolDTO'
        - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
        - $ref: '#/components/schemas/CreateSmsToolDTO'
        - $ref: '#/components/schemas/CreateTextEditorToolDTO'
        - $ref: '#/components/schemas/CreateTransferCallToolDTO'
        - $ref: '#/components/schemas/CreateSipRequestToolDTO'
        - $ref: '#/components/schemas/CreateVoicemailToolDTO'
      title: XaiModelToolsItems
    XaiModelKnowledgeBase:
      oneOf:
        - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
      description: These are the options for the knowledge base.
      title: XaiModelKnowledgeBase
    XaiModelModel:
      type: string
      enum:
        - grok-beta
        - grok-2
        - grok-3
        - grok-4-fast-reasoning
        - grok-4-fast-non-reasoning
      description: >-
        This is the name of the model. Ex.
        cognitivecomputations/dolphin-mixtral-8x7b
      title: XaiModelModel
    XaiModelProvider:
      type: string
      enum:
        - xai
      title: XaiModelProvider
    XaiModel:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
          description: This is the starting state for the conversation.
        tools:
          type: array
          items:
            $ref: '#/components/schemas/XaiModelToolsItems'
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
        toolIds:
          type: array
          items:
            type: string
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
        knowledgeBase:
          $ref: '#/components/schemas/XaiModelKnowledgeBase'
          description: These are the options for the knowledge base.
        model:
          $ref: '#/components/schemas/XaiModelModel'
          description: >-
            This is the name of the model. Ex.
            cognitivecomputations/dolphin-mixtral-8x7b
        provider:
          $ref: '#/components/schemas/XaiModelProvider'
        temperature:
          type: number
          format: double
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
        maxTokens:
          type: number
          format: double
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          format: double
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
      required:
        - model
        - provider
      title: XaiModel
    AssistantOverridesModel:
      oneOf:
        - $ref: '#/components/schemas/AnthropicModel'
        - $ref: '#/components/schemas/AnthropicBedrockModel'
        - $ref: '#/components/schemas/AnyscaleModel'
        - $ref: '#/components/schemas/CerebrasModel'
        - $ref: '#/components/schemas/CustomLLMModel'
        - $ref: '#/components/schemas/DeepInfraModel'
        - $ref: '#/components/schemas/DeepSeekModel'
        - $ref: '#/components/schemas/GoogleModel'
        - $ref: '#/components/schemas/GroqModel'
        - $ref: '#/components/schemas/InflectionAIModel'
        - $ref: '#/components/schemas/MinimaxLLMModel'
        - $ref: '#/components/schemas/OpenAIModel'
        - $ref: '#/components/schemas/OpenRouterModel'
        - $ref: '#/components/schemas/PerplexityAIModel'
        - $ref: '#/components/schemas/TogetherAIModel'
        - $ref: '#/components/schemas/XaiModel'
      description: These are the options for the assistant's LLM.
      title: AssistantOverridesModel
    AzureVoiceProvider:
      type: string
      enum:
        - azure
      description: This is the voice provider that will be used.
      title: AzureVoiceProvider
    AzureVoiceId0:
      type: string
      enum:
        - andrew
        - brian
        - emma
      title: AzureVoiceId0
    AzureVoiceId:
      oneOf:
        - $ref: '#/components/schemas/AzureVoiceId0'
        - type: string
      description: This is the provider-specific ID that will be used.
      title: AzureVoiceId
    ChunkPlanPunctuationBoundaries:
      type: string
      enum:
        - 。
        - ，
        - .
        - '!'
        - '?'
        - ;
        - )
        - ،
        - ۔
        - ।
        - ॥
        - '|'
        - '||'
        - ','
        - ':'
      description: >-
        These are the punctuations that are considered valid boundaries for a
        chunk to be created.


        Usage:

        - To increase quality, constrain to fewer boundaries.

        - To decrease latency, enable all.


        Default is automatically set to balance the trade-off between quality
        and latency based on the provider.
      title: ChunkPlanPunctuationBoundaries
    ExactReplacementType:
      type: string
      enum:
        - exact
      description: >-
        This is the exact replacement type. You can use this to replace a
        specific word or phrase with a different word or phrase.


        Usage:

        - Replace "hello" with "hi": { type: 'exact', key: 'hello', value: 'hi'
        }

        - Replace "good morning" with "good day": { type: 'exact', key: 'good
        morning', value: 'good day' }

        - Replace a specific name: { type: 'exact', key: 'John Doe', value:
        'Jane Smith' }

        - Replace an acronym: { type: 'exact', key: 'AI', value: 'Artificial
        Intelligence' }

        - Replace a company name with its phonetic pronunciation: { type:
        'exact', key: 'Vapi', value: 'Vappy' }
      title: ExactReplacementType
    ExactReplacement:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/ExactReplacementType'
          description: >-
            This is the exact replacement type. You can use this to replace a
            specific word or phrase with a different word or phrase.


            Usage:

            - Replace "hello" with "hi": { type: 'exact', key: 'hello', value:
            'hi' }

            - Replace "good morning" with "good day": { type: 'exact', key:
            'good morning', value: 'good day' }

            - Replace a specific name: { type: 'exact', key: 'John Doe', value:
            'Jane Smith' }

            - Replace an acronym: { type: 'exact', key: 'AI', value: 'Artificial
            Intelligence' }

            - Replace a company name with its phonetic pronunciation: { type:
            'exact', key: 'Vapi', value: 'Vappy' }
        replaceAllEnabled:
          type: boolean
          default: false
          description: >-
            This option let's you control whether to replace all instances of
            the key or only the first one. By default, it only replaces the
            first instance.

            Examples:

            - For { type: 'exact', key: 'hello', value: 'hi', replaceAllEnabled:
            false }. Before: "hello world, hello universe" | After: "hi world,
            hello universe"

            - For { type: 'exact', key: 'hello', value: 'hi', replaceAllEnabled:
            true }. Before: "hello world, hello universe" | After: "hi world, hi
            universe"

            @default false
        key:
          type: string
          description: This is the key to replace.
        value:
          type: string
          description: This is the value that will replace the match.
      required:
        - type
        - key
        - value
      title: ExactReplacement
    RegexReplacementType:
      type: string
      enum:
        - regex
      description: >-
        This is the regex replacement type. You can use this to replace a word
        or phrase that matches a pattern.


        Usage:

        - Replace all numbers with "some number": { type: 'regex', regex:
        '\\d+', value: 'some number' }

        - Replace email addresses with "[EMAIL]": { type: 'regex', regex:
        '\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b', value:
        '[EMAIL]' }

        - Replace phone numbers with a formatted version: { type: 'regex',
        regex: '(\\d{3})(\\d{3})(\\d{4})', value: '($1) $2-$3' }

        - Replace all instances of "color" or "colour" with "hue": { type:
        'regex', regex: 'colou?r', value: 'hue' }

        - Capitalize the first letter of every sentence: { type: 'regex', regex:
        '(?<=\\. |^)[a-z]', value: (match) => match.toUpperCase() }
      title: RegexReplacementType
    RegexOptionType:
      type: string
      enum:
        - ignore-case
        - whole-word
        - multi-line
      description: |-
        This is the type of the regex option. Options are:
        - `ignore-case`: Ignores the case of the text being matched. Add
        - `whole-word`: Matches whole words only.
        - `multi-line`: Matches across multiple lines.
      title: RegexOptionType
    RegexOption:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/RegexOptionType'
          description: |-
            This is the type of the regex option. Options are:
            - `ignore-case`: Ignores the case of the text being matched. Add
            - `whole-word`: Matches whole words only.
            - `multi-line`: Matches across multiple lines.
        enabled:
          type: boolean
          description: |-
            This is whether to enable the option.

            @default false
      required:
        - type
        - enabled
      title: RegexOption
    RegexReplacement:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/RegexReplacementType'
          description: >-
            This is the regex replacement type. You can use this to replace a
            word or phrase that matches a pattern.


            Usage:

            - Replace all numbers with "some number": { type: 'regex', regex:
            '\\d+', value: 'some number' }

            - Replace email addresses with "[EMAIL]": { type: 'regex', regex:
            '\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b', value:
            '[EMAIL]' }

            - Replace phone numbers with a formatted version: { type: 'regex',
            regex: '(\\d{3})(\\d{3})(\\d{4})', value: '($1) $2-$3' }

            - Replace all instances of "color" or "colour" with "hue": { type:
            'regex', regex: 'colou?r', value: 'hue' }

            - Capitalize the first letter of every sentence: { type: 'regex',
            regex: '(?<=\\. |^)[a-z]', value: (match) => match.toUpperCase() }
        regex:
          type: string
          description: >-
            This is the regex pattern to replace.


            Note:

            - This works by using the `string.replace` method in Node.JS. Eg.
            `"hello there".replace(/hello/g, "hi")` will return `"hi there"`.


            Hot tip:

            - In JavaScript, escape `\` when sending the regex pattern. Eg.
            `"hello\sthere"` will be sent over the wire as `"hellosthere"`. Send
            `"hello\\sthere"` instead.
        options:
          type: array
          items:
            $ref: '#/components/schemas/RegexOption'
          description: >-
            These are the options for the regex replacement. Defaults to all
            disabled.


            @default []
        value:
          type: string
          description: This is the value that will replace the match.
      required:
        - type
        - regex
        - value
      title: RegexReplacement
    FormatPlanReplacementsItems:
      oneOf:
        - $ref: '#/components/schemas/ExactReplacement'
        - $ref: '#/components/schemas/RegexReplacement'
      title: FormatPlanReplacementsItems
    FormatPlanFormattersEnabled:
      type: string
      enum:
        - markdown
        - asterisk
        - quote
        - dash
        - newline
        - colon
        - acronym
        - dollarAmount
        - email
        - date
        - time
        - distance
        - unit
        - percentage
        - phoneNumber
        - number
        - stripAsterisk
      description: >-
        List of formatters to apply. If not provided, all default formatters
        will be applied.

        If provided, only the specified formatters will be applied.

        Note: Some essential formatters like angle bracket removal will always
        be applied.

        @default undefined
      title: FormatPlanFormattersEnabled
    FormatPlan:
      type: object
      properties:
        enabled:
          type: boolean
          description: >-
            This determines whether the chunk is formatted before being sent to
            the voice provider. This helps with enunciation. This includes phone
            numbers, emails and addresses. Default `true`.


            Usage:

            - To rely on the voice provider's formatting logic, set this to
            `false`.


            If `voice.chunkPlan.enabled` is `false`, this is automatically
            `false` since there's no chunk to format.


            @default true
        numberToDigitsCutoff:
          type: number
          format: double
          description: >-
            This is the cutoff after which a number is converted to individual
            digits instead of being spoken as words.


            Example:

            - If cutoff 2025, "12345" is converted to "1 2 3 4 5" while "1200"
            is converted to "twelve hundred".


            Usage:

            - If your use case doesn't involve IDs like zip codes, set this to a
            high value.

            - If your use case involves IDs that are shorter than 5 digits, set
            this to a lower value.


            @default 2025
        replacements:
          type: array
          items:
            $ref: '#/components/schemas/FormatPlanReplacementsItems'
          description: >-
            These are the custom replacements you can make to the chunk before
            it is sent to the voice provider.


            Usage:

            - To replace a specific word or phrase with a different word or
            phrase, use the `ExactReplacement` type. Eg. `{ type: 'exact', key:
            'hello', value: 'hi' }`

            - To replace a word or phrase that matches a pattern, use the
            `RegexReplacement` type. Eg. `{ type: 'regex', regex:
            '\\b[a-zA-Z]{5}\\b', value: 'hi' }`


            @default []
        formattersEnabled:
          $ref: '#/components/schemas/FormatPlanFormattersEnabled'
          description: >-
            List of formatters to apply. If not provided, all default formatters
            will be applied.

            If provided, only the specified formatters will be applied.

            Note: Some essential formatters like angle bracket removal will
            always be applied.

            @default undefined
      title: FormatPlan
    ChunkPlan:
      type: object
      properties:
        enabled:
          type: boolean
          description: >-
            This determines whether the model output is chunked before being
            sent to the voice provider. Default `true`.


            Usage:

            - To rely on the voice provider's audio generation logic, set this
            to `false`.

            - If seeing issues with quality, set this to `true`.


            If disabled, Vapi-provided audio control tokens like <flush /> will
            not work.


            @default true
        minCharacters:
          type: number
          format: double
          description: |-
            This is the minimum number of characters in a chunk.

            Usage:
            - To increase quality, set this to a higher value.
            - To decrease latency, set this to a lower value.

            @default 30
        punctuationBoundaries:
          $ref: '#/components/schemas/ChunkPlanPunctuationBoundaries'
          description: >-
            These are the punctuations that are considered valid boundaries for
            a chunk to be created.


            Usage:

            - To increase quality, constrain to fewer boundaries.

            - To decrease latency, enable all.


            Default is automatically set to balance the trade-off between
            quality and latency based on the provider.
        formatPlan:
          $ref: '#/components/schemas/FormatPlan'
          description: >-
            This is the plan for formatting the chunk before it is sent to the
            voice provider.
      title: ChunkPlan
    FallbackAzureVoiceProvider:
      type: string
      enum:
        - azure
      description: This is the voice provider that will be used.
      title: FallbackAzureVoiceProvider
    FallbackAzureVoiceVoiceId0:
      type: string
      enum:
        - andrew
        - brian
        - emma
      title: FallbackAzureVoiceVoiceId0
    FallbackAzureVoiceVoiceId:
      oneOf:
        - $ref: '#/components/schemas/FallbackAzureVoiceVoiceId0'
        - type: string
      description: This is the provider-specific ID that will be used.
      title: FallbackAzureVoiceVoiceId
    FallbackAzureVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/FallbackAzureVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          $ref: '#/components/schemas/FallbackAzureVoiceVoiceId'
          description: This is the provider-specific ID that will be used.
        speed:
          type: number
          format: double
          description: This is the speed multiplier that will be used.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
      required:
        - provider
        - voiceId
      title: FallbackAzureVoice
    FallbackCartesiaVoiceProvider:
      type: string
      enum:
        - cartesia
      description: This is the voice provider that will be used.
      title: FallbackCartesiaVoiceProvider
    FallbackCartesiaVoiceModel:
      type: string
      enum:
        - sonic-3
        - sonic-3-2026-01-12
        - sonic-3-2025-10-27
        - sonic-2
        - sonic-2-2025-06-11
        - sonic-english
        - sonic-multilingual
        - sonic-preview
        - sonic
      description: >-
        This is the model that will be used. This is optional and will default
        to the correct model for the voiceId.
      title: FallbackCartesiaVoiceModel
    FallbackCartesiaVoiceLanguage:
      type: string
      enum:
        - ar
        - bg
        - bn
        - cs
        - da
        - de
        - el
        - en
        - es
        - fi
        - fr
        - gu
        - he
        - hi
        - hr
        - hu
        - id
        - it
        - ja
        - ka
        - kn
        - ko
        - ml
        - mr
        - ms
        - nl
        - 'no'
        - pa
        - pl
        - pt
        - ro
        - ru
        - sk
        - sv
        - ta
        - te
        - th
        - tl
        - tr
        - uk
        - vi
        - zh
      description: >-
        This is the language that will be used. This is optional and will
        default to the correct language for the voiceId.
      title: FallbackCartesiaVoiceLanguage
    CartesiaExperimentalControlsSpeed0:
      type: string
      enum:
        - slowest
        - slow
        - normal
        - fast
        - fastest
      title: CartesiaExperimentalControlsSpeed0
    CartesiaExperimentalControlsSpeed:
      oneOf:
        - $ref: '#/components/schemas/CartesiaExperimentalControlsSpeed0'
        - type: number
          format: double
      title: CartesiaExperimentalControlsSpeed
    CartesiaExperimentalControlsEmotion:
      type: string
      enum:
        - anger:lowest
        - anger:low
        - anger:high
        - anger:highest
        - positivity:lowest
        - positivity:low
        - positivity:high
        - positivity:highest
        - surprise:lowest
        - surprise:low
        - surprise:high
        - surprise:highest
        - sadness:lowest
        - sadness:low
        - sadness:high
        - sadness:highest
        - curiosity:lowest
        - curiosity:low
        - curiosity:high
        - curiosity:highest
      title: CartesiaExperimentalControlsEmotion
    CartesiaExperimentalControls:
      type: object
      properties:
        speed:
          $ref: '#/components/schemas/CartesiaExperimentalControlsSpeed'
        emotion:
          $ref: '#/components/schemas/CartesiaExperimentalControlsEmotion'
      title: CartesiaExperimentalControls
    CartesiaGenerationConfigExperimental:
      type: object
      properties:
        accentLocalization:
          type: integer
          default: 0
          description: >-
            Toggle accent localization for sonic-3: 0 (disabled, default) or 1
            (enabled). When enabled, the voice adapts to match the transcript
            language accent while preserving vocal characteristics.
      title: CartesiaGenerationConfigExperimental
    CartesiaGenerationConfig:
      type: object
      properties:
        speed:
          type: number
          format: double
          default: 1
          description: >-
            Fine-grained speed control for sonic-3. Only available for sonic-3
            model.
        volume:
          type: number
          format: double
          default: 1
          description: >-
            Fine-grained volume control for sonic-3. Only available for sonic-3
            model.
        experimental:
          $ref: '#/components/schemas/CartesiaGenerationConfigExperimental'
          description: >-
            Experimental model controls for sonic-3. These are subject to
            breaking changes.
      title: CartesiaGenerationConfig
    FallbackCartesiaVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/FallbackCartesiaVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          type: string
          description: The ID of the particular voice you want to use.
        model:
          $ref: '#/components/schemas/FallbackCartesiaVoiceModel'
          description: >-
            This is the model that will be used. This is optional and will
            default to the correct model for the voiceId.
        language:
          $ref: '#/components/schemas/FallbackCartesiaVoiceLanguage'
          description: >-
            This is the language that will be used. This is optional and will
            default to the correct language for the voiceId.
        experimentalControls:
          $ref: '#/components/schemas/CartesiaExperimentalControls'
          description: Experimental controls for Cartesia voice generation
        generationConfig:
          $ref: '#/components/schemas/CartesiaGenerationConfig'
          description: >-
            Generation config for fine-grained control of sonic-3 voice output
            (speed, volume, and experimental controls). Only available for
            sonic-3 model.
        pronunciationDictId:
          type: string
          description: >-
            Pronunciation dictionary ID for sonic-3. Allows custom
            pronunciations for specific words. Only available for sonic-3 model.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
      required:
        - provider
        - voiceId
      title: FallbackCartesiaVoice
    FallbackHumeVoiceProvider:
      type: string
      enum:
        - hume
      description: This is the voice provider that will be used.
      title: FallbackHumeVoiceProvider
    FallbackHumeVoiceModel:
      type: string
      enum:
        - octave
        - octave2
      description: This is the model that will be used.
      title: FallbackHumeVoiceModel
    FallbackHumeVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/FallbackHumeVoiceProvider'
          description: This is the voice provider that will be used.
        model:
          $ref: '#/components/schemas/FallbackHumeVoiceModel'
          description: This is the model that will be used.
        voiceId:
          type: string
          description: The ID of the particular voice you want to use.
        isCustomHumeVoice:
          type: boolean
          description: >-
            Indicates whether the chosen voice is a preset Hume AI voice or a
            custom voice.
        description:
          type: string
          description: >-
            Natural language instructions describing how the synthesized speech
            should sound, including but not limited to tone, intonation, pacing,
            and accent (e.g., 'a soft, gentle voice with a strong British
            accent').


            If a Voice is specified in the request, this description serves as
            acting instructions.

            If no Voice is specified, a new voice is generated based on this
            description.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
      required:
        - provider
        - voiceId
      title: FallbackHumeVoice
    FallbackCustomVoiceProvider:
      type: string
      enum:
        - custom-voice
      description: >-
        This is the voice provider that will be used. Use `custom-voice` for
        providers that are not natively supported.
      title: FallbackCustomVoiceProvider
    FallbackCustomVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/FallbackCustomVoiceProvider'
          description: >-
            This is the voice provider that will be used. Use `custom-voice` for
            providers that are not natively supported.
        voiceId:
          type: string
          description: >-
            This is the provider-specific ID that will be used. This is passed
            in the voice request payload to identify the voice to use.
        server:
          $ref: '#/components/schemas/Server'
          description: >-
            This is where the voice request will be sent.


            Request Example:


            POST https://{server.url}

            Content-Type: application/json


            {
              "message": {
                "type": "voice-request",
                "text": "Hello, world!",
                "sampleRate": 24000,
                ...other metadata about the call...
              }
            }


            Response Expected: 1-channel 16-bit raw PCM audio at the sample rate
            specified in the request. Here is how the response will be piped to
            the transport:

            ```

            response.on('data', (chunk: Buffer) => {
              outputStream.write(chunk);
            });

            ```
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
      required:
        - provider
        - server
      title: FallbackCustomVoice
    FallbackDeepgramVoiceProvider:
      type: string
      enum:
        - deepgram
      description: This is the voice provider that will be used.
      title: FallbackDeepgramVoiceProvider
    FallbackDeepgramVoiceVoiceId:
      type: string
      enum:
        - asteria
        - luna
        - stella
        - athena
        - hera
        - orion
        - arcas
        - perseus
        - angus
        - orpheus
        - helios
        - zeus
        - thalia
        - andromeda
        - helena
        - apollo
        - arcas
        - aries
        - amalthea
        - asteria
        - athena
        - atlas
        - aurora
        - callista
        - cora
        - cordelia
        - delia
        - draco
        - electra
        - harmonia
        - hera
        - hermes
        - hyperion
        - iris
        - janus
        - juno
        - jupiter
        - luna
        - mars
        - minerva
        - neptune
        - odysseus
        - ophelia
        - orion
        - orpheus
        - pandora
        - phoebe
        - pluto
        - saturn
        - selene
        - theia
        - vesta
        - zeus
        - celeste
        - estrella
        - nestor
        - sirio
        - carina
        - alvaro
        - diana
        - aquila
        - selena
        - javier
      description: This is the provider-specific ID that will be used.
      title: FallbackDeepgramVoiceVoiceId
    FallbackDeepgramVoiceModel:
      type: string
      enum:
        - aura
        - aura-2
      description: >-
        This is the model that will be used. Defaults to 'aura-2' when not
        specified.
      title: FallbackDeepgramVoiceModel
    FallbackDeepgramVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/FallbackDeepgramVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          $ref: '#/components/schemas/FallbackDeepgramVoiceVoiceId'
          description: This is the provider-specific ID that will be used.
        model:
          $ref: '#/components/schemas/FallbackDeepgramVoiceModel'
          description: >-
            This is the model that will be used. Defaults to 'aura-2' when not
            specified.
        mipOptOut:
          type: boolean
          default: false
          description: >-
            If set to true, this will add mip_opt_out=true as a query parameter
            of all API requests. See
            https://developers.deepgram.com/docs/the-deepgram-model-improvement-partnership-program#want-to-opt-out


            This will only be used if you are using your own Deepgram API key.


            @default false
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
      required:
        - provider
        - voiceId
      title: FallbackDeepgramVoice
    FallbackElevenLabsVoiceProvider:
      type: string
      enum:
        - 11labs
      description: This is the voice provider that will be used.
      title: FallbackElevenLabsVoiceProvider
    FallbackElevenLabsVoiceVoiceId0:
      type: string
      enum:
        - burt
        - marissa
        - andrea
        - sarah
        - phillip
        - steve
        - joseph
        - myra
        - paula
        - ryan
        - drew
        - paul
        - mrb
        - matilda
        - mark
      title: FallbackElevenLabsVoiceVoiceId0
    FallbackElevenLabsVoiceVoiceId:
      oneOf:
        - $ref: '#/components/schemas/FallbackElevenLabsVoiceVoiceId0'
        - type: string
      description: >-
        This is the provider-specific ID that will be used. Ensure the Voice is
        present in your 11Labs Voice Library.
      title: FallbackElevenLabsVoiceVoiceId
    FallbackElevenLabsVoiceModel:
      type: string
      enum:
        - eleven_multilingual_v2
        - eleven_turbo_v2
        - eleven_turbo_v2_5
        - eleven_flash_v2
        - eleven_flash_v2_5
        - eleven_monolingual_v1
        - eleven_v3
      description: >-
        This is the model that will be used. Defaults to 'eleven_turbo_v2' if
        not specified.
      title: FallbackElevenLabsVoiceModel
    ElevenLabsPronunciationDictionaryLocator:
      type: object
      properties:
        pronunciationDictionaryId:
          type: string
          description: This is the ID of the pronunciation dictionary to use.
        versionId:
          type: string
          description: This is the version ID of the pronunciation dictionary to use.
      required:
        - pronunciationDictionaryId
        - versionId
      title: ElevenLabsPronunciationDictionaryLocator
    FallbackElevenLabsVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/FallbackElevenLabsVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          $ref: '#/components/schemas/FallbackElevenLabsVoiceVoiceId'
          description: >-
            This is the provider-specific ID that will be used. Ensure the Voice
            is present in your 11Labs Voice Library.
        stability:
          type: number
          format: double
          description: Defines the stability for voice settings.
        similarityBoost:
          type: number
          format: double
          description: Defines the similarity boost for voice settings.
        style:
          type: number
          format: double
          description: Defines the style for voice settings.
        useSpeakerBoost:
          type: boolean
          description: Defines the use speaker boost for voice settings.
        speed:
          type: number
          format: double
          description: Defines the speed for voice settings.
        optimizeStreamingLatency:
          type: number
          format: double
          description: >-
            Defines the optimize streaming latency for voice settings. Defaults
            to 3.
        enableSsmlParsing:
          type: boolean
          description: >-
            This enables the use of
            https://elevenlabs.io/docs/speech-synthesis/prompting#pronunciation.
            Defaults to false to save latency.


            @default false
        autoMode:
          type: boolean
          description: Defines the auto mode for voice settings. Defaults to false.
        model:
          $ref: '#/components/schemas/FallbackElevenLabsVoiceModel'
          description: >-
            This is the model that will be used. Defaults to 'eleven_turbo_v2'
            if not specified.
        language:
          type: string
          description: >-
            This is the language (ISO 639-1) that is enforced for the model.
            Currently only Turbo v2.5 supports language enforcement. For other
            models, an error will be returned if language code is provided.
        pronunciationDictionaryLocators:
          type: array
          items:
            $ref: '#/components/schemas/ElevenLabsPronunciationDictionaryLocator'
          description: This is the pronunciation dictionary locators to use.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
      required:
        - provider
        - voiceId
      title: FallbackElevenLabsVoice
    FallbackVapiVoiceProvider:
      type: string
      enum:
        - vapi
      description: This is the voice provider that will be used.
      title: FallbackVapiVoiceProvider
    FallbackVapiVoiceVoiceId:
      type: string
      enum:
        - Clara
        - Godfrey
        - Layla
        - Sid
        - Gustavo
        - Elliot
        - Kylie
        - Rohan
        - Lily
        - Savannah
        - Hana
        - Neha
        - Cole
        - Harry
        - Paige
        - Spencer
        - Nico
        - Kai
        - Emma
        - Sagar
        - Neil
        - Naina
        - Leah
        - Tara
        - Jess
        - Leo
        - Dan
        - Mia
        - Zac
        - Zoe
      description: The voices provided by Vapi
      title: FallbackVapiVoiceVoiceId
    VapiPronunciationDictionaryLocator:
      type: object
      properties:
        pronunciationDictId:
          type: string
          description: The pronunciation dictionary ID
        versionId:
          type: string
          description: Version ID (only required for ElevenLabs, ignored for Cartesia)
      required:
        - pronunciationDictId
      title: VapiPronunciationDictionaryLocator
    FallbackVapiVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/FallbackVapiVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          $ref: '#/components/schemas/FallbackVapiVoiceVoiceId'
          description: The voices provided by Vapi
        speed:
          type: number
          format: double
          default: 1
          description: |-
            This is the speed multiplier that will be used.

            @default 1
        pronunciationDictionary:
          type: array
          items:
            $ref: '#/components/schemas/VapiPronunciationDictionaryLocator'
          description: >-
            List of pronunciation dictionary locators for custom word
            pronunciations.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
      required:
        - provider
        - voiceId
      title: FallbackVapiVoice
    FallbackLmntVoiceProvider:
      type: string
      enum:
        - lmnt
      description: This is the voice provider that will be used.
      title: FallbackLmntVoiceProvider
    FallbackLmntVoiceVoiceId0:
      type: string
      enum:
        - amy
        - ansel
        - autumn
        - ava
        - brandon
        - caleb
        - cassian
        - chloe
        - dalton
        - daniel
        - dustin
        - elowen
        - evander
        - huxley
        - james
        - juniper
        - kennedy
        - lauren
        - leah
        - lily
        - lucas
        - magnus
        - miles
        - morgan
        - natalie
        - nathan
        - noah
        - nyssa
        - oliver
        - paige
        - ryan
        - sadie
        - sophie
        - stella
        - terrence
        - tyler
        - vesper
        - violet
        - warrick
        - zain
        - zeke
        - zoe
      title: FallbackLmntVoiceVoiceId0
    FallbackLmntVoiceVoiceId:
      oneOf:
        - $ref: '#/components/schemas/FallbackLmntVoiceVoiceId0'
        - type: string
      description: This is the provider-specific ID that will be used.
      title: FallbackLmntVoiceVoiceId
    FallbackLmntVoiceLanguage:
      type: string
      enum:
        - aa
        - ab
        - ae
        - af
        - ak
        - am
        - an
        - ar
        - as
        - av
        - ay
        - az
        - ba
        - be
        - bg
        - bh
        - bi
        - bm
        - bn
        - bo
        - br
        - bs
        - ca
        - ce
        - ch
        - co
        - cr
        - cs
        - cu
        - cv
        - cy
        - da
        - de
        - dv
        - dz
        - ee
        - el
        - en
        - eo
        - es
        - et
        - eu
        - fa
        - ff
        - fi
        - fj
        - fo
        - fr
        - fy
        - ga
        - gd
        - gl
        - gn
        - gu
        - gv
        - ha
        - he
        - hi
        - ho
        - hr
        - ht
        - hu
        - hy
        - hz
        - ia
        - id
        - ie
        - ig
        - ii
        - ik
        - io
        - is
        - it
        - iu
        - ja
        - jv
        - ka
        - kg
        - ki
        - kj
        - kk
        - kl
        - km
        - kn
        - ko
        - kr
        - ks
        - ku
        - kv
        - kw
        - ky
        - la
        - lb
        - lg
        - li
        - ln
        - lo
        - lt
        - lu
        - lv
        - mg
        - mh
        - mi
        - mk
        - ml
        - mn
        - mr
        - ms
        - mt
        - my
        - na
        - nb
        - nd
        - ne
        - ng
        - nl
        - nn
        - 'no'
        - nr
        - nv
        - ny
        - oc
        - oj
        - om
        - or
        - os
        - pa
        - pi
        - pl
        - ps
        - pt
        - qu
        - rm
        - rn
        - ro
        - ru
        - rw
        - sa
        - sc
        - sd
        - se
        - sg
        - si
        - sk
        - sl
        - sm
        - sn
        - so
        - sq
        - sr
        - ss
        - st
        - su
        - sv
        - sw
        - ta
        - te
        - tg
        - th
        - ti
        - tk
        - tl
        - tn
        - to
        - tr
        - ts
        - tt
        - tw
        - ty
        - ug
        - uk
        - ur
        - uz
        - ve
        - vi
        - vo
        - wa
        - wo
        - xh
        - yi
        - yue
        - yo
        - za
        - zh
        - zu
        - auto
      description: Two letter ISO 639-1 language code. Use "auto" for auto-detection.
      title: FallbackLmntVoiceLanguage
    FallbackLMNTVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/FallbackLmntVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          $ref: '#/components/schemas/FallbackLmntVoiceVoiceId'
          description: This is the provider-specific ID that will be used.
        speed:
          type: number
          format: double
          description: This is the speed multiplier that will be used.
        language:
          $ref: '#/components/schemas/FallbackLmntVoiceLanguage'
          description: Two letter ISO 639-1 language code. Use "auto" for auto-detection.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
      required:
        - provider
        - voiceId
      title: FallbackLMNTVoice
    FallbackOpenAiVoiceProvider:
      type: string
      enum:
        - openai
      description: This is the voice provider that will be used.
      title: FallbackOpenAiVoiceProvider
    FallbackOpenAiVoiceVoiceId0:
      type: string
      enum:
        - alloy
        - echo
        - fable
        - onyx
        - nova
        - shimmer
        - marin
        - cedar
      title: FallbackOpenAiVoiceVoiceId0
    FallbackOpenAiVoiceVoiceId:
      oneOf:
        - $ref: '#/components/schemas/FallbackOpenAiVoiceVoiceId0'
        - type: string
      description: >-
        This is the provider-specific ID that will be used.

        Please note that ash, ballad, coral, sage, and verse may only be used
        with realtime models.
      title: FallbackOpenAiVoiceVoiceId
    FallbackOpenAiVoiceModel:
      type: string
      enum:
        - tts-1
        - tts-1-hd
        - gpt-4o-mini-tts
      description: This is the model that will be used for text-to-speech.
      title: FallbackOpenAiVoiceModel
    FallbackOpenAIVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/FallbackOpenAiVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          $ref: '#/components/schemas/FallbackOpenAiVoiceVoiceId'
          description: >-
            This is the provider-specific ID that will be used.

            Please note that ash, ballad, coral, sage, and verse may only be
            used with realtime models.
        model:
          $ref: '#/components/schemas/FallbackOpenAiVoiceModel'
          description: This is the model that will be used for text-to-speech.
        instructions:
          type: string
          description: >-
            This is a prompt that allows you to control the voice of your
            generated audio.

            Does not work with 'tts-1' or 'tts-1-hd' models.
        speed:
          type: number
          format: double
          description: This is the speed multiplier that will be used.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
      required:
        - provider
        - voiceId
      title: FallbackOpenAIVoice
    FallbackPlayHtVoiceProvider:
      type: string
      enum:
        - playht
      description: This is the voice provider that will be used.
      title: FallbackPlayHtVoiceProvider
    FallbackPlayHtVoiceVoiceId0:
      type: string
      enum:
        - jennifer
        - melissa
        - will
        - chris
        - matt
        - jack
        - ruby
        - davis
        - donna
        - michael
      title: FallbackPlayHtVoiceVoiceId0
    FallbackPlayHtVoiceVoiceId:
      oneOf:
        - $ref: '#/components/schemas/FallbackPlayHtVoiceVoiceId0'
        - type: string
      description: This is the provider-specific ID that will be used.
      title: FallbackPlayHtVoiceVoiceId
    FallbackPlayHtVoiceEmotion:
      type: string
      enum:
        - female_happy
        - female_sad
        - female_angry
        - female_fearful
        - female_disgust
        - female_surprised
        - male_happy
        - male_sad
        - male_angry
        - male_fearful
        - male_disgust
        - male_surprised
      description: An emotion to be applied to the speech.
      title: FallbackPlayHtVoiceEmotion
    FallbackPlayHtVoiceModel:
      type: string
      enum:
        - PlayHT2.0
        - PlayHT2.0-turbo
        - Play3.0-mini
        - PlayDialog
      description: Playht voice model/engine to use.
      title: FallbackPlayHtVoiceModel
    FallbackPlayHtVoiceLanguage:
      type: string
      enum:
        - afrikaans
        - albanian
        - amharic
        - arabic
        - bengali
        - bulgarian
        - catalan
        - croatian
        - czech
        - danish
        - dutch
        - english
        - french
        - galician
        - german
        - greek
        - hebrew
        - hindi
        - hungarian
        - indonesian
        - italian
        - japanese
        - korean
        - malay
        - mandarin
        - polish
        - portuguese
        - russian
        - serbian
        - spanish
        - swedish
        - tagalog
        - thai
        - turkish
        - ukrainian
        - urdu
        - xhosa
      description: The language to use for the speech.
      title: FallbackPlayHtVoiceLanguage
    FallbackPlayHTVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/FallbackPlayHtVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          $ref: '#/components/schemas/FallbackPlayHtVoiceVoiceId'
          description: This is the provider-specific ID that will be used.
        speed:
          type: number
          format: double
          description: This is the speed multiplier that will be used.
        temperature:
          type: number
          format: double
          description: >-
            A floating point number between 0, exclusive, and 2, inclusive. If
            equal to null or not provided, the model's default temperature will
            be used. The temperature parameter controls variance. Lower
            temperatures result in more predictable results, higher temperatures
            allow each run to vary more, so the voice may sound less like the
            baseline voice.
        emotion:
          $ref: '#/components/schemas/FallbackPlayHtVoiceEmotion'
          description: An emotion to be applied to the speech.
        voiceGuidance:
          type: number
          format: double
          description: >-
            A number between 1 and 6. Use lower numbers to reduce how unique
            your chosen voice will be compared to other voices.
        styleGuidance:
          type: number
          format: double
          description: >-
            A number between 1 and 30. Use lower numbers to to reduce how strong
            your chosen emotion will be. Higher numbers will create a very
            emotional performance.
        textGuidance:
          type: number
          format: double
          description: >-
            A number between 1 and 2. This number influences how closely the
            generated speech adheres to the input text. Use lower values to
            create more fluid speech, but with a higher chance of deviating from
            the input text. Higher numbers will make the generated speech more
            accurate to the input text, ensuring that the words spoken align
            closely with the provided text.
        model:
          $ref: '#/components/schemas/FallbackPlayHtVoiceModel'
          description: Playht voice model/engine to use.
        language:
          $ref: '#/components/schemas/FallbackPlayHtVoiceLanguage'
          description: The language to use for the speech.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
      required:
        - provider
        - voiceId
      title: FallbackPlayHTVoice
    FallbackWellSaidVoiceProvider:
      type: string
      enum:
        - wellsaid
      description: This is the voice provider that will be used.
      title: FallbackWellSaidVoiceProvider
    FallbackWellSaidVoiceModel:
      type: string
      enum:
        - caruso
        - legacy
      description: This is the model that will be used.
      title: FallbackWellSaidVoiceModel
    FallbackWellSaidVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/FallbackWellSaidVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          type: string
          description: The WellSaid speaker ID to synthesize.
        model:
          $ref: '#/components/schemas/FallbackWellSaidVoiceModel'
          description: This is the model that will be used.
        enableSsml:
          type: boolean
          description: Enables limited SSML translation for input text.
        libraryIds:
          type: array
          items:
            type: string
          description: Array of library IDs to use for voice synthesis.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
      required:
        - provider
        - voiceId
      title: FallbackWellSaidVoice
    FallbackRimeAiVoiceProvider:
      type: string
      enum:
        - rime-ai
      description: This is the voice provider that will be used.
      title: FallbackRimeAiVoiceProvider
    FallbackRimeAiVoiceVoiceId0:
      type: string
      enum:
        - cove
        - moon
        - wildflower
        - eva
        - amber
        - maya
        - lagoon
        - breeze
        - helen
        - joy
        - marsh
        - creek
        - cedar
        - alpine
        - summit
        - nicholas
        - tyler
        - colin
        - hank
        - thunder
        - astra
        - eucalyptus
        - moraine
        - peak
        - tundra
        - mesa_extra
        - talon
        - marlu
        - glacier
        - falcon
        - luna
        - celeste
        - estelle
        - andromeda
        - esther
        - lyra
        - lintel
        - oculus
        - vespera
        - transom
        - bond
        - arcade
        - atrium
        - cupola
        - fern
        - sirius
        - orion
        - masonry
        - albion
        - parapet
      description: >-
        Popular Rime AI voices across mist, mistv2, and arcana models. Any valid
        Rime AI voice ID is accepted, not just these suggestions.
      title: FallbackRimeAiVoiceVoiceId0
    FallbackRimeAiVoiceVoiceId:
      oneOf:
        - $ref: '#/components/schemas/FallbackRimeAiVoiceVoiceId0'
        - type: string
      description: This is the provider-specific ID that will be used.
      title: FallbackRimeAiVoiceVoiceId
    FallbackRimeAiVoiceModel:
      type: string
      enum:
        - arcana
        - mistv2
        - mist
      description: >-
        This is the model that will be used. Defaults to 'arcana' when not
        specified.
      title: FallbackRimeAiVoiceModel
    FallbackRimeAiVoiceLanguage:
      type: string
      enum:
        - en
        - es
        - de
        - fr
        - ar
        - hi
        - ja
        - he
        - pt
        - ta
        - si
      description: >-
        Language for speech synthesis. Uses ISO 639 codes. Supported: en, es,
        de, fr, ar, hi, ja, he, pt, ta, si.
      title: FallbackRimeAiVoiceLanguage
    FallbackRimeAIVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/FallbackRimeAiVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          $ref: '#/components/schemas/FallbackRimeAiVoiceVoiceId'
          description: This is the provider-specific ID that will be used.
        model:
          $ref: '#/components/schemas/FallbackRimeAiVoiceModel'
          description: >-
            This is the model that will be used. Defaults to 'arcana' when not
            specified.
        speed:
          type: number
          format: double
          description: This is the speed multiplier that will be used.
        pauseBetweenBrackets:
          type: boolean
          description: >-
            This is a flag that controls whether to add slight pauses using
            angle brackets. Example: "Hi. <200> I'd love to have a conversation
            with you." adds a 200ms pause between the first and second
            sentences.
        phonemizeBetweenBrackets:
          type: boolean
          description: >-
            This is a flag that controls whether text inside brackets should be
            phonemized (converted to phonetic pronunciation) - Example:
            "{h'El.o} World" will pronounce "Hello" as expected.
        reduceLatency:
          type: boolean
          description: >-
            This is a flag that controls whether to optimize for reduced latency
            in streaming.
            https://docs.rime.ai/api-reference/endpoint/websockets#param-reduce-latency
        inlineSpeedAlpha:
          type: string
          description: >-
            This is a string that allows inline speed control using alpha
            notation.
            https://docs.rime.ai/api-reference/endpoint/websockets#param-inline-speed-alpha
        language:
          $ref: '#/components/schemas/FallbackRimeAiVoiceLanguage'
          description: >-
            Language for speech synthesis. Uses ISO 639 codes. Supported: en,
            es, de, fr, ar, hi, ja, he, pt, ta, si.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
      required:
        - provider
        - voiceId
      title: FallbackRimeAIVoice
    FallbackSmallestAiVoiceProvider:
      type: string
      enum:
        - smallest-ai
      description: This is the voice provider that will be used.
      title: FallbackSmallestAiVoiceProvider
    FallbackSmallestAiVoiceVoiceId0:
      type: string
      enum:
        - emily
        - jasmine
        - arman
        - james
        - mithali
        - aravind
        - raj
        - diya
        - raman
        - ananya
        - isha
        - william
        - aarav
        - monika
        - niharika
        - deepika
        - raghav
        - kajal
        - radhika
        - mansi
        - nisha
        - saurabh
        - pooja
        - saina
        - sanya
      title: FallbackSmallestAiVoiceVoiceId0
    FallbackSmallestAiVoiceVoiceId:
      oneOf:
        - $ref: '#/components/schemas/FallbackSmallestAiVoiceVoiceId0'
        - type: string
      description: This is the provider-specific ID that will be used.
      title: FallbackSmallestAiVoiceVoiceId
    FallbackSmallestAiVoiceModel:
      type: string
      enum:
        - lightning
      description: >-
        Smallest AI voice model to use. Defaults to 'lightning' when not
        specified.
      title: FallbackSmallestAiVoiceModel
    FallbackSmallestAIVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/FallbackSmallestAiVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          $ref: '#/components/schemas/FallbackSmallestAiVoiceVoiceId'
          description: This is the provider-specific ID that will be used.
        model:
          $ref: '#/components/schemas/FallbackSmallestAiVoiceModel'
          description: >-
            Smallest AI voice model to use. Defaults to 'lightning' when not
            specified.
        speed:
          type: number
          format: double
          description: This is the speed multiplier that will be used.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
      required:
        - provider
        - voiceId
      title: FallbackSmallestAIVoice
    FallbackTavusVoiceProvider:
      type: string
      enum:
        - tavus
      description: This is the voice provider that will be used.
      title: FallbackTavusVoiceProvider
    FallbackTavusVoiceVoiceId0:
      type: string
      enum:
        - r52da2535a
      title: FallbackTavusVoiceVoiceId0
    FallbackTavusVoiceVoiceId:
      oneOf:
        - $ref: '#/components/schemas/FallbackTavusVoiceVoiceId0'
        - type: string
      description: This is the provider-specific ID that will be used.
      title: FallbackTavusVoiceVoiceId
    TavusConversationProperties:
      type: object
      properties:
        maxCallDuration:
          type: number
          format: double
          description: >-
            The maximum duration of the call in seconds. The default
            `maxCallDuration` is 3600 seconds (1 hour).

            Once the time limit specified by this parameter has been reached,
            the conversation will automatically shut down.
        participantLeftTimeout:
          type: number
          format: double
          description: >-
            The duration in seconds after which the call will be automatically
            shut down once the last participant leaves.
        participantAbsentTimeout:
          type: number
          format: double
          description: >-
            Starting from conversation creation, the duration in seconds after
            which the call will be automatically shut down if no participant
            joins the call.

            Default is 300 seconds (5 minutes).
        enableRecording:
          type: boolean
          description: If true, the user will be able to record the conversation.
        enableTranscription:
          type: boolean
          description: >-
            If true, the user will be able to transcribe the conversation.

            You can find more instructions on displaying transcriptions if you
            are using your custom DailyJS components here.

            You need to have an event listener on Daily that listens for
            `app-messages`.
        applyGreenscreen:
          type: boolean
          description: >-
            If true, the background will be replaced with a greenscreen (RGB
            values: `[0, 255, 155]`).

            You can use WebGL on the frontend to make the greenscreen
            transparent or change its color.
        language:
          type: string
          description: >-
            The language of the conversation. Please provide the **full language
            name**, not the two-letter code.

            If you are using your own TTS voice, please ensure it supports the
            language you provide.

            If you are using a stock replica or default persona, please note
            that only ElevenLabs and Cartesia supported languages are available.

            You can find a full list of supported languages for Cartesia here,
            for ElevenLabs here, and for PlayHT here.
        recordingS3BucketName:
          type: string
          description: The name of the S3 bucket where the recording will be stored.
        recordingS3BucketRegion:
          type: string
          description: The region of the S3 bucket where the recording will be stored.
        awsAssumeRoleArn:
          type: string
          description: The ARN of the role that will be assumed to access the S3 bucket.
      title: TavusConversationProperties
    FallbackTavusVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/FallbackTavusVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          $ref: '#/components/schemas/FallbackTavusVoiceVoiceId'
          description: This is the provider-specific ID that will be used.
        personaId:
          type: string
          description: >-
            This is the unique identifier for the persona that the replica will
            use in the conversation.
        callbackUrl:
          type: string
          description: >-
            This is the url that will receive webhooks with updates regarding
            the conversation state.
        conversationName:
          type: string
          description: This is the name for the conversation.
        conversationalContext:
          type: string
          description: >-
            This is the context that will be appended to any context provided in
            the persona, if one is provided.
        customGreeting:
          type: string
          description: >-
            This is the custom greeting that the replica will give once a
            participant joines the conversation.
        properties:
          $ref: '#/components/schemas/TavusConversationProperties'
          description: These are optional properties used to customize the conversation.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
      required:
        - provider
        - voiceId
      title: FallbackTavusVoice
    FallbackNeuphonicVoiceProvider:
      type: string
      enum:
        - neuphonic
      description: This is the voice provider that will be used.
      title: FallbackNeuphonicVoiceProvider
    FallbackNeuphonicVoiceVoiceId:
      oneOf:
        - type: string
        - type: string
      description: This is the provider-specific ID that will be used.
      title: FallbackNeuphonicVoiceVoiceId
    FallbackNeuphonicVoiceModel:
      type: string
      enum:
        - neu_hq
        - neu_fast
      description: >-
        This is the model that will be used. Defaults to 'neu_fast' if not
        specified.
      title: FallbackNeuphonicVoiceModel
    FallbackNeuphonicVoiceLanguage:
      type: object
      properties: {}
      description: This is the language (ISO 639-1) that is enforced for the model.
      title: FallbackNeuphonicVoiceLanguage
    FallbackNeuphonicVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/FallbackNeuphonicVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          $ref: '#/components/schemas/FallbackNeuphonicVoiceVoiceId'
          description: This is the provider-specific ID that will be used.
        model:
          $ref: '#/components/schemas/FallbackNeuphonicVoiceModel'
          description: >-
            This is the model that will be used. Defaults to 'neu_fast' if not
            specified.
        language:
          $ref: '#/components/schemas/FallbackNeuphonicVoiceLanguage'
          description: This is the language (ISO 639-1) that is enforced for the model.
        speed:
          type: number
          format: double
          description: This is the speed multiplier that will be used.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
      required:
        - provider
        - voiceId
        - language
      title: FallbackNeuphonicVoice
    FallbackSesameVoiceProvider:
      type: string
      enum:
        - sesame
      description: This is the voice provider that will be used.
      title: FallbackSesameVoiceProvider
    FallbackSesameVoiceModel:
      type: string
      enum:
        - csm-1b
      description: This is the model that will be used.
      title: FallbackSesameVoiceModel
    FallbackSesameVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/FallbackSesameVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          type: string
          description: This is the provider-specific ID that will be used.
        model:
          $ref: '#/components/schemas/FallbackSesameVoiceModel'
          description: This is the model that will be used.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
      required:
        - provider
        - voiceId
        - model
      title: FallbackSesameVoice
    FallbackInworldVoiceProvider:
      type: string
      enum:
        - inworld
      description: This is the voice provider that will be used.
      title: FallbackInworldVoiceProvider
    FallbackInworldVoiceVoiceId:
      type: string
      enum:
        - Alex
        - Ashley
        - Craig
        - Deborah
        - Dennis
        - Edward
        - Elizabeth
        - Hades
        - Julia
        - Pixie
        - Mark
        - Olivia
        - Priya
        - Ronald
        - Sarah
        - Shaun
        - Theodore
        - Timothy
        - Wendy
        - Dominus
        - Hana
        - Clive
        - Carter
        - Blake
        - Luna
        - Yichen
        - Xiaoyin
        - Xinyi
        - Jing
        - Erik
        - Katrien
        - Lennart
        - Lore
        - Alain
        - Hélène
        - Mathieu
        - Étienne
        - Johanna
        - Josef
        - Gianni
        - Orietta
        - Asuka
        - Satoshi
        - Hyunwoo
        - Minji
        - Seojun
        - Yoona
        - Szymon
        - Wojciech
        - Heitor
        - Maitê
        - Diego
        - Lupita
        - Miguel
        - Rafael
        - Svetlana
        - Elena
        - Dmitry
        - Nikolai
        - Riya
        - Manoj
        - Yael
        - Oren
        - Nour
        - Omar
      description: >-
        Available voices by language:

        • en: Alex, Ashley, Craig, Deborah, Dennis, Edward, Elizabeth, Hades,
        Julia, Pixie, Mark, Olivia, Priya, Ronald, Sarah, Shaun, Theodore,
        Timothy, Wendy, Dominus, Hana, Clive, Carter, Blake, Luna

        • zh: Yichen, Xiaoyin, Xinyi, Jing

        • nl: Erik, Katrien, Lennart, Lore

        • fr: Alain, Hélène, Mathieu, Étienne

        • de: Johanna, Josef

        • it: Gianni, Orietta

        • ja: Asuka, Satoshi

        • ko: Hyunwoo, Minji, Seojun, Yoona

        • pl: Szymon, Wojciech

        • pt: Heitor, Maitê

        • es: Diego, Lupita, Miguel, Rafael

        • ru: Svetlana, Elena, Dmitry, Nikolai

        • hi: Riya, Manoj

        • he: Yael, Oren

        • ar: Nour, Omar
      title: FallbackInworldVoiceVoiceId
    FallbackInworldVoiceModel:
      type: string
      enum:
        - inworld-tts-1
      default: inworld-tts-1
      description: This is the model that will be used.
      title: FallbackInworldVoiceModel
    FallbackInworldVoiceLanguageCode:
      type: string
      enum:
        - en
        - zh
        - ko
        - nl
        - fr
        - es
        - ja
        - de
        - it
        - pl
        - pt
        - ru
        - hi
        - he
        - ar
      default: en
      description: Language code for Inworld TTS synthesis
      title: FallbackInworldVoiceLanguageCode
    FallbackInworldVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/FallbackInworldVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          $ref: '#/components/schemas/FallbackInworldVoiceVoiceId'
          description: >-
            Available voices by language:

            • en: Alex, Ashley, Craig, Deborah, Dennis, Edward, Elizabeth,
            Hades, Julia, Pixie, Mark, Olivia, Priya, Ronald, Sarah, Shaun,
            Theodore, Timothy, Wendy, Dominus, Hana, Clive, Carter, Blake, Luna

            • zh: Yichen, Xiaoyin, Xinyi, Jing

            • nl: Erik, Katrien, Lennart, Lore

            • fr: Alain, Hélène, Mathieu, Étienne

            • de: Johanna, Josef

            • it: Gianni, Orietta

            • ja: Asuka, Satoshi

            • ko: Hyunwoo, Minji, Seojun, Yoona

            • pl: Szymon, Wojciech

            • pt: Heitor, Maitê

            • es: Diego, Lupita, Miguel, Rafael

            • ru: Svetlana, Elena, Dmitry, Nikolai

            • hi: Riya, Manoj

            • he: Yael, Oren

            • ar: Nour, Omar
        model:
          $ref: '#/components/schemas/FallbackInworldVoiceModel'
          description: This is the model that will be used.
        languageCode:
          $ref: '#/components/schemas/FallbackInworldVoiceLanguageCode'
          description: Language code for Inworld TTS synthesis
        temperature:
          type: number
          format: double
          default: 1.1
          description: >-
            A floating point number between 0, exclusive, and 2, inclusive. If
            equal to null or not provided, the model's default temperature of
            1.1 will be used. The temperature parameter controls variance.

            Higher values will make the output more random and can lead to more
            expressive results. Lower values will make it more deterministic.

            See
            https://docs.inworld.ai/docs/tts/capabilities/generating-audio#additional-configurations
            for more details.
        speakingRate:
          type: number
          format: double
          default: 1
          description: >-
            A floating point number between 0.5, inclusive, and 1.5, inclusive.
            If equal to null or not provided, the model's default speaking speed
            of 1.0 will be used.

            Values above 0.8 are recommended for higher quality.

            See
            https://docs.inworld.ai/docs/tts/capabilities/generating-audio#additional-configurations
            for more details.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
      required:
        - provider
        - voiceId
      title: FallbackInworldVoice
    FallbackPlanVoicesItems:
      oneOf:
        - $ref: '#/components/schemas/FallbackAzureVoice'
        - $ref: '#/components/schemas/FallbackCartesiaVoice'
        - $ref: '#/components/schemas/FallbackHumeVoice'
        - $ref: '#/components/schemas/FallbackCustomVoice'
        - $ref: '#/components/schemas/FallbackDeepgramVoice'
        - $ref: '#/components/schemas/FallbackElevenLabsVoice'
        - $ref: '#/components/schemas/FallbackVapiVoice'
        - $ref: '#/components/schemas/FallbackLMNTVoice'
        - $ref: '#/components/schemas/FallbackOpenAIVoice'
        - $ref: '#/components/schemas/FallbackPlayHTVoice'
        - $ref: '#/components/schemas/FallbackWellSaidVoice'
        - $ref: '#/components/schemas/FallbackRimeAIVoice'
        - $ref: '#/components/schemas/FallbackSmallestAIVoice'
        - $ref: '#/components/schemas/FallbackTavusVoice'
        - $ref: '#/components/schemas/FallbackNeuphonicVoice'
        - $ref: '#/components/schemas/FallbackSesameVoice'
        - $ref: '#/components/schemas/FallbackInworldVoice'
      title: FallbackPlanVoicesItems
    FallbackPlan:
      type: object
      properties:
        voices:
          type: array
          items:
            $ref: '#/components/schemas/FallbackPlanVoicesItems'
          description: >-
            This is the list of voices to fallback to in the event that the
            primary voice provider fails.
      required:
        - voices
      title: FallbackPlan
    AzureVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/AzureVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          $ref: '#/components/schemas/AzureVoiceId'
          description: This is the provider-specific ID that will be used.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
        speed:
          type: number
          format: double
          description: This is the speed multiplier that will be used.
        fallbackPlan:
          $ref: '#/components/schemas/FallbackPlan'
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
      required:
        - provider
        - voiceId
      title: AzureVoice
    CartesiaVoiceProvider:
      type: string
      enum:
        - cartesia
      description: This is the voice provider that will be used.
      title: CartesiaVoiceProvider
    CartesiaVoiceModel:
      type: string
      enum:
        - sonic-3
        - sonic-3-2026-01-12
        - sonic-3-2025-10-27
        - sonic-2
        - sonic-2-2025-06-11
        - sonic-english
        - sonic-multilingual
        - sonic-preview
        - sonic
      description: >-
        This is the model that will be used. This is optional and will default
        to the correct model for the voiceId.
      title: CartesiaVoiceModel
    CartesiaVoiceLanguage:
      type: string
      enum:
        - ar
        - bg
        - bn
        - cs
        - da
        - de
        - el
        - en
        - es
        - fi
        - fr
        - gu
        - he
        - hi
        - hr
        - hu
        - id
        - it
        - ja
        - ka
        - kn
        - ko
        - ml
        - mr
        - ms
        - nl
        - 'no'
        - pa
        - pl
        - pt
        - ro
        - ru
        - sk
        - sv
        - ta
        - te
        - th
        - tl
        - tr
        - uk
        - vi
        - zh
      description: >-
        This is the language that will be used. This is optional and will
        default to the correct language for the voiceId.
      title: CartesiaVoiceLanguage
    CartesiaVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/CartesiaVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          type: string
          description: The ID of the particular voice you want to use.
        model:
          $ref: '#/components/schemas/CartesiaVoiceModel'
          description: >-
            This is the model that will be used. This is optional and will
            default to the correct model for the voiceId.
        language:
          $ref: '#/components/schemas/CartesiaVoiceLanguage'
          description: >-
            This is the language that will be used. This is optional and will
            default to the correct language for the voiceId.
        experimentalControls:
          $ref: '#/components/schemas/CartesiaExperimentalControls'
          description: Experimental controls for Cartesia voice generation
        generationConfig:
          $ref: '#/components/schemas/CartesiaGenerationConfig'
          description: >-
            Generation config for fine-grained control of sonic-3 voice output
            (speed, volume, and experimental controls). Only available for
            sonic-3 model.
        pronunciationDictId:
          type: string
          description: >-
            Pronunciation dictionary ID for sonic-3. Allows custom
            pronunciations for specific words. Only available for sonic-3 model.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
        fallbackPlan:
          $ref: '#/components/schemas/FallbackPlan'
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
      required:
        - provider
        - voiceId
      title: CartesiaVoice
    CustomVoiceProvider:
      type: string
      enum:
        - custom-voice
      description: >-
        This is the voice provider that will be used. Use `custom-voice` for
        providers that are not natively supported.
      title: CustomVoiceProvider
    CustomVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/CustomVoiceProvider'
          description: >-
            This is the voice provider that will be used. Use `custom-voice` for
            providers that are not natively supported.
        voiceId:
          type: string
          description: >-
            This is the provider-specific ID that will be used. This is passed
            in the voice request payload to identify the voice to use.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
        server:
          $ref: '#/components/schemas/Server'
          description: >-
            This is where the voice request will be sent.


            Request Example:


            POST https://{server.url}

            Content-Type: application/json


            {
              "message": {
                "type": "voice-request",
                "text": "Hello, world!",
                "sampleRate": 24000,
                ...other metadata about the call...
              }
            }


            Response Expected: 1-channel 16-bit raw PCM audio at the sample rate
            specified in the request. Here is how the response will be piped to
            the transport:

            ```

            response.on('data', (chunk: Buffer) => {
              outputStream.write(chunk);
            });

            ```
        fallbackPlan:
          $ref: '#/components/schemas/FallbackPlan'
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
      required:
        - provider
        - server
      title: CustomVoice
    DeepgramVoiceProvider:
      type: string
      enum:
        - deepgram
      description: This is the voice provider that will be used.
      title: DeepgramVoiceProvider
    DeepgramVoiceId:
      type: string
      enum:
        - asteria
        - luna
        - stella
        - athena
        - hera
        - orion
        - arcas
        - perseus
        - angus
        - orpheus
        - helios
        - zeus
        - thalia
        - andromeda
        - helena
        - apollo
        - arcas
        - aries
        - amalthea
        - asteria
        - athena
        - atlas
        - aurora
        - callista
        - cora
        - cordelia
        - delia
        - draco
        - electra
        - harmonia
        - hera
        - hermes
        - hyperion
        - iris
        - janus
        - juno
        - jupiter
        - luna
        - mars
        - minerva
        - neptune
        - odysseus
        - ophelia
        - orion
        - orpheus
        - pandora
        - phoebe
        - pluto
        - saturn
        - selene
        - theia
        - vesta
        - zeus
        - celeste
        - estrella
        - nestor
        - sirio
        - carina
        - alvaro
        - diana
        - aquila
        - selena
        - javier
      description: This is the provider-specific ID that will be used.
      title: DeepgramVoiceId
    DeepgramVoiceModel:
      type: string
      enum:
        - aura
        - aura-2
      description: >-
        This is the model that will be used. Defaults to 'aura-2' when not
        specified.
      title: DeepgramVoiceModel
    DeepgramVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/DeepgramVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          $ref: '#/components/schemas/DeepgramVoiceId'
          description: This is the provider-specific ID that will be used.
        model:
          $ref: '#/components/schemas/DeepgramVoiceModel'
          description: >-
            This is the model that will be used. Defaults to 'aura-2' when not
            specified.
        mipOptOut:
          type: boolean
          default: false
          description: >-
            If set to true, this will add mip_opt_out=true as a query parameter
            of all API requests. See
            https://developers.deepgram.com/docs/the-deepgram-model-improvement-partnership-program#want-to-opt-out


            This will only be used if you are using your own Deepgram API key.


            @default false
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
        fallbackPlan:
          $ref: '#/components/schemas/FallbackPlan'
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
      required:
        - provider
        - voiceId
      title: DeepgramVoice
    ElevenLabsVoiceProvider:
      type: string
      enum:
        - 11labs
      description: This is the voice provider that will be used.
      title: ElevenLabsVoiceProvider
    ElevenLabsVoiceId0:
      type: string
      enum:
        - burt
        - marissa
        - andrea
        - sarah
        - phillip
        - steve
        - joseph
        - myra
        - paula
        - ryan
        - drew
        - paul
        - mrb
        - matilda
        - mark
      title: ElevenLabsVoiceId0
    ElevenLabsVoiceId:
      oneOf:
        - $ref: '#/components/schemas/ElevenLabsVoiceId0'
        - type: string
      description: >-
        This is the provider-specific ID that will be used. Ensure the Voice is
        present in your 11Labs Voice Library.
      title: ElevenLabsVoiceId
    ElevenLabsVoiceModel:
      type: string
      enum:
        - eleven_multilingual_v2
        - eleven_turbo_v2
        - eleven_turbo_v2_5
        - eleven_flash_v2
        - eleven_flash_v2_5
        - eleven_monolingual_v1
        - eleven_v3
      description: >-
        This is the model that will be used. Defaults to 'eleven_turbo_v2' if
        not specified.
      title: ElevenLabsVoiceModel
    ElevenLabsVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/ElevenLabsVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          $ref: '#/components/schemas/ElevenLabsVoiceId'
          description: >-
            This is the provider-specific ID that will be used. Ensure the Voice
            is present in your 11Labs Voice Library.
        stability:
          type: number
          format: double
          description: Defines the stability for voice settings.
        similarityBoost:
          type: number
          format: double
          description: Defines the similarity boost for voice settings.
        style:
          type: number
          format: double
          description: Defines the style for voice settings.
        useSpeakerBoost:
          type: boolean
          description: Defines the use speaker boost for voice settings.
        speed:
          type: number
          format: double
          description: Defines the speed for voice settings.
        optimizeStreamingLatency:
          type: number
          format: double
          description: >-
            Defines the optimize streaming latency for voice settings. Defaults
            to 3.
        enableSsmlParsing:
          type: boolean
          description: >-
            This enables the use of
            https://elevenlabs.io/docs/speech-synthesis/prompting#pronunciation.
            Defaults to false to save latency.


            @default false
        autoMode:
          type: boolean
          description: Defines the auto mode for voice settings. Defaults to false.
        model:
          $ref: '#/components/schemas/ElevenLabsVoiceModel'
          description: >-
            This is the model that will be used. Defaults to 'eleven_turbo_v2'
            if not specified.
        language:
          type: string
          description: >-
            This is the language (ISO 639-1) that is enforced for the model.
            Currently only Turbo v2.5 supports language enforcement. For other
            models, an error will be returned if language code is provided.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
        pronunciationDictionaryLocators:
          type: array
          items:
            $ref: '#/components/schemas/ElevenLabsPronunciationDictionaryLocator'
          description: This is the pronunciation dictionary locators to use.
        fallbackPlan:
          $ref: '#/components/schemas/FallbackPlan'
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
      required:
        - provider
        - voiceId
      title: ElevenLabsVoice
    HumeVoiceProvider:
      type: string
      enum:
        - hume
      description: This is the voice provider that will be used.
      title: HumeVoiceProvider
    HumeVoiceModel:
      type: string
      enum:
        - octave
        - octave2
      description: This is the model that will be used.
      title: HumeVoiceModel
    HumeVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/HumeVoiceProvider'
          description: This is the voice provider that will be used.
        model:
          $ref: '#/components/schemas/HumeVoiceModel'
          description: This is the model that will be used.
        voiceId:
          type: string
          description: The ID of the particular voice you want to use.
        isCustomHumeVoice:
          type: boolean
          description: >-
            Indicates whether the chosen voice is a preset Hume AI voice or a
            custom voice.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
        description:
          type: string
          description: >-
            Natural language instructions describing how the synthesized speech
            should sound, including but not limited to tone, intonation, pacing,
            and accent (e.g., 'a soft, gentle voice with a strong British
            accent').


            If a Voice is specified in the request, this description serves as
            acting instructions.

            If no Voice is specified, a new voice is generated based on this
            description.
        fallbackPlan:
          $ref: '#/components/schemas/FallbackPlan'
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
      required:
        - provider
        - voiceId
      title: HumeVoice
    LmntVoiceProvider:
      type: string
      enum:
        - lmnt
      description: This is the voice provider that will be used.
      title: LmntVoiceProvider
    LmntVoiceId0:
      type: string
      enum:
        - amy
        - ansel
        - autumn
        - ava
        - brandon
        - caleb
        - cassian
        - chloe
        - dalton
        - daniel
        - dustin
        - elowen
        - evander
        - huxley
        - james
        - juniper
        - kennedy
        - lauren
        - leah
        - lily
        - lucas
        - magnus
        - miles
        - morgan
        - natalie
        - nathan
        - noah
        - nyssa
        - oliver
        - paige
        - ryan
        - sadie
        - sophie
        - stella
        - terrence
        - tyler
        - vesper
        - violet
        - warrick
        - zain
        - zeke
        - zoe
      title: LmntVoiceId0
    LMNTVoiceId:
      oneOf:
        - $ref: '#/components/schemas/LmntVoiceId0'
        - type: string
      description: This is the provider-specific ID that will be used.
      title: LMNTVoiceId
    LmntVoiceLanguage:
      type: string
      enum:
        - aa
        - ab
        - ae
        - af
        - ak
        - am
        - an
        - ar
        - as
        - av
        - ay
        - az
        - ba
        - be
        - bg
        - bh
        - bi
        - bm
        - bn
        - bo
        - br
        - bs
        - ca
        - ce
        - ch
        - co
        - cr
        - cs
        - cu
        - cv
        - cy
        - da
        - de
        - dv
        - dz
        - ee
        - el
        - en
        - eo
        - es
        - et
        - eu
        - fa
        - ff
        - fi
        - fj
        - fo
        - fr
        - fy
        - ga
        - gd
        - gl
        - gn
        - gu
        - gv
        - ha
        - he
        - hi
        - ho
        - hr
        - ht
        - hu
        - hy
        - hz
        - ia
        - id
        - ie
        - ig
        - ii
        - ik
        - io
        - is
        - it
        - iu
        - ja
        - jv
        - ka
        - kg
        - ki
        - kj
        - kk
        - kl
        - km
        - kn
        - ko
        - kr
        - ks
        - ku
        - kv
        - kw
        - ky
        - la
        - lb
        - lg
        - li
        - ln
        - lo
        - lt
        - lu
        - lv
        - mg
        - mh
        - mi
        - mk
        - ml
        - mn
        - mr
        - ms
        - mt
        - my
        - na
        - nb
        - nd
        - ne
        - ng
        - nl
        - nn
        - 'no'
        - nr
        - nv
        - ny
        - oc
        - oj
        - om
        - or
        - os
        - pa
        - pi
        - pl
        - ps
        - pt
        - qu
        - rm
        - rn
        - ro
        - ru
        - rw
        - sa
        - sc
        - sd
        - se
        - sg
        - si
        - sk
        - sl
        - sm
        - sn
        - so
        - sq
        - sr
        - ss
        - st
        - su
        - sv
        - sw
        - ta
        - te
        - tg
        - th
        - ti
        - tk
        - tl
        - tn
        - to
        - tr
        - ts
        - tt
        - tw
        - ty
        - ug
        - uk
        - ur
        - uz
        - ve
        - vi
        - vo
        - wa
        - wo
        - xh
        - yi
        - yue
        - yo
        - za
        - zh
        - zu
        - auto
      description: Two letter ISO 639-1 language code. Use "auto" for auto-detection.
      title: LmntVoiceLanguage
    LMNTVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/LmntVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          $ref: '#/components/schemas/LMNTVoiceId'
          description: This is the provider-specific ID that will be used.
        speed:
          type: number
          format: double
          description: This is the speed multiplier that will be used.
        language:
          $ref: '#/components/schemas/LmntVoiceLanguage'
          description: Two letter ISO 639-1 language code. Use "auto" for auto-detection.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
        fallbackPlan:
          $ref: '#/components/schemas/FallbackPlan'
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
      required:
        - provider
        - voiceId
      title: LMNTVoice
    NeuphonicVoiceProvider:
      type: string
      enum:
        - neuphonic
      description: This is the voice provider that will be used.
      title: NeuphonicVoiceProvider
    NeuphonicVoiceVoiceId:
      oneOf:
        - type: string
        - type: string
      description: This is the provider-specific ID that will be used.
      title: NeuphonicVoiceVoiceId
    NeuphonicVoiceModel:
      type: string
      enum:
        - neu_hq
        - neu_fast
      description: >-
        This is the model that will be used. Defaults to 'neu_fast' if not
        specified.
      title: NeuphonicVoiceModel
    NeuphonicVoiceLanguage:
      type: object
      properties: {}
      description: This is the language (ISO 639-1) that is enforced for the model.
      title: NeuphonicVoiceLanguage
    NeuphonicVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/NeuphonicVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          $ref: '#/components/schemas/NeuphonicVoiceVoiceId'
          description: This is the provider-specific ID that will be used.
        model:
          $ref: '#/components/schemas/NeuphonicVoiceModel'
          description: >-
            This is the model that will be used. Defaults to 'neu_fast' if not
            specified.
        language:
          $ref: '#/components/schemas/NeuphonicVoiceLanguage'
          description: This is the language (ISO 639-1) that is enforced for the model.
        speed:
          type: number
          format: double
          description: This is the speed multiplier that will be used.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
        fallbackPlan:
          $ref: '#/components/schemas/FallbackPlan'
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
      required:
        - provider
        - voiceId
        - language
      title: NeuphonicVoice
    OpenAiVoiceProvider:
      type: string
      enum:
        - openai
      description: This is the voice provider that will be used.
      title: OpenAiVoiceProvider
    OpenAiVoiceId0:
      type: string
      enum:
        - alloy
        - echo
        - fable
        - onyx
        - nova
        - shimmer
        - marin
        - cedar
      title: OpenAiVoiceId0
    OpenAIVoiceId:
      oneOf:
        - $ref: '#/components/schemas/OpenAiVoiceId0'
        - type: string
      description: >-
        This is the provider-specific ID that will be used.

        Please note that ash, ballad, coral, sage, and verse may only be used
        with realtime models.
      title: OpenAIVoiceId
    OpenAiVoiceModel:
      type: string
      enum:
        - tts-1
        - tts-1-hd
        - gpt-4o-mini-tts
      description: This is the model that will be used for text-to-speech.
      title: OpenAiVoiceModel
    OpenAIVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/OpenAiVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          $ref: '#/components/schemas/OpenAIVoiceId'
          description: >-
            This is the provider-specific ID that will be used.

            Please note that ash, ballad, coral, sage, and verse may only be
            used with realtime models.
        model:
          $ref: '#/components/schemas/OpenAiVoiceModel'
          description: This is the model that will be used for text-to-speech.
        instructions:
          type: string
          description: >-
            This is a prompt that allows you to control the voice of your
            generated audio.

            Does not work with 'tts-1' or 'tts-1-hd' models.
        speed:
          type: number
          format: double
          description: This is the speed multiplier that will be used.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
        fallbackPlan:
          $ref: '#/components/schemas/FallbackPlan'
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
      required:
        - provider
        - voiceId
      title: OpenAIVoice
    PlayHtVoiceProvider:
      type: string
      enum:
        - playht
      description: This is the voice provider that will be used.
      title: PlayHtVoiceProvider
    PlayHtVoiceVoiceId0:
      type: string
      enum:
        - jennifer
        - melissa
        - will
        - chris
        - matt
        - jack
        - ruby
        - davis
        - donna
        - michael
      title: PlayHtVoiceVoiceId0
    PlayHtVoiceVoiceId:
      oneOf:
        - $ref: '#/components/schemas/PlayHtVoiceVoiceId0'
        - type: string
      description: This is the provider-specific ID that will be used.
      title: PlayHtVoiceVoiceId
    PlayHtVoiceEmotion:
      type: string
      enum:
        - female_happy
        - female_sad
        - female_angry
        - female_fearful
        - female_disgust
        - female_surprised
        - male_happy
        - male_sad
        - male_angry
        - male_fearful
        - male_disgust
        - male_surprised
      description: An emotion to be applied to the speech.
      title: PlayHtVoiceEmotion
    PlayHtVoiceModel:
      type: string
      enum:
        - PlayHT2.0
        - PlayHT2.0-turbo
        - Play3.0-mini
        - PlayDialog
      description: Playht voice model/engine to use.
      title: PlayHtVoiceModel
    PlayHtVoiceLanguage:
      type: string
      enum:
        - afrikaans
        - albanian
        - amharic
        - arabic
        - bengali
        - bulgarian
        - catalan
        - croatian
        - czech
        - danish
        - dutch
        - english
        - french
        - galician
        - german
        - greek
        - hebrew
        - hindi
        - hungarian
        - indonesian
        - italian
        - japanese
        - korean
        - malay
        - mandarin
        - polish
        - portuguese
        - russian
        - serbian
        - spanish
        - swedish
        - tagalog
        - thai
        - turkish
        - ukrainian
        - urdu
        - xhosa
      description: The language to use for the speech.
      title: PlayHtVoiceLanguage
    PlayHTVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/PlayHtVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          $ref: '#/components/schemas/PlayHtVoiceVoiceId'
          description: This is the provider-specific ID that will be used.
        speed:
          type: number
          format: double
          description: This is the speed multiplier that will be used.
        temperature:
          type: number
          format: double
          description: >-
            A floating point number between 0, exclusive, and 2, inclusive. If
            equal to null or not provided, the model's default temperature will
            be used. The temperature parameter controls variance. Lower
            temperatures result in more predictable results, higher temperatures
            allow each run to vary more, so the voice may sound less like the
            baseline voice.
        emotion:
          $ref: '#/components/schemas/PlayHtVoiceEmotion'
          description: An emotion to be applied to the speech.
        voiceGuidance:
          type: number
          format: double
          description: >-
            A number between 1 and 6. Use lower numbers to reduce how unique
            your chosen voice will be compared to other voices.
        styleGuidance:
          type: number
          format: double
          description: >-
            A number between 1 and 30. Use lower numbers to to reduce how strong
            your chosen emotion will be. Higher numbers will create a very
            emotional performance.
        textGuidance:
          type: number
          format: double
          description: >-
            A number between 1 and 2. This number influences how closely the
            generated speech adheres to the input text. Use lower values to
            create more fluid speech, but with a higher chance of deviating from
            the input text. Higher numbers will make the generated speech more
            accurate to the input text, ensuring that the words spoken align
            closely with the provided text.
        model:
          $ref: '#/components/schemas/PlayHtVoiceModel'
          description: Playht voice model/engine to use.
        language:
          $ref: '#/components/schemas/PlayHtVoiceLanguage'
          description: The language to use for the speech.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
        fallbackPlan:
          $ref: '#/components/schemas/FallbackPlan'
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
      required:
        - provider
        - voiceId
      title: PlayHTVoice
    WellSaidVoiceProvider:
      type: string
      enum:
        - wellsaid
      description: This is the voice provider that will be used.
      title: WellSaidVoiceProvider
    WellSaidVoiceModel:
      type: string
      enum:
        - caruso
        - legacy
      description: This is the model that will be used.
      title: WellSaidVoiceModel
    WellSaidVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/WellSaidVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          type: string
          description: The WellSaid speaker ID to synthesize.
        model:
          $ref: '#/components/schemas/WellSaidVoiceModel'
          description: This is the model that will be used.
        enableSsml:
          type: boolean
          description: Enables limited SSML translation for input text.
        libraryIds:
          type: array
          items:
            type: string
          description: Array of library IDs to use for voice synthesis.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
        fallbackPlan:
          $ref: '#/components/schemas/FallbackPlan'
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
      required:
        - provider
        - voiceId
      title: WellSaidVoice
    RimeAiVoiceProvider:
      type: string
      enum:
        - rime-ai
      description: This is the voice provider that will be used.
      title: RimeAiVoiceProvider
    RimeAiVoiceId0:
      type: string
      enum:
        - cove
        - moon
        - wildflower
        - eva
        - amber
        - maya
        - lagoon
        - breeze
        - helen
        - joy
        - marsh
        - creek
        - cedar
        - alpine
        - summit
        - nicholas
        - tyler
        - colin
        - hank
        - thunder
        - astra
        - eucalyptus
        - moraine
        - peak
        - tundra
        - mesa_extra
        - talon
        - marlu
        - glacier
        - falcon
        - luna
        - celeste
        - estelle
        - andromeda
        - esther
        - lyra
        - lintel
        - oculus
        - vespera
        - transom
        - bond
        - arcade
        - atrium
        - cupola
        - fern
        - sirius
        - orion
        - masonry
        - albion
        - parapet
      description: >-
        Popular Rime AI voices across mist, mistv2, and arcana models. Any valid
        Rime AI voice ID is accepted, not just these suggestions.
      title: RimeAiVoiceId0
    RimeAIVoiceId:
      oneOf:
        - $ref: '#/components/schemas/RimeAiVoiceId0'
        - type: string
      description: This is the provider-specific ID that will be used.
      title: RimeAIVoiceId
    RimeAiVoiceModel:
      type: string
      enum:
        - arcana
        - mistv2
        - mist
      description: >-
        This is the model that will be used. Defaults to 'arcana' when not
        specified.
      title: RimeAiVoiceModel
    RimeAiVoiceLanguage:
      type: string
      enum:
        - en
        - es
        - de
        - fr
        - ar
        - hi
        - ja
        - he
        - pt
        - ta
        - si
      description: >-
        Language for speech synthesis. Uses ISO 639 codes. Supported: en, es,
        de, fr, ar, hi, ja, he, pt, ta, si.
      title: RimeAiVoiceLanguage
    RimeAIVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/RimeAiVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          $ref: '#/components/schemas/RimeAIVoiceId'
          description: This is the provider-specific ID that will be used.
        model:
          $ref: '#/components/schemas/RimeAiVoiceModel'
          description: >-
            This is the model that will be used. Defaults to 'arcana' when not
            specified.
        speed:
          type: number
          format: double
          description: This is the speed multiplier that will be used.
        pauseBetweenBrackets:
          type: boolean
          description: >-
            This is a flag that controls whether to add slight pauses using
            angle brackets. Example: "Hi. <200> I'd love to have a conversation
            with you." adds a 200ms pause between the first and second
            sentences.
        phonemizeBetweenBrackets:
          type: boolean
          description: >-
            This is a flag that controls whether text inside brackets should be
            phonemized (converted to phonetic pronunciation) - Example:
            "{h'El.o} World" will pronounce "Hello" as expected.
        reduceLatency:
          type: boolean
          description: >-
            This is a flag that controls whether to optimize for reduced latency
            in streaming.
            https://docs.rime.ai/api-reference/endpoint/websockets#param-reduce-latency
        inlineSpeedAlpha:
          type: string
          description: >-
            This is a string that allows inline speed control using alpha
            notation.
            https://docs.rime.ai/api-reference/endpoint/websockets#param-inline-speed-alpha
        language:
          $ref: '#/components/schemas/RimeAiVoiceLanguage'
          description: >-
            Language for speech synthesis. Uses ISO 639 codes. Supported: en,
            es, de, fr, ar, hi, ja, he, pt, ta, si.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
        fallbackPlan:
          $ref: '#/components/schemas/FallbackPlan'
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
      required:
        - provider
        - voiceId
      title: RimeAIVoice
    SmallestAiVoiceProvider:
      type: string
      enum:
        - smallest-ai
      description: This is the voice provider that will be used.
      title: SmallestAiVoiceProvider
    SmallestAiVoiceVoiceId0:
      type: string
      enum:
        - emily
        - jasmine
        - arman
        - james
        - mithali
        - aravind
        - raj
        - diya
        - raman
        - ananya
        - isha
        - william
        - aarav
        - monika
        - niharika
        - deepika
        - raghav
        - kajal
        - radhika
        - mansi
        - nisha
        - saurabh
        - pooja
        - saina
        - sanya
      title: SmallestAiVoiceVoiceId0
    SmallestAiVoiceVoiceId:
      oneOf:
        - $ref: '#/components/schemas/SmallestAiVoiceVoiceId0'
        - type: string
      description: This is the provider-specific ID that will be used.
      title: SmallestAiVoiceVoiceId
    SmallestAiVoiceModel:
      type: string
      enum:
        - lightning
      description: >-
        Smallest AI voice model to use. Defaults to 'lightning' when not
        specified.
      title: SmallestAiVoiceModel
    SmallestAIVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/SmallestAiVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          $ref: '#/components/schemas/SmallestAiVoiceVoiceId'
          description: This is the provider-specific ID that will be used.
        model:
          $ref: '#/components/schemas/SmallestAiVoiceModel'
          description: >-
            Smallest AI voice model to use. Defaults to 'lightning' when not
            specified.
        speed:
          type: number
          format: double
          description: This is the speed multiplier that will be used.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
        fallbackPlan:
          $ref: '#/components/schemas/FallbackPlan'
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
      required:
        - provider
        - voiceId
      title: SmallestAIVoice
    TavusVoiceProvider:
      type: string
      enum:
        - tavus
      description: This is the voice provider that will be used.
      title: TavusVoiceProvider
    TavusVoiceVoiceId0:
      type: string
      enum:
        - r52da2535a
      title: TavusVoiceVoiceId0
    TavusVoiceVoiceId:
      oneOf:
        - $ref: '#/components/schemas/TavusVoiceVoiceId0'
        - type: string
      description: This is the provider-specific ID that will be used.
      title: TavusVoiceVoiceId
    TavusVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/TavusVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          $ref: '#/components/schemas/TavusVoiceVoiceId'
          description: This is the provider-specific ID that will be used.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
        personaId:
          type: string
          description: >-
            This is the unique identifier for the persona that the replica will
            use in the conversation.
        callbackUrl:
          type: string
          description: >-
            This is the url that will receive webhooks with updates regarding
            the conversation state.
        conversationName:
          type: string
          description: This is the name for the conversation.
        conversationalContext:
          type: string
          description: >-
            This is the context that will be appended to any context provided in
            the persona, if one is provided.
        customGreeting:
          type: string
          description: >-
            This is the custom greeting that the replica will give once a
            participant joines the conversation.
        properties:
          $ref: '#/components/schemas/TavusConversationProperties'
          description: These are optional properties used to customize the conversation.
        fallbackPlan:
          $ref: '#/components/schemas/FallbackPlan'
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
      required:
        - provider
        - voiceId
      title: TavusVoice
    VapiVoiceProvider:
      type: string
      enum:
        - vapi
      description: This is the voice provider that will be used.
      title: VapiVoiceProvider
    VapiVoiceVoiceId:
      type: string
      enum:
        - Clara
        - Godfrey
        - Layla
        - Sid
        - Gustavo
        - Elliot
        - Kylie
        - Rohan
        - Lily
        - Savannah
        - Hana
        - Neha
        - Cole
        - Harry
        - Paige
        - Spencer
        - Nico
        - Kai
        - Emma
        - Sagar
        - Neil
        - Naina
        - Leah
        - Tara
        - Jess
        - Leo
        - Dan
        - Mia
        - Zac
        - Zoe
      description: The voices provided by Vapi
      title: VapiVoiceVoiceId
    VapiVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/VapiVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          $ref: '#/components/schemas/VapiVoiceVoiceId'
          description: The voices provided by Vapi
        speed:
          type: number
          format: double
          default: 1
          description: |-
            This is the speed multiplier that will be used.

            @default 1
        pronunciationDictionary:
          type: array
          items:
            $ref: '#/components/schemas/VapiPronunciationDictionaryLocator'
          description: >-
            List of pronunciation dictionary locators for custom word
            pronunciations.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
        fallbackPlan:
          $ref: '#/components/schemas/FallbackPlan'
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
      required:
        - provider
        - voiceId
      title: VapiVoice
    SesameVoiceProvider:
      type: string
      enum:
        - sesame
      description: This is the voice provider that will be used.
      title: SesameVoiceProvider
    SesameVoiceModel:
      type: string
      enum:
        - csm-1b
      description: This is the model that will be used.
      title: SesameVoiceModel
    SesameVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/SesameVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          type: string
          description: This is the provider-specific ID that will be used.
        model:
          $ref: '#/components/schemas/SesameVoiceModel'
          description: This is the model that will be used.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
        fallbackPlan:
          $ref: '#/components/schemas/FallbackPlan'
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
      required:
        - provider
        - voiceId
        - model
      title: SesameVoice
    InworldVoiceProvider:
      type: string
      enum:
        - inworld
      description: This is the voice provider that will be used.
      title: InworldVoiceProvider
    InworldVoiceVoiceId:
      type: string
      enum:
        - Alex
        - Ashley
        - Craig
        - Deborah
        - Dennis
        - Edward
        - Elizabeth
        - Hades
        - Julia
        - Pixie
        - Mark
        - Olivia
        - Priya
        - Ronald
        - Sarah
        - Shaun
        - Theodore
        - Timothy
        - Wendy
        - Dominus
        - Hana
        - Clive
        - Carter
        - Blake
        - Luna
        - Yichen
        - Xiaoyin
        - Xinyi
        - Jing
        - Erik
        - Katrien
        - Lennart
        - Lore
        - Alain
        - Hélène
        - Mathieu
        - Étienne
        - Johanna
        - Josef
        - Gianni
        - Orietta
        - Asuka
        - Satoshi
        - Hyunwoo
        - Minji
        - Seojun
        - Yoona
        - Szymon
        - Wojciech
        - Heitor
        - Maitê
        - Diego
        - Lupita
        - Miguel
        - Rafael
        - Svetlana
        - Elena
        - Dmitry
        - Nikolai
        - Riya
        - Manoj
        - Yael
        - Oren
        - Nour
        - Omar
      description: >-
        Available voices by language:

        • en: Alex, Ashley, Craig, Deborah, Dennis, Edward, Elizabeth, Hades,
        Julia, Pixie, Mark, Olivia, Priya, Ronald, Sarah, Shaun, Theodore,
        Timothy, Wendy, Dominus, Hana, Clive, Carter, Blake, Luna

        • zh: Yichen, Xiaoyin, Xinyi, Jing

        • nl: Erik, Katrien, Lennart, Lore

        • fr: Alain, Hélène, Mathieu, Étienne

        • de: Johanna, Josef

        • it: Gianni, Orietta

        • ja: Asuka, Satoshi

        • ko: Hyunwoo, Minji, Seojun, Yoona

        • pl: Szymon, Wojciech

        • pt: Heitor, Maitê

        • es: Diego, Lupita, Miguel, Rafael

        • ru: Svetlana, Elena, Dmitry, Nikolai

        • hi: Riya, Manoj

        • he: Yael, Oren

        • ar: Nour, Omar
      title: InworldVoiceVoiceId
    InworldVoiceModel:
      type: string
      enum:
        - inworld-tts-1
      default: inworld-tts-1
      description: This is the model that will be used.
      title: InworldVoiceModel
    InworldVoiceLanguageCode:
      type: string
      enum:
        - en
        - zh
        - ko
        - nl
        - fr
        - es
        - ja
        - de
        - it
        - pl
        - pt
        - ru
        - hi
        - he
        - ar
      default: en
      description: Language code for Inworld TTS synthesis
      title: InworldVoiceLanguageCode
    InworldVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/InworldVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          $ref: '#/components/schemas/InworldVoiceVoiceId'
          description: >-
            Available voices by language:

            • en: Alex, Ashley, Craig, Deborah, Dennis, Edward, Elizabeth,
            Hades, Julia, Pixie, Mark, Olivia, Priya, Ronald, Sarah, Shaun,
            Theodore, Timothy, Wendy, Dominus, Hana, Clive, Carter, Blake, Luna

            • zh: Yichen, Xiaoyin, Xinyi, Jing

            • nl: Erik, Katrien, Lennart, Lore

            • fr: Alain, Hélène, Mathieu, Étienne

            • de: Johanna, Josef

            • it: Gianni, Orietta

            • ja: Asuka, Satoshi

            • ko: Hyunwoo, Minji, Seojun, Yoona

            • pl: Szymon, Wojciech

            • pt: Heitor, Maitê

            • es: Diego, Lupita, Miguel, Rafael

            • ru: Svetlana, Elena, Dmitry, Nikolai

            • hi: Riya, Manoj

            • he: Yael, Oren

            • ar: Nour, Omar
        model:
          $ref: '#/components/schemas/InworldVoiceModel'
          description: This is the model that will be used.
        languageCode:
          $ref: '#/components/schemas/InworldVoiceLanguageCode'
          description: Language code for Inworld TTS synthesis
        temperature:
          type: number
          format: double
          default: 1.1
          description: >-
            A floating point number between 0, exclusive, and 2, inclusive. If
            equal to null or not provided, the model's default temperature of
            1.1 will be used. The temperature parameter controls variance.

            Higher values will make the output more random and can lead to more
            expressive results. Lower values will make it more deterministic.

            See
            https://docs.inworld.ai/docs/tts/capabilities/generating-audio#additional-configurations
            for more details.
        speakingRate:
          type: number
          format: double
          default: 1
          description: >-
            A floating point number between 0.5, inclusive, and 1.5, inclusive.
            If equal to null or not provided, the model's default speaking speed
            of 1.0 will be used.

            Values above 0.8 are recommended for higher quality.

            See
            https://docs.inworld.ai/docs/tts/capabilities/generating-audio#additional-configurations
            for more details.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
        fallbackPlan:
          $ref: '#/components/schemas/FallbackPlan'
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
      required:
        - provider
        - voiceId
      title: InworldVoice
    MinimaxVoiceProvider:
      type: string
      enum:
        - minimax
      description: This is the voice provider that will be used.
      title: MinimaxVoiceProvider
    MinimaxVoiceModel:
      type: string
      enum:
        - speech-02-hd
        - speech-02-turbo
        - speech-2.5-turbo-preview
      default: speech-02-turbo
      description: >-
        This is the model that will be used. Options are 'speech-02-hd' and
        'speech-02-turbo'.

        speech-02-hd is optimized for high-fidelity applications like voiceovers
        and audiobooks.

        speech-02-turbo is designed for real-time applications with low latency.


        @default "speech-02-turbo"
      title: MinimaxVoiceModel
    MinimaxVoiceSubtitleType:
      type: string
      enum:
        - word
        - sentence
      default: sentence
      description: |-
        Controls the granularity of subtitle/timing data returned by Minimax
        during synthesis. Set to 'word' to receive per-word timestamps in
        assistant.speechStarted events for karaoke-style caption rendering.

        @default "sentence"
      title: MinimaxVoiceSubtitleType
    MinimaxVoiceRegion:
      type: string
      enum:
        - worldwide
        - china
      default: worldwide
      description: The region for Minimax API. Defaults to "worldwide".
      title: MinimaxVoiceRegion
    MinimaxVoiceLanguageBoost:
      type: string
      enum:
        - Chinese
        - Chinese,Yue
        - English
        - Arabic
        - Russian
        - Spanish
        - French
        - Portuguese
        - German
        - Turkish
        - Dutch
        - Ukrainian
        - Vietnamese
        - Indonesian
        - Japanese
        - Italian
        - Korean
        - Thai
        - Polish
        - Romanian
        - Greek
        - Czech
        - Finnish
        - Hindi
        - Bulgarian
        - Danish
        - Hebrew
        - Malay
        - Persian
        - Slovak
        - Swedish
        - Croatian
        - Filipino
        - Hungarian
        - Norwegian
        - Slovenian
        - Catalan
        - Nynorsk
        - Tamil
        - Afrikaans
        - auto
      description: >-
        Language hint for MiniMax T2A. Example: yue (Cantonese), zh (Chinese),
        en (English).
      title: MinimaxVoiceLanguageBoost
    MinimaxVoice:
      type: object
      properties:
        cachingEnabled:
          type: boolean
          default: true
          description: This is the flag to toggle voice caching for the assistant.
        provider:
          $ref: '#/components/schemas/MinimaxVoiceProvider'
          description: This is the voice provider that will be used.
        voiceId:
          type: string
          description: >-
            This is the provider-specific ID that will be used. Use a voice from
            MINIMAX_PREDEFINED_VOICES or a custom cloned voice ID.
        model:
          $ref: '#/components/schemas/MinimaxVoiceModel'
          description: >-
            This is the model that will be used. Options are 'speech-02-hd' and
            'speech-02-turbo'.

            speech-02-hd is optimized for high-fidelity applications like
            voiceovers and audiobooks.

            speech-02-turbo is designed for real-time applications with low
            latency.


            @default "speech-02-turbo"
        emotion:
          type: string
          description: >-
            The emotion to use for the voice. If not provided, will use
            auto-detect mode.

            Options include: 'happy', 'sad', 'angry', 'fearful', 'surprised',
            'disgusted', 'neutral'
        subtitleType:
          $ref: '#/components/schemas/MinimaxVoiceSubtitleType'
          description: |-
            Controls the granularity of subtitle/timing data returned by Minimax
            during synthesis. Set to 'word' to receive per-word timestamps in
            assistant.speechStarted events for karaoke-style caption rendering.

            @default "sentence"
        pitch:
          type: number
          format: double
          default: 0
          description: |-
            Voice pitch adjustment. Range from -12 to 12 semitones.
            @default 0
        speed:
          type: number
          format: double
          default: 1
          description: |-
            Voice speed adjustment. Range from 0.5 to 2.0.
            @default 1.0
        volume:
          type: number
          format: double
          default: 1
          description: |-
            Voice volume adjustment. Range from 0.5 to 2.0.
            @default 1.0
        region:
          $ref: '#/components/schemas/MinimaxVoiceRegion'
          description: The region for Minimax API. Defaults to "worldwide".
        languageBoost:
          $ref: '#/components/schemas/MinimaxVoiceLanguageBoost'
          description: >-
            Language hint for MiniMax T2A. Example: yue (Cantonese), zh
            (Chinese), en (English).
        textNormalizationEnabled:
          type: boolean
          default: true
          description: >-
            Enable MiniMax text normalization to improve number reading and
            formatting.
        chunkPlan:
          $ref: '#/components/schemas/ChunkPlan'
          description: >-
            This is the plan for chunking the model output before it is sent to
            the voice provider.
        fallbackPlan:
          $ref: '#/components/schemas/FallbackPlan'
          description: >-
            This is the plan for voice provider fallbacks in the event that the
            primary voice provider fails.
      required:
        - provider
        - voiceId
      title: MinimaxVoice
    AssistantOverridesVoice:
      oneOf:
        - $ref: '#/components/schemas/AzureVoice'
        - $ref: '#/components/schemas/CartesiaVoice'
        - $ref: '#/components/schemas/CustomVoice'
        - $ref: '#/components/schemas/DeepgramVoice'
        - $ref: '#/components/schemas/ElevenLabsVoice'
        - $ref: '#/components/schemas/HumeVoice'
        - $ref: '#/components/schemas/LMNTVoice'
        - $ref: '#/components/schemas/NeuphonicVoice'
        - $ref: '#/components/schemas/OpenAIVoice'
        - $ref: '#/components/schemas/PlayHTVoice'
        - $ref: '#/components/schemas/WellSaidVoice'
        - $ref: '#/components/schemas/RimeAIVoice'
        - $ref: '#/components/schemas/SmallestAIVoice'
        - $ref: '#/components/schemas/TavusVoice'
        - $ref: '#/components/schemas/VapiVoice'
        - $ref: '#/components/schemas/SesameVoice'
        - $ref: '#/components/schemas/InworldVoice'
        - $ref: '#/components/schemas/MinimaxVoice'
      description: These are the options for the assistant's voice.
      title: AssistantOverridesVoice
    AssistantOverridesFirstMessageMode:
      type: string
      enum:
        - assistant-speaks-first
        - assistant-speaks-first-with-model-generated-message
        - assistant-waits-for-user
      description: >-
        This is the mode for the first message. Default is
        'assistant-speaks-first'.


        Use:

        - 'assistant-speaks-first' to have the assistant speak first.

        - 'assistant-waits-for-user' to have the assistant wait for the user to
        speak first.

        - 'assistant-speaks-first-with-model-generated-message' to have the
        assistant speak first with a message generated by the model based on the
        conversation state. (`assistant.model.messages` at call start,
        `call.messages` at squad transfer points).


        @default 'assistant-speaks-first'
      title: AssistantOverridesFirstMessageMode
    AssistantOverridesVoicemailDetection0:
      type: string
      enum:
        - 'off'
      title: AssistantOverridesVoicemailDetection0
    GoogleVoicemailDetectionPlanProvider:
      type: string
      enum:
        - google
      description: This is the provider to use for voicemail detection.
      title: GoogleVoicemailDetectionPlanProvider
    VoicemailDetectionBackoffPlan:
      type: object
      properties:
        startAtSeconds:
          type: number
          format: double
          default: 5
          description: >-
            This is the number of seconds to wait before starting the first
            retry attempt.
        frequencySeconds:
          type: number
          format: double
          default: 5
          description: This is the interval in seconds between retry attempts.
        maxRetries:
          type: number
          format: double
          default: 6
          description: This is the maximum number of retry attempts before giving up.
      title: VoicemailDetectionBackoffPlan
    GoogleVoicemailDetectionPlanType:
      type: string
      enum:
        - audio
        - transcript
      description: |-
        This is the detection type to use for voicemail detection.
        - 'audio': Uses native audio models (default)
        - 'transcript': Uses ASR/transcript-based detection
        @default 'audio' (audio detection)
      title: GoogleVoicemailDetectionPlanType
    GoogleVoicemailDetectionPlan:
      type: object
      properties:
        beepMaxAwaitSeconds:
          type: number
          format: double
          default: 30
          description: >-
            This is the maximum duration from the start of the call that we will
            wait for a voicemail beep, before speaking our message


            - If we detect a voicemail beep before this, we will speak the
            message at that point.


            - Setting too low a value means that the bot will start speaking its
            voicemail message too early. If it does so before the actual beep,
            it will get cut off. You should definitely tune this to your use
            case.


            @default 30

            @min 0

            @max 60
        provider:
          $ref: '#/components/schemas/GoogleVoicemailDetectionPlanProvider'
          description: This is the provider to use for voicemail detection.
        backoffPlan:
          $ref: '#/components/schemas/VoicemailDetectionBackoffPlan'
          description: This is the backoff plan for the voicemail detection.
        type:
          $ref: '#/components/schemas/GoogleVoicemailDetectionPlanType'
          description: |-
            This is the detection type to use for voicemail detection.
            - 'audio': Uses native audio models (default)
            - 'transcript': Uses ASR/transcript-based detection
            @default 'audio' (audio detection)
      required:
        - provider
      title: GoogleVoicemailDetectionPlan
    OpenAiVoicemailDetectionPlanProvider:
      type: string
      enum:
        - openai
      description: This is the provider to use for voicemail detection.
      title: OpenAiVoicemailDetectionPlanProvider
    OpenAiVoicemailDetectionPlanType:
      type: string
      enum:
        - audio
        - transcript
      description: |-
        This is the detection type to use for voicemail detection.
        - 'audio': Uses native audio models (default)
        - 'transcript': Uses ASR/transcript-based detection
        @default 'audio' (audio detection)
      title: OpenAiVoicemailDetectionPlanType
    OpenAIVoicemailDetectionPlan:
      type: object
      properties:
        beepMaxAwaitSeconds:
          type: number
          format: double
          default: 30
          description: >-
            This is the maximum duration from the start of the call that we will
            wait for a voicemail beep, before speaking our message


            - If we detect a voicemail beep before this, we will speak the
            message at that point.


            - Setting too low a value means that the bot will start speaking its
            voicemail message too early. If it does so before the actual beep,
            it will get cut off. You should definitely tune this to your use
            case.


            @default 30

            @min 0

            @max 60
        provider:
          $ref: '#/components/schemas/OpenAiVoicemailDetectionPlanProvider'
          description: This is the provider to use for voicemail detection.
        backoffPlan:
          $ref: '#/components/schemas/VoicemailDetectionBackoffPlan'
          description: This is the backoff plan for the voicemail detection.
        type:
          $ref: '#/components/schemas/OpenAiVoicemailDetectionPlanType'
          description: |-
            This is the detection type to use for voicemail detection.
            - 'audio': Uses native audio models (default)
            - 'transcript': Uses ASR/transcript-based detection
            @default 'audio' (audio detection)
      required:
        - provider
      title: OpenAIVoicemailDetectionPlan
    TwilioVoicemailDetectionPlanProvider:
      type: string
      enum:
        - twilio
      description: This is the provider to use for voicemail detection.
      title: TwilioVoicemailDetectionPlanProvider
    TwilioVoicemailDetectionPlanVoicemailDetectionTypes:
      type: string
      enum:
        - machine_start
        - human
        - fax
        - unknown
        - machine_end_beep
        - machine_end_silence
        - machine_end_other
      description: >-
        These are the AMD messages from Twilio that are considered as voicemail.
        Default is ['machine_end_beep', 'machine_end_silence'].


        @default {Array} ['machine_end_beep', 'machine_end_silence']
      title: TwilioVoicemailDetectionPlanVoicemailDetectionTypes
    TwilioVoicemailDetectionPlan:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/TwilioVoicemailDetectionPlanProvider'
          description: This is the provider to use for voicemail detection.
        voicemailDetectionTypes:
          $ref: >-
            #/components/schemas/TwilioVoicemailDetectionPlanVoicemailDetectionTypes
          description: >-
            These are the AMD messages from Twilio that are considered as
            voicemail. Default is ['machine_end_beep', 'machine_end_silence'].


            @default {Array} ['machine_end_beep', 'machine_end_silence']
        enabled:
          type: boolean
          description: >-
            This sets whether the assistant should detect voicemail. Defaults to
            true.


            @default true
        machineDetectionTimeout:
          type: number
          format: double
          description: >-
            The number of seconds that Twilio should attempt to perform
            answering machine detection before timing out and returning
            AnsweredBy as unknown. Default is 30 seconds.


            Increasing this value will provide the engine more time to make a
            determination. This can be useful when DetectMessageEnd is provided
            in the MachineDetection parameter and there is an expectation of
            long answering machine greetings that can exceed 30 seconds.


            Decreasing this value will reduce the amount of time the engine has
            to make a determination. This can be particularly useful when the
            Enable option is provided in the MachineDetection parameter and you
            want to limit the time for initial detection.


            Check the [Twilio
            docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters)
            for more info.


            @default 30
        machineDetectionSpeechThreshold:
          type: number
          format: double
          description: >-
            The number of milliseconds that is used as the measuring stick for
            the length of the speech activity. Durations lower than this value
            will be interpreted as a human, longer as a machine. Default is 2400
            milliseconds.


            Increasing this value will reduce the chance of a False Machine
            (detected machine, actually human) for a long human greeting (e.g.,
            a business greeting) but increase the time it takes to detect a
            machine.


            Decreasing this value will reduce the chances of a False Human
            (detected human, actually machine) for short voicemail greetings.
            The value of this parameter may need to be reduced by more than
            1000ms to detect very short voicemail greetings. A reduction of that
            significance can result in increased False Machine detections.
            Adjusting the MachineDetectionSpeechEndThreshold is likely the
            better approach for short voicemails. Decreasing
            MachineDetectionSpeechThreshold will also reduce the time it takes
            to detect a machine.


            Check the [Twilio
            docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters)
            for more info.


            @default 2400
        machineDetectionSpeechEndThreshold:
          type: number
          format: double
          description: >-
            The number of milliseconds of silence after speech activity at which
            point the speech activity is considered complete. Default is 1200
            milliseconds.


            Increasing this value will typically be used to better address the
            short voicemail greeting scenarios. For short voicemails, there is
            typically 1000-2000ms of audio followed by 1200-2400ms of silence
            and then additional audio before the beep. Increasing the
            MachineDetectionSpeechEndThreshold to ~2500ms will treat the
            1200-2400ms of silence as a gap in the greeting but not the end of
            the greeting and will result in a machine detection. The downsides
            of such a change include:

            - Increasing the delay for human detection by the amount you
            increase this parameter, e.g., a change of 1200ms to 2500ms
            increases human detection delay by 1300ms.

            - Cases where a human has two utterances separated by a period of
            silence (e.g. a "Hello", then 2000ms of silence, and another
            "Hello") may be interpreted as a machine.


            Decreasing this value will result in faster human detection. The
            consequence is that it can lead to increased False Human (detected
            human, actually machine) detections because a silence gap in a
            voicemail greeting (not necessarily just in short voicemail
            scenarios) can be incorrectly interpreted as the end of speech.


            Check the [Twilio
            docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters)
            for more info.


            @default 1200
        machineDetectionSilenceTimeout:
          type: number
          format: double
          description: >-
            The number of milliseconds of initial silence after which an unknown
            AnsweredBy result will be returned. Default is 5000 milliseconds.


            Increasing this value will result in waiting for a longer period of
            initial silence before returning an 'unknown' AMD result.


            Decreasing this value will result in waiting for a shorter period of
            initial silence before returning an 'unknown' AMD result.


            Check the [Twilio
            docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters)
            for more info.


            @default 5000
      required:
        - provider
      title: TwilioVoicemailDetectionPlan
    VapiVoicemailDetectionPlanProvider:
      type: string
      enum:
        - vapi
      description: This is the provider to use for voicemail detection.
      title: VapiVoicemailDetectionPlanProvider
    VapiVoicemailDetectionPlanType:
      type: string
      enum:
        - audio
        - transcript
      description: |-
        This is the detection type to use for voicemail detection.
        - 'audio': Uses native audio models (default)
        - 'transcript': Uses ASR/transcript-based detection
        @default 'audio' (audio detection)
      title: VapiVoicemailDetectionPlanType
    VapiVoicemailDetectionPlan:
      type: object
      properties:
        beepMaxAwaitSeconds:
          type: number
          format: double
          default: 30
          description: >-
            This is the maximum duration from the start of the call that we will
            wait for a voicemail beep, before speaking our message


            - If we detect a voicemail beep before this, we will speak the
            message at that point.


            - Setting too low a value means that the bot will start speaking its
            voicemail message too early. If it does so before the actual beep,
            it will get cut off. You should definitely tune this to your use
            case.


            @default 30

            @min 0

            @max 60
        provider:
          $ref: '#/components/schemas/VapiVoicemailDetectionPlanProvider'
          description: This is the provider to use for voicemail detection.
        backoffPlan:
          $ref: '#/components/schemas/VoicemailDetectionBackoffPlan'
          description: This is the backoff plan for the voicemail detection.
        type:
          $ref: '#/components/schemas/VapiVoicemailDetectionPlanType'
          description: |-
            This is the detection type to use for voicemail detection.
            - 'audio': Uses native audio models (default)
            - 'transcript': Uses ASR/transcript-based detection
            @default 'audio' (audio detection)
      required:
        - provider
      title: VapiVoicemailDetectionPlan
    AssistantOverridesVoicemailDetection:
      oneOf:
        - $ref: '#/components/schemas/AssistantOverridesVoicemailDetection0'
        - $ref: '#/components/schemas/GoogleVoicemailDetectionPlan'
        - $ref: '#/components/schemas/OpenAIVoicemailDetectionPlan'
        - $ref: '#/components/schemas/TwilioVoicemailDetectionPlan'
        - $ref: '#/components/schemas/VapiVoicemailDetectionPlan'
      description: >-
        These are the settings to configure or disable voicemail detection.
        Alternatively, voicemail detection can be configured using the
        model.tools=[VoicemailTool].

        By default, voicemail detection is disabled.
      title: AssistantOverridesVoicemailDetection
    AssistantOverridesClientMessages:
      type: string
      enum:
        - conversation-update
        - assistant.speechStarted
        - function-call
        - function-call-result
        - hang
        - language-changed
        - metadata
        - model-output
        - speech-update
        - status-update
        - transcript
        - tool-calls
        - tool-calls-result
        - tool.completed
        - transfer-update
        - user-interrupted
        - voice-input
        - workflow.node.started
        - assistant.started
      description: >-
        These are the messages that will be sent to your Client SDKs. Default is
        conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started,assistant.started.
        You can check the shape of the messages in ClientMessage schema.
      title: AssistantOverridesClientMessages
    AssistantOverridesServerMessages:
      type: string
      enum:
        - assistant.started
        - assistant.speechStarted
        - conversation-update
        - end-of-call-report
        - function-call
        - hang
        - language-changed
        - language-change-detected
        - model-output
        - phone-call-control
        - speech-update
        - status-update
        - transcript
        - transcript[transcriptType="final"]
        - tool-calls
        - transfer-destination-request
        - handoff-destination-request
        - transfer-update
        - user-interrupted
        - voice-input
        - chat.created
        - chat.deleted
        - session.created
        - session.updated
        - session.deleted
        - call.deleted
        - call.delete.failed
      description: >-
        These are the messages that will be sent to your Server URL. Default is
        conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,handoff-destination-request,user-interrupted,assistant.started.
        You can check the shape of the messages in ServerMessage schema.
      title: AssistantOverridesServerMessages
    AssistantOverridesBackgroundSound0:
      type: string
      enum:
        - 'off'
        - office
      title: AssistantOverridesBackgroundSound0
    AssistantOverridesBackgroundSound:
      oneOf:
        - $ref: '#/components/schemas/AssistantOverridesBackgroundSound0'
        - type: string
          format: uri
      description: >-
        This is the background sound in the call. Default for phone calls is
        'office' and default for web calls is 'off'.

        You can also provide a custom sound by providing a URL to an audio file.
      title: AssistantOverridesBackgroundSound
    TransportConfigurationTwilioProvider:
      type: string
      enum:
        - twilio
      title: TransportConfigurationTwilioProvider
    TransportConfigurationTwilioRecordingChannels:
      type: string
      enum:
        - mono
        - dual
      description: >-
        The number of channels in the final recording.

        Can be: `mono` or `dual`.

        The default is `mono`.

        `mono` records both legs of the call in a single channel of the
        recording file.

        `dual` records each leg to a separate channel of the recording file.

        The first channel of a dual-channel recording contains the parent call
        and the second channel contains the child call.


        @default 'mono'
      title: TransportConfigurationTwilioRecordingChannels
    TransportConfigurationTwilio:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/TransportConfigurationTwilioProvider'
        timeout:
          type: number
          format: double
          description: >-
            The integer number of seconds that we should allow the phone to ring
            before assuming there is no answer.

            The default is `60` seconds and the maximum is `600` seconds.

            For some call flows, we will add a 5-second buffer to the timeout
            value you provide.

            For this reason, a timeout value of 10 seconds could result in an
            actual timeout closer to 15 seconds.

            You can set this to a short time, such as `15` seconds, to hang up
            before reaching an answering machine or voicemail.


            @default 60
        record:
          type: boolean
          description: |-
            Whether to record the call.
            Can be `true` to record the phone call, or `false` to not.
            The default is `false`.

            @default false
        recordingChannels:
          $ref: '#/components/schemas/TransportConfigurationTwilioRecordingChannels'
          description: >-
            The number of channels in the final recording.

            Can be: `mono` or `dual`.

            The default is `mono`.

            `mono` records both legs of the call in a single channel of the
            recording file.

            `dual` records each leg to a separate channel of the recording file.

            The first channel of a dual-channel recording contains the parent
            call and the second channel contains the child call.


            @default 'mono'
      required:
        - provider
      title: TransportConfigurationTwilio
    AssistantOverridesTransportConfigurationsItems:
      oneOf:
        - $ref: '#/components/schemas/TransportConfigurationTwilio'
      title: AssistantOverridesTransportConfigurationsItems
    LangfuseObservabilityPlanProvider:
      type: string
      enum:
        - langfuse
      title: LangfuseObservabilityPlanProvider
    LangfuseObservabilityPlanMetadata:
      type: object
      properties: {}
      description: >-
        This is a JSON object that will be added to the Langfuse trace. Traces
        can be enriched with metadata to better understand your users,
        application, and experiments.
        https://langfuse.com/docs/tracing-features/metadata

        By default it includes the call metadata, assistant metadata, and
        assistant overrides.
      title: LangfuseObservabilityPlanMetadata
    LangfuseObservabilityPlan:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/LangfuseObservabilityPlanProvider'
        promptName:
          type: string
          description: >-
            The name of a Langfuse prompt to link generations to. This enables
            tracking which prompt version was used for each generation.
            https://langfuse.com/docs/prompt-management/features/link-to-traces
        promptVersion:
          type: number
          format: double
          description: >-
            The version number of the Langfuse prompt to link generations to.
            Used together with promptName to identify the exact prompt version.
            https://langfuse.com/docs/prompt-management/features/link-to-traces
        traceName:
          type: string
          description: >-
            Custom name for the Langfuse trace. Supports Liquid templates.


            Available variables:

            - {{ call.id }} - Call UUID

            - {{ call.type }} - 'inboundPhoneCall', 'outboundPhoneCall',
            'webCall'

            - {{ assistant.name }} - Assistant name

            - {{ assistant.id }} - Assistant ID


            Example: "{{ assistant.name }} - {{ call.type }}"


            Defaults to call ID if not provided.
        tags:
          type: array
          items:
            type: string
          description: >-
            This is an array of tags to be added to the Langfuse trace. Tags
            allow you to categorize and filter traces.
            https://langfuse.com/docs/tracing-features/tags
        metadata:
          $ref: '#/components/schemas/LangfuseObservabilityPlanMetadata'
          description: >-
            This is a JSON object that will be added to the Langfuse trace.
            Traces can be enriched with metadata to better understand your
            users, application, and experiments.
            https://langfuse.com/docs/tracing-features/metadata

            By default it includes the call metadata, assistant metadata, and
            assistant overrides.
      required:
        - provider
        - tags
      title: LangfuseObservabilityPlan
    CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAnthropicBedrockRegion:
      type: string
      enum:
        - us-east-1
        - us-west-2
        - eu-west-1
        - eu-west-3
        - ap-northeast-1
        - ap-southeast-2
      description: AWS region where Bedrock is configured.
      title: >-
        CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAnthropicBedrockRegion
    AwsiamCredentialsAuthenticationPlanType:
      type: string
      enum:
        - aws-iam
      title: AwsiamCredentialsAuthenticationPlanType
    AWSIAMCredentialsAuthenticationPlan:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/AwsiamCredentialsAuthenticationPlanType'
        awsAccessKeyId:
          type: string
          description: AWS Access Key ID. This is not returned in the API.
        awsSecretAccessKey:
          type: string
          description: AWS Secret Access Key. This is not returned in the API.
      required:
        - type
        - awsAccessKeyId
        - awsSecretAccessKey
      title: AWSIAMCredentialsAuthenticationPlan
    AwsStsAuthenticationPlanType:
      type: string
      enum:
        - aws-sts
      description: This is the type of authentication plan
      title: AwsStsAuthenticationPlanType
    AWSStsAuthenticationPlan:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/AwsStsAuthenticationPlanType'
          description: This is the type of authentication plan
        roleArn:
          type: string
          description: This is the role ARN for the AWS credential
        externalId:
          type: string
          description: >-
            Optional external ID for additional security in the role trust
            policy.
      required:
        - type
        - roleArn
      title: AWSStsAuthenticationPlan
    CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAnthropicBedrockAuthenticationPlan:
      oneOf:
        - $ref: '#/components/schemas/AWSIAMCredentialsAuthenticationPlan'
        - $ref: '#/components/schemas/AWSStsAuthenticationPlan'
      description: >-
        Authentication method - either direct IAM credentials or cross-account
        role assumption.
      title: >-
        CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAnthropicBedrockAuthenticationPlan
    CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAzureOpenaiRegion:
      type: string
      enum:
        - australiaeast
        - canadaeast
        - canadacentral
        - centralus
        - eastus2
        - eastus
        - france
        - germanywestcentral
        - india
        - japaneast
        - japanwest
        - northcentralus
        - norway
        - polandcentral
        - southcentralus
        - spaincentral
        - swedencentral
        - switzerland
        - uaenorth
        - uk
        - westeurope
        - westus
        - westus3
      title: CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAzureOpenaiRegion
    CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAzureOpenaiModels:
      type: string
      enum:
        - gpt-5.4
        - gpt-5.4-mini
        - gpt-5.4-nano
        - gpt-5.2
        - gpt-5.2-chat
        - gpt-5.1
        - gpt-5.1-chat
        - gpt-5
        - gpt-5-mini
        - gpt-5-nano
        - gpt-4.1-2025-04-14
        - gpt-4.1-mini-2025-04-14
        - gpt-4.1-nano-2025-04-14
        - gpt-4o-2024-11-20
        - gpt-4o-2024-08-06
        - gpt-4o-2024-05-13
        - gpt-4o-mini-2024-07-18
        - gpt-4-turbo-2024-04-09
        - gpt-4-0125-preview
        - gpt-4-1106-preview
        - gpt-4-0613
        - gpt-35-turbo-0125
        - gpt-35-turbo-1106
      title: CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAzureOpenaiModels
    CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAzureService:
      type: string
      enum:
        - speech
        - blob_storage
      default: speech
      description: This is the service being used in Azure.
      title: CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAzureService
    CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAzureRegion:
      type: string
      enum:
        - australiaeast
        - canadaeast
        - canadacentral
        - centralus
        - eastus2
        - eastus
        - france
        - germanywestcentral
        - india
        - japaneast
        - japanwest
        - northcentralus
        - norway
        - polandcentral
        - southcentralus
        - spaincentral
        - swedencentral
        - switzerland
        - uaenorth
        - uk
        - westeurope
        - westus
        - westus3
      description: This is the region of the Azure resource.
      title: CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAzureRegion
    AzureBlobStorageBucketPlan:
      type: object
      properties:
        connectionString:
          type: string
          description: This is the blob storage connection string for the Azure resource.
        containerName:
          type: string
          description: This is the container name for the Azure blob storage.
        path:
          type: string
          description: >-
            This is the path where call artifacts will be stored.


            Usage:

            - To store call artifacts in a specific folder, set this to the full
            path. Eg. "/folder-name1/folder-name2".

            - To store call artifacts in the root of the bucket, leave this
            blank.


            @default "/"
      required:
        - connectionString
        - containerName
      title: AzureBlobStorageBucketPlan
    SipTrunkGatewayOutboundProtocol:
      type: string
      enum:
        - tls/srtp
        - tcp
        - tls
        - udp
      description: >-
        This is the protocol to use for SIP signaling outbound calls. Default is
        udp.


        @default udp
      title: SipTrunkGatewayOutboundProtocol
    SipTrunkGateway:
      type: object
      properties:
        ip:
          type: string
          description: >-
            This is the address of the gateway. It can be an IPv4 address like
            1.1.1.1 or a fully qualified domain name like
            my-sip-trunk.pstn.twilio.com.
        port:
          type: number
          format: double
          description: |-
            This is the port number of the gateway. Default is 5060.

            @default 5060
        netmask:
          type: number
          format: double
          description: |-
            This is the netmask of the gateway. Defaults to 32.

            @default 32
        inboundEnabled:
          type: boolean
          description: >-
            This is whether inbound calls are allowed from this gateway. Default
            is true.


            @default true
        outboundEnabled:
          type: boolean
          description: >-
            This is whether outbound calls should be sent to this gateway.
            Default is true.


            Note, if netmask is less than 32, it doesn't affect the outbound IPs
            that are tried. 1 attempt is made to `ip:port`.


            @default true
        outboundProtocol:
          $ref: '#/components/schemas/SipTrunkGatewayOutboundProtocol'
          description: >-
            This is the protocol to use for SIP signaling outbound calls.
            Default is udp.


            @default udp
        optionsPingEnabled:
          type: boolean
          description: >-
            This is whether to send options ping to the gateway. This can be
            used to check if the gateway is reachable. Default is false.


            This is useful for high availability setups where you want to check
            if the gateway is reachable before routing calls to it. Note, if no
            gateway for a trunk is reachable, outbound calls will be rejected.


            @default false
      required:
        - ip
      title: SipTrunkGateway
    SipTrunkOutboundSipRegisterPlan:
      type: object
      properties:
        domain:
          type: string
        username:
          type: string
        realm:
          type: string
      title: SipTrunkOutboundSipRegisterPlan
    SipTrunkOutboundAuthenticationPlan:
      type: object
      properties:
        authPassword:
          type: string
          description: This is not returned in the API.
        authUsername:
          type: string
        sipRegisterPlan:
          $ref: '#/components/schemas/SipTrunkOutboundSipRegisterPlan'
          description: >-
            This can be used to configure if SIP register is required by the SIP
            trunk. If not provided, no SIP registration will be attempted.
      title: SipTrunkOutboundAuthenticationPlan
    SbcConfiguration:
      type: object
      properties: {}
      title: SbcConfiguration
    CloudflareR2BucketPlan:
      type: object
      properties:
        accessKeyId:
          type: string
          description: Cloudflare R2 Access key ID.
        secretAccessKey:
          type: string
          description: Cloudflare R2 access key secret. This is not returned in the API.
        url:
          type: string
          description: Cloudflare R2 base url.
        name:
          type: string
          description: This is the name of the bucket.
        path:
          type: string
          description: >-
            This is the path where call artifacts will be stored.


            Usage:

            - To store call artifacts in a specific folder, set this to the full
            path. Eg. "/folder-name1/folder-name2".

            - To store call artifacts in the root of the bucket, leave this
            blank.


            @default "/"
      required:
        - name
      title: CloudflareR2BucketPlan
    OAuth2AuthenticationPlan:
      type: object
      properties:
        url:
          type: string
          description: This is the OAuth2 URL.
        clientId:
          type: string
          description: This is the OAuth2 client ID.
        clientSecret:
          type: string
          description: This is the OAuth2 client secret.
        scope:
          type: string
          description: This is the scope of the OAuth2 token.
      required:
        - url
        - clientId
        - clientSecret
      title: OAuth2AuthenticationPlan
    GcpKey:
      type: object
      properties:
        type:
          type: string
          description: This is the type of the key. Most likely, this is "service_account".
        projectId:
          type: string
          description: This is the ID of the Google Cloud project associated with this key.
        privateKeyId:
          type: string
          description: This is the unique identifier for the private key.
        privateKey:
          type: string
          description: |-
            This is the private key in PEM format.

            Note: This is not returned in the API.
        clientEmail:
          type: string
          description: This is the email address associated with the service account.
        clientId:
          type: string
          description: This is the unique identifier for the client.
        authUri:
          type: string
          description: This is the URI for the auth provider's authorization endpoint.
        tokenUri:
          type: string
          description: This is the URI for the auth provider's token endpoint.
        authProviderX509CertUrl:
          type: string
          description: >-
            This is the URL of the public x509 certificate for the auth
            provider.
        clientX509CertUrl:
          type: string
          description: This is the URL of the public x509 certificate for the client.
        universeDomain:
          type: string
          description: >-
            This is the domain associated with the universe this service account
            belongs to.
      required:
        - type
        - projectId
        - privateKeyId
        - privateKey
        - clientEmail
        - clientId
        - authUri
        - tokenUri
        - authProviderX509CertUrl
        - clientX509CertUrl
        - universeDomain
      title: GcpKey
    BucketPlan:
      type: object
      properties:
        name:
          type: string
          description: This is the name of the bucket.
        region:
          type: string
          description: >-
            This is the region of the bucket.


            Usage:

            - If `credential.type` is `aws`, then this is required.

            - If `credential.type` is `gcp`, then this is optional since GCP
            allows buckets to be accessed without a region but region is
            required for data residency requirements. Read here:
            https://cloud.google.com/storage/docs/request-endpoints


            This overrides the `credential.region` field if it is provided.
        path:
          type: string
          description: >-
            This is the path where call artifacts will be stored.


            Usage:

            - To store call artifacts in a specific folder, set this to the full
            path. Eg. "/folder-name1/folder-name2".

            - To store call artifacts in the root of the bucket, leave this
            blank.


            @default "/"
        hmacAccessKey:
          type: string
          description: >-
            This is the HMAC access key offered by GCP for interoperability with
            S3 clients. Here is the guide on how to create:
            https://cloud.google.com/storage/docs/authentication/managing-hmackeys#console


            Usage:

            - If `credential.type` is `gcp`, then this is required.

            - If `credential.type` is `aws`, then this is not required since
            credential.awsAccessKeyId is used instead.
        hmacSecret:
          type: string
          description: >-
            This is the secret for the HMAC access key. Here is the guide on how
            to create:
            https://cloud.google.com/storage/docs/authentication/managing-hmackeys#console


            Usage:

            - If `credential.type` is `gcp`, then this is required.

            - If `credential.type` is `aws`, then this is not required since
            credential.awsSecretAccessKey is used instead.


            Note: This is not returned in the API.
      required:
        - name
      title: BucketPlan
    SupabaseBucketPlanRegion:
      type: string
      enum:
        - us-west-1
        - us-east-1
        - us-east-2
        - ca-central-1
        - eu-west-1
        - eu-west-2
        - eu-west-3
        - eu-central-1
        - eu-central-2
        - eu-north-1
        - ap-south-1
        - ap-southeast-1
        - ap-northeast-1
        - ap-northeast-2
        - ap-southeast-2
        - sa-east-1
      description: >-
        This is the S3 Region. It should look like us-east-1

        It should be one of the supabase regions defined in the SUPABASE_REGION
        enum

        Check https://supabase.com/docs/guides/platform/regions for up to date
        regions
      title: SupabaseBucketPlanRegion
    SupabaseBucketPlan:
      type: object
      properties:
        region:
          $ref: '#/components/schemas/SupabaseBucketPlanRegion'
          description: >-
            This is the S3 Region. It should look like us-east-1

            It should be one of the supabase regions defined in the
            SUPABASE_REGION enum

            Check https://supabase.com/docs/guides/platform/regions for up to
            date regions
        url:
          type: string
          description: |-
            This is the S3 compatible URL for Supabase S3
            This should look like https://<project-ID>.supabase.co/storage/v1/s3
        accessKeyId:
          type: string
          description: |-
            This is the Supabase S3 Access Key ID.
            The user creates this in the Supabase project Storage settings
        secretAccessKey:
          type: string
          description: >-
            This is the Supabase S3 Secret Access Key.

            The user creates this in the Supabase project Storage settings along
            with the access key id
        name:
          type: string
          description: >-
            This is the Supabase S3 Bucket Name.

            The user must create this in Supabase under Storage > Buckets

            A bucket that does not exist will not be checked now, but file
            uploads will fail
        path:
          type: string
          description: >-
            This is the Supabase S3 Bucket Folder Path.

            The user can create this in Supabase under Storage > Buckets

            A path that does not exist will not be checked now, but file uploads
            will fail

            A Path is like a folder in the bucket

            Eg. If the bucket is called "my-bucket" and the path is "my-folder",
            the full path is "my-bucket/my-folder"
      required:
        - region
        - url
        - accessKeyId
        - secretAccessKey
        - name
      title: SupabaseBucketPlan
    CreateWorkflowDtoCredentialsItemsDiscriminatorMappingCustomCredentialAuthenticationPlanDiscriminatorMappingHmacAlgorithm:
      type: string
      enum:
        - sha256
        - sha512
        - sha1
      description: This is the HMAC algorithm to use for signing.
      title: >-
        CreateWorkflowDtoCredentialsItemsDiscriminatorMappingCustomCredentialAuthenticationPlanDiscriminatorMappingHmacAlgorithm
    CreateWorkflowDtoCredentialsItemsDiscriminatorMappingCustomCredentialAuthenticationPlanDiscriminatorMappingHmacSignatureEncoding:
      type: string
      enum:
        - hex
        - base64
      description: The encoding format for the signature. Defaults to 'hex'.
      title: >-
        CreateWorkflowDtoCredentialsItemsDiscriminatorMappingCustomCredentialAuthenticationPlanDiscriminatorMappingHmacSignatureEncoding
    CreateWorkflowDtoCredentialsItemsDiscriminatorMappingWebhookAuthenticationPlan:
      oneOf:
        - type: object
          properties:
            type:
              type: string
              enum:
                - oauth2
              description: 'Discriminator value: oauth2'
            url:
              type: string
              description: This is the OAuth2 URL.
            clientId:
              type: string
              description: This is the OAuth2 client ID.
            clientSecret:
              type: string
              description: This is the OAuth2 client secret.
            scope:
              type: string
              description: This is the scope of the OAuth2 token.
          required:
            - type
            - url
            - clientId
            - clientSecret
          description: oauth2 variant
        - type: object
          properties:
            type:
              type: string
              enum:
                - hmac
              description: 'Discriminator value: hmac'
            secretKey:
              type: string
              description: This is the HMAC secret key used to sign requests.
            algorithm:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingCustomCredentialAuthenticationPlanDiscriminatorMappingHmacAlgorithm
              description: This is the HMAC algorithm to use for signing.
            signatureHeader:
              type: string
              description: >-
                This is the header name where the signature will be sent.
                Defaults to 'x-signature'.
            timestampHeader:
              type: string
              description: >-
                This is the header name where the timestamp will be sent.
                Defaults to 'x-timestamp'.
            signaturePrefix:
              type: string
              description: >-
                This is the prefix for the signature. For example, 'sha256=' for
                GitHub-style signatures.
            includeTimestamp:
              type: boolean
              description: >-
                Whether to include a timestamp in the signature payload.
                Defaults to true.
            payloadFormat:
              type: string
              description: >-
                Custom payload format. Use {body} for request body, {timestamp}
                for timestamp, {method} for HTTP method, {url} for URL,
                {svix-id} for unique message ID. Defaults to
                '{timestamp}.{body}'.
            messageIdHeader:
              type: string
              description: >-
                This is the header name where the unique message ID will be
                sent. Used for Svix-style webhooks.
            signatureEncoding:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingCustomCredentialAuthenticationPlanDiscriminatorMappingHmacSignatureEncoding
              description: The encoding format for the signature. Defaults to 'hex'.
            secretIsBase64:
              type: boolean
              description: >-
                Whether the secret key is base64-encoded and should be decoded
                before use. Defaults to false.
          required:
            - type
            - secretKey
            - algorithm
          description: hmac variant
        - type: object
          properties:
            type:
              type: string
              enum:
                - bearer
              description: 'Discriminator value: bearer'
            token:
              type: string
              description: This is the bearer token value.
            headerName:
              type: string
              description: >-
                This is the header name where the bearer token will be sent.
                Defaults to 'Authorization'.
            bearerPrefixEnabled:
              type: boolean
              description: >-
                Whether to include the 'Bearer ' prefix in the header value.
                Defaults to true.
          required:
            - type
            - token
          description: bearer variant
      discriminator:
        propertyName: type
      description: >-
        This is the authentication plan. Supports OAuth2 RFC 6749, HMAC signing,
        and Bearer authentication.
      title: >-
        CreateWorkflowDtoCredentialsItemsDiscriminatorMappingWebhookAuthenticationPlan
    CreateWorkflowDtoCredentialsItemsDiscriminatorMappingCustomCredentialAuthenticationPlan:
      oneOf:
        - type: object
          properties:
            type:
              type: string
              enum:
                - oauth2
              description: 'Discriminator value: oauth2'
            url:
              type: string
              description: This is the OAuth2 URL.
            clientId:
              type: string
              description: This is the OAuth2 client ID.
            clientSecret:
              type: string
              description: This is the OAuth2 client secret.
            scope:
              type: string
              description: This is the scope of the OAuth2 token.
          required:
            - type
            - url
            - clientId
            - clientSecret
          description: oauth2 variant
        - type: object
          properties:
            type:
              type: string
              enum:
                - hmac
              description: 'Discriminator value: hmac'
            secretKey:
              type: string
              description: This is the HMAC secret key used to sign requests.
            algorithm:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingCustomCredentialAuthenticationPlanDiscriminatorMappingHmacAlgorithm
              description: This is the HMAC algorithm to use for signing.
            signatureHeader:
              type: string
              description: >-
                This is the header name where the signature will be sent.
                Defaults to 'x-signature'.
            timestampHeader:
              type: string
              description: >-
                This is the header name where the timestamp will be sent.
                Defaults to 'x-timestamp'.
            signaturePrefix:
              type: string
              description: >-
                This is the prefix for the signature. For example, 'sha256=' for
                GitHub-style signatures.
            includeTimestamp:
              type: boolean
              description: >-
                Whether to include a timestamp in the signature payload.
                Defaults to true.
            payloadFormat:
              type: string
              description: >-
                Custom payload format. Use {body} for request body, {timestamp}
                for timestamp, {method} for HTTP method, {url} for URL,
                {svix-id} for unique message ID. Defaults to
                '{timestamp}.{body}'.
            messageIdHeader:
              type: string
              description: >-
                This is the header name where the unique message ID will be
                sent. Used for Svix-style webhooks.
            signatureEncoding:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingCustomCredentialAuthenticationPlanDiscriminatorMappingHmacSignatureEncoding
              description: The encoding format for the signature. Defaults to 'hex'.
            secretIsBase64:
              type: boolean
              description: >-
                Whether the secret key is base64-encoded and should be decoded
                before use. Defaults to false.
          required:
            - type
            - secretKey
            - algorithm
          description: hmac variant
        - type: object
          properties:
            type:
              type: string
              enum:
                - bearer
              description: 'Discriminator value: bearer'
            token:
              type: string
              description: This is the bearer token value.
            headerName:
              type: string
              description: >-
                This is the header name where the bearer token will be sent.
                Defaults to 'Authorization'.
            bearerPrefixEnabled:
              type: boolean
              description: >-
                Whether to include the 'Bearer ' prefix in the header value.
                Defaults to true.
          required:
            - type
            - token
          description: bearer variant
      discriminator:
        propertyName: type
      description: >-
        This is the authentication plan. Supports OAuth2 RFC 6749, HMAC signing,
        and Bearer authentication.
      title: >-
        CreateWorkflowDtoCredentialsItemsDiscriminatorMappingCustomCredentialAuthenticationPlan
    PublicKeyEncryptionPlanType:
      type: string
      enum:
        - public-key
      description: The type of encryption plan.
      title: PublicKeyEncryptionPlanType
    PublicKeyEncryptionPlanAlgorithm:
      type: string
      enum:
        - RSA-OAEP-256
      description: The encryption algorithm to use.
      title: PublicKeyEncryptionPlanAlgorithm
    SpkiPemPublicKeyConfigFormat:
      type: string
      enum:
        - spki-pem
      description: The format of the public key.
      title: SpkiPemPublicKeyConfigFormat
    SpkiPemPublicKeyConfig:
      type: object
      properties:
        name:
          type: string
          description: Optional name of the key for identification purposes.
        format:
          $ref: '#/components/schemas/SpkiPemPublicKeyConfigFormat'
          description: The format of the public key.
        pem:
          type: string
          description: The PEM-encoded public key.
      required:
        - format
        - pem
      title: SpkiPemPublicKeyConfig
    PublicKeyEncryptionPlan:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/PublicKeyEncryptionPlanType'
          description: The type of encryption plan.
        algorithm:
          $ref: '#/components/schemas/PublicKeyEncryptionPlanAlgorithm'
          description: The encryption algorithm to use.
        publicKey:
          $ref: '#/components/schemas/SpkiPemPublicKeyConfig'
          description: The public key configuration.
      required:
        - type
        - algorithm
        - publicKey
      title: PublicKeyEncryptionPlan
    Oauth2AuthenticationSession:
      type: object
      properties:
        accessToken:
          type: string
          description: This is the OAuth2 access token.
        expiresAt:
          type: string
          format: date-time
          description: This is the OAuth2 access token expiration.
        refreshToken:
          type: string
          description: This is the OAuth2 refresh token.
      title: Oauth2AuthenticationSession
    AssistantOverridesCredentialsItems:
      oneOf:
        - type: object
          properties:
            provider:
              type: string
              enum:
                - 11labs
              description: 'Discriminator value: 11labs'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: 11labs variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - anthropic
              description: 'Discriminator value: anthropic'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: anthropic variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - anthropic-bedrock
              description: 'Discriminator value: anthropic-bedrock'
            region:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAnthropicBedrockRegion
              description: AWS region where Bedrock is configured.
            authenticationPlan:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAnthropicBedrockAuthenticationPlan
              description: >-
                Authentication method - either direct IAM credentials or
                cross-account role assumption.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - region
            - authenticationPlan
          description: anthropic-bedrock variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - anyscale
              description: 'Discriminator value: anyscale'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: anyscale variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - assembly-ai
              description: 'Discriminator value: assembly-ai'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: assembly-ai variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - azure-openai
              description: 'Discriminator value: azure-openai'
            region:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAzureOpenaiRegion
            models:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAzureOpenaiModels
            openAIKey:
              type: string
              description: This is not returned in the API.
            ocpApimSubscriptionKey:
              type: string
              description: This is not returned in the API.
            openAIEndpoint:
              type: string
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - region
            - models
            - openAIKey
            - openAIEndpoint
          description: azure-openai variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - azure
              description: 'Discriminator value: azure'
            service:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAzureService
              description: This is the service being used in Azure.
            region:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAzureRegion
              description: This is the region of the Azure resource.
            apiKey:
              type: string
              description: This is not returned in the API.
            fallbackIndex:
              type: number
              format: double
              description: >-
                This is the order in which this storage provider is tried during
                upload retries. Lower numbers are tried first in increasing
                order.
            bucketPlan:
              $ref: '#/components/schemas/AzureBlobStorageBucketPlan'
              description: >-
                This is the bucket plan that can be provided to store call
                artifacts in Azure Blob Storage.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - service
          description: azure variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - byo-sip-trunk
              description: 'Discriminator value: byo-sip-trunk'
            gateways:
              type: array
              items:
                $ref: '#/components/schemas/SipTrunkGateway'
              description: This is the list of SIP trunk's gateways.
            outboundAuthenticationPlan:
              $ref: '#/components/schemas/SipTrunkOutboundAuthenticationPlan'
              description: >-
                This can be used to configure the outbound authentication if
                required by the SIP trunk.
            outboundLeadingPlusEnabled:
              type: boolean
              description: >-
                This ensures the outbound origination attempts have a leading
                plus. Defaults to false to match conventional telecom behavior.


                Usage:

                - Vonage/Twilio requires leading plus for all outbound calls.
                Set this to true.


                @default false
            techPrefix:
              type: string
              description: >-
                This can be used to configure the tech prefix on outbound calls.
                This is an advanced property.
            sipDiversionHeader:
              type: string
              description: >-
                This can be used to enable the SIP diversion header for
                authenticating the calling number if the SIP trunk supports it.
                This is an advanced property.
            sbcConfiguration:
              $ref: '#/components/schemas/SbcConfiguration'
              description: >-
                This is an advanced configuration for enterprise deployments.
                This uses the onprem SBC to trunk into the SIP trunk's
                `gateways`, rather than the managed SBC provided by Vapi.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - gateways
          description: byo-sip-trunk variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - cartesia
              description: 'Discriminator value: cartesia'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: cartesia variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - cerebras
              description: 'Discriminator value: cerebras'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: cerebras variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - cloudflare
              description: 'Discriminator value: cloudflare'
            accountId:
              type: string
              description: Cloudflare Account Id.
            apiKey:
              type: string
              description: Cloudflare API Key / Token.
            accountEmail:
              type: string
              description: Cloudflare Account Email.
            fallbackIndex:
              type: number
              format: double
              description: >-
                This is the order in which this storage provider is tried during
                upload retries. Lower numbers are tried first in increasing
                order.
            bucketPlan:
              $ref: '#/components/schemas/CloudflareR2BucketPlan'
              description: >-
                This is the bucket plan that can be provided to store call
                artifacts in R2
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
          description: cloudflare variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - custom-llm
              description: 'Discriminator value: custom-llm'
            apiKey:
              type: string
              description: This is not returned in the API.
            authenticationPlan:
              $ref: '#/components/schemas/OAuth2AuthenticationPlan'
              description: >-
                This is the authentication plan. Currently supports OAuth2 RFC
                6749. To use Bearer authentication, use apiKey
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: custom-llm variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - deepgram
              description: 'Discriminator value: deepgram'
            apiKey:
              type: string
              description: This is not returned in the API.
            apiUrl:
              type: string
              description: >-
                This can be used to point to an onprem Deepgram instance.
                Defaults to api.deepgram.com.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: deepgram variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - deepinfra
              description: 'Discriminator value: deepinfra'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: deepinfra variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - deep-seek
              description: 'Discriminator value: deep-seek'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: deep-seek variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - gcp
              description: 'Discriminator value: gcp'
            fallbackIndex:
              type: number
              format: double
              description: >-
                This is the order in which this storage provider is tried during
                upload retries. Lower numbers are tried first in increasing
                order.
            gcpKey:
              $ref: '#/components/schemas/GcpKey'
              description: >-
                This is the GCP key. This is the JSON that can be generated in
                the Google Cloud Console at
                https://console.cloud.google.com/iam-admin/serviceaccounts/details/<service-account-id>/keys.


                The schema is identical to the JSON that GCP outputs.
            region:
              type: string
              description: This is the region of the GCP resource.
            bucketPlan:
              $ref: '#/components/schemas/BucketPlan'
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - gcpKey
          description: gcp variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - gladia
              description: 'Discriminator value: gladia'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: gladia variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - gohighlevel
              description: 'Discriminator value: gohighlevel'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: gohighlevel variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - google
              description: 'Discriminator value: google'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: google variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - groq
              description: 'Discriminator value: groq'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: groq variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - inflection-ai
              description: 'Discriminator value: inflection-ai'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: inflection-ai variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - langfuse
              description: 'Discriminator value: langfuse'
            publicKey:
              type: string
              description: 'The public key for Langfuse project. Eg: pk-lf-...'
            apiKey:
              type: string
              description: >-
                The secret key for Langfuse project. Eg: sk-lf-... .This is not
                returned in the API.
            apiUrl:
              type: string
              description: >-
                The host URL for Langfuse project. Eg:
                https://cloud.langfuse.com
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - publicKey
            - apiKey
            - apiUrl
          description: langfuse variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - lmnt
              description: 'Discriminator value: lmnt'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: lmnt variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - make
              description: 'Discriminator value: make'
            teamId:
              type: string
              description: Team ID
            region:
              type: string
              description: 'Region of your application. For example: eu1, eu2, us1, us2'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - teamId
            - region
            - apiKey
          description: make variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - openai
              description: 'Discriminator value: openai'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: openai variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - openrouter
              description: 'Discriminator value: openrouter'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: openrouter variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - perplexity-ai
              description: 'Discriminator value: perplexity-ai'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: perplexity-ai variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - playht
              description: 'Discriminator value: playht'
            apiKey:
              type: string
              description: This is not returned in the API.
            userId:
              type: string
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
            - userId
          description: playht variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - rime-ai
              description: 'Discriminator value: rime-ai'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: rime-ai variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - runpod
              description: 'Discriminator value: runpod'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: runpod variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - s3
              description: 'Discriminator value: s3'
            awsAccessKeyId:
              type: string
              description: AWS access key ID.
            awsSecretAccessKey:
              type: string
              description: AWS access key secret. This is not returned in the API.
            region:
              type: string
              description: AWS region in which the S3 bucket is located.
            s3BucketName:
              type: string
              description: AWS S3 bucket name.
            s3PathPrefix:
              type: string
              description: The path prefix for the uploaded recording. Ex. "recordings/"
            fallbackIndex:
              type: number
              format: double
              description: >-
                This is the order in which this storage provider is tried during
                upload retries. Lower numbers are tried first in increasing
                order.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - awsAccessKeyId
            - awsSecretAccessKey
            - region
            - s3BucketName
            - s3PathPrefix
          description: s3 variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - supabase
              description: 'Discriminator value: supabase'
            fallbackIndex:
              type: number
              format: double
              description: >-
                This is the order in which this storage provider is tried during
                upload retries. Lower numbers are tried first in increasing
                order.
            bucketPlan:
              $ref: '#/components/schemas/SupabaseBucketPlan'
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
          description: supabase variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - smallest-ai
              description: 'Discriminator value: smallest-ai'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: smallest-ai variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - tavus
              description: 'Discriminator value: tavus'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: tavus variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - together-ai
              description: 'Discriminator value: together-ai'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: together-ai variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - twilio
              description: 'Discriminator value: twilio'
            authToken:
              type: string
              description: This is not returned in the API.
            apiKey:
              type: string
              description: This is not returned in the API.
            apiSecret:
              type: string
              description: This is not returned in the API.
            accountSid:
              type: string
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - accountSid
          description: twilio variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - vonage
              description: 'Discriminator value: vonage'
            apiSecret:
              type: string
              description: This is not returned in the API.
            apiKey:
              type: string
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiSecret
            - apiKey
          description: vonage variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - webhook
              description: 'Discriminator value: webhook'
            authenticationPlan:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingWebhookAuthenticationPlan
              description: >-
                This is the authentication plan. Supports OAuth2 RFC 6749, HMAC
                signing, and Bearer authentication.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - authenticationPlan
          description: webhook variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - custom-credential
              description: 'Discriminator value: custom-credential'
            authenticationPlan:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingCustomCredentialAuthenticationPlan
              description: >-
                This is the authentication plan. Supports OAuth2 RFC 6749, HMAC
                signing, and Bearer authentication.
            encryptionPlan:
              $ref: '#/components/schemas/PublicKeyEncryptionPlan'
              description: >-
                This is the encryption plan for encrypting sensitive data.
                Currently supports public-key encryption.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - authenticationPlan
          description: custom-credential variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - xai
              description: 'Discriminator value: xai'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: xai variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - neuphonic
              description: 'Discriminator value: neuphonic'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: neuphonic variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - hume
              description: 'Discriminator value: hume'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: hume variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - mistral
              description: 'Discriminator value: mistral'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: mistral variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - speechmatics
              description: 'Discriminator value: speechmatics'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: speechmatics variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - soniox
              description: 'Discriminator value: soniox'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: soniox variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - trieve
              description: 'Discriminator value: trieve'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: trieve variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - google.calendar.oauth2-client
              description: 'Discriminator value: google.calendar.oauth2-client'
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
          description: google.calendar.oauth2-client variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - google.calendar.oauth2-authorization
              description: 'Discriminator value: google.calendar.oauth2-authorization'
            authorizationId:
              type: string
              description: The authorization ID for the OAuth2 authorization
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - authorizationId
          description: google.calendar.oauth2-authorization variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - google.sheets.oauth2-authorization
              description: 'Discriminator value: google.sheets.oauth2-authorization'
            authorizationId:
              type: string
              description: The authorization ID for the OAuth2 authorization
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - authorizationId
          description: google.sheets.oauth2-authorization variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - slack.oauth2-authorization
              description: 'Discriminator value: slack.oauth2-authorization'
            authorizationId:
              type: string
              description: The authorization ID for the OAuth2 authorization
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - authorizationId
          description: slack.oauth2-authorization variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - ghl.oauth2-authorization
              description: 'Discriminator value: ghl.oauth2-authorization'
            authenticationSession:
              $ref: '#/components/schemas/Oauth2AuthenticationSession'
              description: This is the authentication session for the credential.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - authenticationSession
          description: ghl.oauth2-authorization variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - inworld
              description: 'Discriminator value: inworld'
            apiKey:
              type: string
              description: >-
                This is the Inworld Basic (Base64) authentication token. This is
                not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: inworld variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - minimax
              description: 'Discriminator value: minimax'
            apiKey:
              type: string
              description: This is not returned in the API.
            groupId:
              type: string
              description: This is the Minimax Group ID.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
            - groupId
          description: minimax variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - wellsaid
              description: 'Discriminator value: wellsaid'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: wellsaid variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - email
              description: 'Discriminator value: email'
            email:
              type: string
              description: The recipient email address for alerts
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - email
          description: email variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - slack-webhook
              description: 'Discriminator value: slack-webhook'
            webhookUrl:
              type: string
              description: >-
                Slack incoming webhook URL. See
                https://api.slack.com/messaging/webhooks for setup instructions.
                This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - webhookUrl
          description: slack-webhook variant
      discriminator:
        propertyName: provider
      title: AssistantOverridesCredentialsItems
    CallHookCallEndingOn:
      type: string
      enum:
        - call.ending
      description: This is the event that triggers this hook
      title: CallHookCallEndingOn
    ToolCallHookActionType:
      type: string
      enum:
        - tool
      description: This is the type of action - must be "tool"
      title: ToolCallHookActionType
    ToolCallHookActionTool:
      oneOf:
        - $ref: '#/components/schemas/CreateApiRequestToolDTO'
        - $ref: '#/components/schemas/CreateBashToolDTO'
        - $ref: '#/components/schemas/CreateCodeToolDTO'
        - $ref: '#/components/schemas/CreateComputerToolDTO'
        - $ref: '#/components/schemas/CreateDtmfToolDTO'
        - $ref: '#/components/schemas/CreateEndCallToolDTO'
        - $ref: '#/components/schemas/CreateFunctionToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
        - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
        - $ref: '#/components/schemas/CreateHandoffToolDTO'
        - $ref: '#/components/schemas/CreateMcpToolDTO'
        - $ref: '#/components/schemas/CreateQueryToolDTO'
        - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
        - $ref: '#/components/schemas/CreateSmsToolDTO'
        - $ref: '#/components/schemas/CreateTextEditorToolDTO'
        - $ref: '#/components/schemas/CreateTransferCallToolDTO'
        - $ref: '#/components/schemas/CreateSipRequestToolDTO'
        - $ref: '#/components/schemas/CreateVoicemailToolDTO'
      description: >-
        This is the tool to call. To use an existing tool, send `toolId`
        instead.
      title: ToolCallHookActionTool
    ToolCallHookAction:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/ToolCallHookActionType'
          description: This is the type of action - must be "tool"
        tool:
          $ref: '#/components/schemas/ToolCallHookActionTool'
          description: >-
            This is the tool to call. To use an existing tool, send `toolId`
            instead.
        toolId:
          type: string
          description: >-
            This is the tool to call. To use a transient tool, send `tool`
            instead.
      required:
        - type
      title: ToolCallHookAction
    MessageAddHookActionType:
      type: string
      enum:
        - message.add
      description: This is the type of action - must be "message.add"
      title: MessageAddHookActionType
    MessageAddHookAction:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/MessageAddHookActionType'
          description: This is the type of action - must be "message.add"
        message:
          $ref: '#/components/schemas/OpenAIMessage'
          description: The message to add to the conversation in OpenAI format
        triggerResponseEnabled:
          type: boolean
          default: true
          description: Whether to trigger an assistant response after adding the message
      required:
        - type
        - message
      title: MessageAddHookAction
    CallHookCallEndingDoItems:
      oneOf:
        - $ref: '#/components/schemas/ToolCallHookAction'
        - $ref: '#/components/schemas/MessageAddHookAction'
      title: CallHookCallEndingDoItems
    CallHookFilterType:
      type: string
      enum:
        - oneOf
      description: This is the type of filter - currently only "oneOf" is supported
      title: CallHookFilterType
    CallHookFilter:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/CallHookFilterType'
          description: This is the type of filter - currently only "oneOf" is supported
        key:
          type: string
          description: This is the key to filter on (e.g. "call.endedReason")
        oneOf:
          type: array
          items:
            type: string
          description: This is the array of possible values to match against
      required:
        - type
        - key
        - oneOf
      title: CallHookFilter
    CallHookCallEnding:
      type: object
      properties:
        'on':
          $ref: '#/components/schemas/CallHookCallEndingOn'
          description: This is the event that triggers this hook
        do:
          type: array
          items:
            $ref: '#/components/schemas/CallHookCallEndingDoItems'
          description: This is the set of actions to perform when the hook triggers
        filters:
          type: array
          items:
            $ref: '#/components/schemas/CallHookFilter'
          description: This is the set of filters that must match for the hook to trigger
      required:
        - 'on'
        - do
      title: CallHookCallEnding
    CallHookAssistantSpeechInterruptedOn:
      type: string
      enum:
        - assistant.speech.interrupted
      description: This is the event that triggers this hook
      title: CallHookAssistantSpeechInterruptedOn
    SayHookActionType:
      type: string
      enum:
        - say
      description: This is the type of action - must be "say"
      title: SayHookActionType
    AssistantMessageRole:
      type: string
      enum:
        - assistant
      default: assistant
      description: This is the role of the message author
      title: AssistantMessageRole
    ToolCallFunction:
      type: object
      properties:
        arguments:
          type: string
          description: This is the arguments to call the function with
        name:
          type: string
          description: This is the name of the function to call
      required:
        - arguments
        - name
      title: ToolCallFunction
    ToolCall:
      type: object
      properties:
        id:
          type: string
          description: This is the ID of the tool call
        type:
          type: string
          description: This is the type of tool
        function:
          $ref: '#/components/schemas/ToolCallFunction'
          description: This is the function that was called
      required:
        - id
        - type
        - function
      title: ToolCall
    AssistantMessageMetadata:
      type: object
      properties: {}
      description: This is an optional metadata for the message
      title: AssistantMessageMetadata
    AssistantMessage:
      type: object
      properties:
        role:
          $ref: '#/components/schemas/AssistantMessageRole'
          description: This is the role of the message author
        content:
          type: string
          description: This is the content of the assistant message
        refusal:
          type: string
          description: This is the refusal message generated by the model
        tool_calls:
          type: array
          items:
            $ref: '#/components/schemas/ToolCall'
          description: This is the tool calls generated by the model
        name:
          type: string
          description: This is an optional name for the participant
        metadata:
          $ref: '#/components/schemas/AssistantMessageMetadata'
          description: This is an optional metadata for the message
      required:
        - role
      title: AssistantMessage
    ToolMessageRole:
      type: string
      enum:
        - tool
      default: tool
      description: This is the role of the message author
      title: ToolMessageRole
    ToolMessageMetadata:
      type: object
      properties: {}
      description: This is an optional metadata for the message
      title: ToolMessageMetadata
    ToolMessage:
      type: object
      properties:
        role:
          $ref: '#/components/schemas/ToolMessageRole'
          description: This is the role of the message author
        content:
          type: string
          description: This is the content of the tool message
        tool_call_id:
          type: string
          description: This is the ID of the tool call this message is responding to
        name:
          type: string
          description: This is an optional name for the participant
        metadata:
          $ref: '#/components/schemas/ToolMessageMetadata'
          description: This is an optional metadata for the message
      required:
        - role
        - content
        - tool_call_id
      title: ToolMessage
    DeveloperMessageRole:
      type: string
      enum:
        - developer
      default: developer
      description: This is the role of the message author
      title: DeveloperMessageRole
    DeveloperMessageMetadata:
      type: object
      properties: {}
      description: This is an optional metadata for the message
      title: DeveloperMessageMetadata
    DeveloperMessage:
      type: object
      properties:
        role:
          $ref: '#/components/schemas/DeveloperMessageRole'
          description: This is the role of the message author
        content:
          type: string
          description: This is the content of the developer message
        name:
          type: string
          description: This is an optional name for the participant
        metadata:
          $ref: '#/components/schemas/DeveloperMessageMetadata'
          description: This is an optional metadata for the message
      required:
        - role
        - content
      title: DeveloperMessage
    SayHookActionPromptOneOf1Items:
      oneOf:
        - $ref: '#/components/schemas/SystemMessage'
        - $ref: '#/components/schemas/UserMessage'
        - $ref: '#/components/schemas/AssistantMessage'
        - $ref: '#/components/schemas/ToolMessage'
        - $ref: '#/components/schemas/DeveloperMessage'
      title: SayHookActionPromptOneOf1Items
    SayHookActionPrompt1:
      type: array
      items:
        $ref: '#/components/schemas/SayHookActionPromptOneOf1Items'
      title: SayHookActionPrompt1
    SayHookActionPrompt:
      oneOf:
        - type: string
        - $ref: '#/components/schemas/SayHookActionPrompt1'
      description: >-
        This is the prompt for the assistant to generate a response based on
        existing conversation.

        Can be a string or an array of chat messages.
      title: SayHookActionPrompt
    SayHookActionExact:
      type: object
      properties: {}
      description: This is the message to say
      title: SayHookActionExact
    SayHookAction:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/SayHookActionType'
          description: This is the type of action - must be "say"
        prompt:
          $ref: '#/components/schemas/SayHookActionPrompt'
          description: >-
            This is the prompt for the assistant to generate a response based on
            existing conversation.

            Can be a string or an array of chat messages.
        exact:
          $ref: '#/components/schemas/SayHookActionExact'
          description: This is the message to say
      required:
        - type
      title: SayHookAction
    CallHookAssistantSpeechInterruptedDoItems:
      oneOf:
        - $ref: '#/components/schemas/SayHookAction'
        - $ref: '#/components/schemas/ToolCallHookAction'
        - $ref: '#/components/schemas/MessageAddHookAction'
      title: CallHookAssistantSpeechInterruptedDoItems
    CallHookAssistantSpeechInterrupted:
      type: object
      properties:
        'on':
          $ref: '#/components/schemas/CallHookAssistantSpeechInterruptedOn'
          description: This is the event that triggers this hook
        do:
          type: array
          items:
            $ref: '#/components/schemas/CallHookAssistantSpeechInterruptedDoItems'
          description: This is the set of actions to perform when the hook triggers
      required:
        - 'on'
        - do
      title: CallHookAssistantSpeechInterrupted
    CallHookCustomerSpeechInterruptedOn:
      type: string
      enum:
        - customer.speech.interrupted
      description: This is the event that triggers this hook
      title: CallHookCustomerSpeechInterruptedOn
    CallHookCustomerSpeechInterruptedDoItems:
      oneOf:
        - $ref: '#/components/schemas/SayHookAction'
        - $ref: '#/components/schemas/ToolCallHookAction'
        - $ref: '#/components/schemas/MessageAddHookAction'
      title: CallHookCustomerSpeechInterruptedDoItems
    CallHookCustomerSpeechInterrupted:
      type: object
      properties:
        'on':
          $ref: '#/components/schemas/CallHookCustomerSpeechInterruptedOn'
          description: This is the event that triggers this hook
        do:
          type: array
          items:
            $ref: '#/components/schemas/CallHookCustomerSpeechInterruptedDoItems'
          description: This is the set of actions to perform when the hook triggers
      required:
        - 'on'
        - do
      title: CallHookCustomerSpeechInterrupted
    CallHookCustomerSpeechTimeoutDoItems:
      oneOf:
        - $ref: '#/components/schemas/SayHookAction'
        - $ref: '#/components/schemas/ToolCallHookAction'
        - $ref: '#/components/schemas/MessageAddHookAction'
      title: CallHookCustomerSpeechTimeoutDoItems
    CustomerSpeechTimeoutOptionsTriggerResetMode:
      type: object
      properties: {}
      description: |-
        This is whether the counter for hook trigger resets the user speaks.

        @default never
      title: CustomerSpeechTimeoutOptionsTriggerResetMode
    CustomerSpeechTimeoutOptions:
      type: object
      properties:
        timeoutSeconds:
          type: number
          format: double
          description: >-
            This is the timeout in seconds before action is triggered.

            The clock starts when the assistant finishes speaking and remains
            active until the user speaks.


            @default 7.5
        triggerMaxCount:
          type: number
          format: double
          description: |-
            This is the maximum number of times the hook will trigger in a call.

            @default 3
        triggerResetMode:
          $ref: '#/components/schemas/CustomerSpeechTimeoutOptionsTriggerResetMode'
          description: |-
            This is whether the counter for hook trigger resets the user speaks.

            @default never
      required:
        - timeoutSeconds
      title: CustomerSpeechTimeoutOptions
    CallHookCustomerSpeechTimeout:
      type: object
      properties:
        'on':
          type: string
          description: >-
            Must be either "customer.speech.timeout" or match the pattern
            "customer.speech.timeout[property=value]"
        do:
          type: array
          items:
            $ref: '#/components/schemas/CallHookCustomerSpeechTimeoutDoItems'
          description: This is the set of actions to perform when the hook triggers
        options:
          $ref: '#/components/schemas/CustomerSpeechTimeoutOptions'
          description: This is the set of filters that must match for the hook to trigger
        name:
          type: string
          description: >-
            This is the name of the hook, it can be set by the user to identify
            the hook.

            If no name is provided, the hook will be auto generated as UUID.


            @default UUID
      required:
        - 'on'
        - do
      title: CallHookCustomerSpeechTimeout
    SessionCreatedHookOn:
      type: string
      enum:
        - session.created
      description: This is the event that triggers this hook
      title: SessionCreatedHookOn
    SessionCreatedHookDoItems:
      oneOf:
        - $ref: '#/components/schemas/ToolCallHookAction'
      title: SessionCreatedHookDoItems
    SessionCreatedHook:
      type: object
      properties:
        'on':
          $ref: '#/components/schemas/SessionCreatedHookOn'
          description: This is the event that triggers this hook
        do:
          type: array
          items:
            $ref: '#/components/schemas/SessionCreatedHookDoItems'
          description: This is the set of actions to perform when the hook triggers.
        name:
          type: string
          description: |-
            Optional name for this hook instance.
            If no name is provided, the hook will be auto generated as UUID.

            @default UUID
      required:
        - 'on'
        - do
      title: SessionCreatedHook
    AssistantOverridesHooksItems:
      oneOf:
        - $ref: '#/components/schemas/CallHookCallEnding'
        - $ref: '#/components/schemas/CallHookAssistantSpeechInterrupted'
        - $ref: '#/components/schemas/CallHookCustomerSpeechInterrupted'
        - $ref: '#/components/schemas/CallHookCustomerSpeechTimeout'
        - $ref: '#/components/schemas/SessionCreatedHook'
      title: AssistantOverridesHooksItems
    AssistantOverridesToolsAppendItems:
      oneOf:
        - $ref: '#/components/schemas/CreateApiRequestToolDTO'
        - $ref: '#/components/schemas/CreateBashToolDTO'
        - $ref: '#/components/schemas/CreateCodeToolDTO'
        - $ref: '#/components/schemas/CreateComputerToolDTO'
        - $ref: '#/components/schemas/CreateDtmfToolDTO'
        - $ref: '#/components/schemas/CreateEndCallToolDTO'
        - $ref: '#/components/schemas/CreateFunctionToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
        - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
        - $ref: '#/components/schemas/CreateHandoffToolDTO'
        - $ref: '#/components/schemas/CreateMcpToolDTO'
        - $ref: '#/components/schemas/CreateQueryToolDTO'
        - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
        - $ref: '#/components/schemas/CreateSmsToolDTO'
        - $ref: '#/components/schemas/CreateTextEditorToolDTO'
        - $ref: '#/components/schemas/CreateTransferCallToolDTO'
        - $ref: '#/components/schemas/CreateSipRequestToolDTO'
        - $ref: '#/components/schemas/CreateVoicemailToolDTO'
      title: AssistantOverridesToolsAppendItems
    AssistantOverridesVariableValues:
      type: object
      properties: {}
      description: >-
        These are values that will be used to replace the template variables in
        the assistant messages and other text-based fields.

        This uses LiquidJS syntax.
        https://liquidjs.com/tutorials/intro-to-liquid.html


        So for example, `{{ name }}` will be replaced with the value of `name`
        in `variableValues`.

        `{{"now" | date: "%b %d, %Y, %I:%M %p", "America/New_York"}}` will be
        replaced with the current date and time in New York.
         Some VAPI reserved defaults:
         - *customer* - the customer object
      title: AssistantOverridesVariableValues
    SecurityFilterBase:
      type: object
      properties: {}
      title: SecurityFilterBase
    SecurityFilterPlanMode:
      type: string
      enum:
        - sanitize
        - reject
        - replace
      default: sanitize
      description: |-
        Mode of operation when a security threat is detected.
        - 'sanitize': Remove or replace the threatening content
        - 'reject': Replace the entire transcript with replacement text
        - 'replace': Replace threatening patterns with replacement text
        @default 'sanitize'
      title: SecurityFilterPlanMode
    SecurityFilterPlan:
      type: object
      properties:
        enabled:
          type: boolean
          default: false
          description: |-
            Whether the security filter is enabled.
            @default false
        filters:
          type: array
          items:
            $ref: '#/components/schemas/SecurityFilterBase'
          description: |-
            Array of security filter types to apply.
            If array is not empty, only those security filters are run.
        mode:
          $ref: '#/components/schemas/SecurityFilterPlanMode'
          description: |-
            Mode of operation when a security threat is detected.
            - 'sanitize': Remove or replace the threatening content
            - 'reject': Replace the entire transcript with replacement text
            - 'replace': Replace threatening patterns with replacement text
            @default 'sanitize'
        replacementText:
          type: string
          default: '[FILTERED]'
          description: |-
            Text to use when replacing filtered content.
            @default '[FILTERED]'
      title: SecurityFilterPlan
    CompliancePlanRecordingConsentPlanDiscriminatorMappingStayOnLineVoice:
      oneOf:
        - $ref: '#/components/schemas/AzureVoice'
        - $ref: '#/components/schemas/CartesiaVoice'
        - $ref: '#/components/schemas/CustomVoice'
        - $ref: '#/components/schemas/DeepgramVoice'
        - $ref: '#/components/schemas/ElevenLabsVoice'
        - $ref: '#/components/schemas/HumeVoice'
        - $ref: '#/components/schemas/LMNTVoice'
        - $ref: '#/components/schemas/NeuphonicVoice'
        - $ref: '#/components/schemas/OpenAIVoice'
        - $ref: '#/components/schemas/PlayHTVoice'
        - $ref: '#/components/schemas/WellSaidVoice'
        - $ref: '#/components/schemas/RimeAIVoice'
        - $ref: '#/components/schemas/SmallestAIVoice'
        - $ref: '#/components/schemas/TavusVoice'
        - $ref: '#/components/schemas/VapiVoice'
        - $ref: '#/components/schemas/SesameVoice'
        - $ref: '#/components/schemas/InworldVoice'
        - $ref: '#/components/schemas/MinimaxVoice'
      description: >-
        This is the voice to use for the consent message. If not specified,
        inherits from the assistant's voice.

        Use a different voice for the consent message for a better user
        experience.
      title: CompliancePlanRecordingConsentPlanDiscriminatorMappingStayOnLineVoice
    CompliancePlanRecordingConsentPlanDiscriminatorMappingVerbalVoice:
      oneOf:
        - $ref: '#/components/schemas/AzureVoice'
        - $ref: '#/components/schemas/CartesiaVoice'
        - $ref: '#/components/schemas/CustomVoice'
        - $ref: '#/components/schemas/DeepgramVoice'
        - $ref: '#/components/schemas/ElevenLabsVoice'
        - $ref: '#/components/schemas/HumeVoice'
        - $ref: '#/components/schemas/LMNTVoice'
        - $ref: '#/components/schemas/NeuphonicVoice'
        - $ref: '#/components/schemas/OpenAIVoice'
        - $ref: '#/components/schemas/PlayHTVoice'
        - $ref: '#/components/schemas/WellSaidVoice'
        - $ref: '#/components/schemas/RimeAIVoice'
        - $ref: '#/components/schemas/SmallestAIVoice'
        - $ref: '#/components/schemas/TavusVoice'
        - $ref: '#/components/schemas/VapiVoice'
        - $ref: '#/components/schemas/SesameVoice'
        - $ref: '#/components/schemas/InworldVoice'
        - $ref: '#/components/schemas/MinimaxVoice'
      description: >-
        This is the voice to use for the consent message. If not specified,
        inherits from the assistant's voice.

        Use a different voice for the consent message for a better user
        experience.
      title: CompliancePlanRecordingConsentPlanDiscriminatorMappingVerbalVoice
    CompliancePlanRecordingConsentPlanDiscriminatorMappingVerbalDeclineTool:
      type: object
      properties: {}
      description: Tool to execute if user verbally declines recording consent
      title: CompliancePlanRecordingConsentPlanDiscriminatorMappingVerbalDeclineTool
    CompliancePlanRecordingConsentPlan:
      oneOf:
        - type: object
          properties:
            type:
              type: string
              enum:
                - stay-on-line
              description: 'Discriminator value: stay-on-line'
            message:
              type: string
              description: >-
                This is the message asking for consent to record the call.

                If the type is `stay-on-line`, the message should ask the user
                to hang up if they do not consent.

                If the type is `verbal`, the message should ask the user to
                verbally consent or decline.
            voice:
              $ref: >-
                #/components/schemas/CompliancePlanRecordingConsentPlanDiscriminatorMappingStayOnLineVoice
              description: >-
                This is the voice to use for the consent message. If not
                specified, inherits from the assistant's voice.

                Use a different voice for the consent message for a better user
                experience.
            waitSeconds:
              type: number
              format: double
              default: 3
              description: >-
                Number of seconds to wait before transferring to the assistant
                if user stays on the call
          required:
            - type
            - message
          description: stay-on-line variant
        - type: object
          properties:
            type:
              type: string
              enum:
                - verbal
              description: 'Discriminator value: verbal'
            message:
              type: string
              description: >-
                This is the message asking for consent to record the call.

                If the type is `stay-on-line`, the message should ask the user
                to hang up if they do not consent.

                If the type is `verbal`, the message should ask the user to
                verbally consent or decline.
            voice:
              $ref: >-
                #/components/schemas/CompliancePlanRecordingConsentPlanDiscriminatorMappingVerbalVoice
              description: >-
                This is the voice to use for the consent message. If not
                specified, inherits from the assistant's voice.

                Use a different voice for the consent message for a better user
                experience.
            declineTool:
              $ref: >-
                #/components/schemas/CompliancePlanRecordingConsentPlanDiscriminatorMappingVerbalDeclineTool
              description: Tool to execute if user verbally declines recording consent
            declineToolId:
              type: string
              description: >-
                ID of existing tool to execute if user verbally declines
                recording consent
          required:
            - type
            - message
          description: verbal variant
      discriminator:
        propertyName: type
      title: CompliancePlanRecordingConsentPlan
    CompliancePlan:
      type: object
      properties:
        hipaaEnabled:
          type: boolean
          description: >-
            When this is enabled, logs, recordings, and transcriptions will be
            stored in HIPAA-compliant storage. Defaults to false. Only
            HIPAA-compliant providers will be available for LLM, Voice, and
            Transcriber respectively. This setting is only honored if the
            organization is on an Enterprise subscription or has purchased the
            HIPAA add-on.
        pciEnabled:
          type: boolean
          description: >-
            When this is enabled, the user will be restricted to use
            PCI-compliant providers, and no logs or transcripts are stored.

            At the end of the call, you will receive an end-of-call-report
            message to store on your server. Defaults to false.
        securityFilterPlan:
          $ref: '#/components/schemas/SecurityFilterPlan'
          description: >-
            This is the security filter plan for the assistant. It allows
            filtering of transcripts for security threats before sending to LLM.
        recordingConsentPlan:
          $ref: '#/components/schemas/CompliancePlanRecordingConsentPlan'
      title: CompliancePlan
    AssistantOverridesMetadata:
      type: object
      properties: {}
      description: This is for metadata you want to store on the assistant.
      title: AssistantOverridesMetadata
    SmartDenoisingPlan:
      type: object
      properties:
        enabled:
          type: boolean
          default: true
          description: Whether smart denoising using Krisp is enabled.
      title: SmartDenoisingPlan
    FourierDenoisingPlan:
      type: object
      properties:
        enabled:
          type: boolean
          default: false
          description: >-
            Whether Fourier denoising is enabled. Note that this is experimental
            and may not work as expected.
        mediaDetectionEnabled:
          type: boolean
          default: true
          description: >-
            Whether automatic media detection is enabled. When enabled, the
            filter will automatically

            detect consistent background TV/music/radio and switch to more
            aggressive filtering settings.

            Only applies when enabled is true.
        staticThreshold:
          type: number
          format: double
          default: -35
          description: >-
            Static threshold in dB used as fallback when no baseline is
            established.
        baselineOffsetDb:
          type: number
          format: double
          default: -15
          description: >-
            How far below the rolling baseline to filter audio, in dB.

            Lower values (e.g., -10) are more aggressive, higher values (e.g.,
            -20) are more conservative.
        windowSizeMs:
          type: number
          format: double
          default: 3000
          description: >-
            Rolling window size in milliseconds for calculating the audio
            baseline.

            Larger windows adapt more slowly but are more stable.
        baselinePercentile:
          type: number
          format: double
          default: 85
          description: >-
            Percentile to use for baseline calculation (1-99).

            Higher percentiles (e.g., 85) focus on louder speech, lower
            percentiles (e.g., 50) include quieter speech.
      title: FourierDenoisingPlan
    BackgroundSpeechDenoisingPlan:
      type: object
      properties:
        smartDenoisingPlan:
          $ref: '#/components/schemas/SmartDenoisingPlan'
          description: Whether smart denoising using Krisp is enabled.
        fourierDenoisingPlan:
          $ref: '#/components/schemas/FourierDenoisingPlan'
          description: >-
            Whether Fourier denoising is enabled. Note that this is experimental
            and may not work as expected.


            This can be combined with smart denoising, and will be run
            afterwards.
      title: BackgroundSpeechDenoisingPlan
    StructuredDataPlanMessagesItems:
      type: object
      properties: {}
      title: StructuredDataPlanMessagesItems
    StructuredDataPlan:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/StructuredDataPlanMessagesItems'
          description: >-
            These are the messages used to generate the structured data.


            @default: ```

            [
              {
                "role": "system",
                "content": "You are an expert data extractor. You will be given a transcript of a call. Extract structured data per the JSON Schema. DO NOT return anything except the structured data.\n\nJson Schema:\\n{{schema}}\n\nOnly respond with the JSON."
              },
              {
                "role": "user",
                "content": "Here is the transcript:\n\n{{transcript}}\n\n. Here is the ended reason of the call:\n\n{{endedReason}}\n\n"
              }
            ]```


            You can customize by providing any messages you want.


            Here are the template variables available:

            - {{transcript}}: the transcript of the call from
            `call.artifact.transcript`- {{systemPrompt}}: the system prompt of
            the call from `assistant.model.messages[type=system].content`-
            {{messages}}: the messages of the call from
            `assistant.model.messages`- {{schema}}: the schema of the structured
            data from `structuredDataPlan.schema`- {{endedReason}}: the ended
            reason of the call from `call.endedReason`
        enabled:
          type: boolean
          description: >-
            This determines whether structured data is generated and stored in
            `call.analysis.structuredData`. Defaults to false.


            Usage:

            - If you want to extract structured data, set this to true and
            provide a `schema`.


            @default false
        schema:
          $ref: '#/components/schemas/JsonSchema'
          description: >-
            This is the schema of the structured data. The output is stored in
            `call.analysis.structuredData`.


            Complete guide on JSON Schema can be found
            [here](https://ajv.js.org/json-schema.html#json-data-type).
        timeoutSeconds:
          type: number
          format: double
          description: >-
            This is how long the request is tried before giving up. When request
            times out, `call.analysis.structuredData` will be empty.


            Usage:

            - To guarantee the structured data is generated, set this value
            high. Note, this will delay the end of call report in cases where
            model is slow to respond.


            @default 5 seconds
      title: StructuredDataPlan
    StructuredDataMultiPlan:
      type: object
      properties:
        key:
          type: string
          description: This is the key of the structured data plan in the catalog.
        plan:
          $ref: '#/components/schemas/StructuredDataPlan'
          description: This is an individual structured data plan in the catalog.
      required:
        - key
        - plan
      title: StructuredDataMultiPlan
    SuccessEvaluationPlanRubric:
      type: string
      enum:
        - NumericScale
        - DescriptiveScale
        - Checklist
        - Matrix
        - PercentageScale
        - LikertScale
        - AutomaticRubric
        - PassFail
      description: >-
        This enforces the rubric of the evaluation. The output is stored in
        `call.analysis.successEvaluation`.


        Options include:

        - 'NumericScale': A scale of 1 to 10.

        - 'DescriptiveScale': A scale of Excellent, Good, Fair, Poor.

        - 'Checklist': A checklist of criteria and their status.

        - 'Matrix': A grid that evaluates multiple criteria across different
        performance levels.

        - 'PercentageScale': A scale of 0% to 100%.

        - 'LikertScale': A scale of Strongly Agree, Agree, Neutral, Disagree,
        Strongly Disagree.

        - 'AutomaticRubric': Automatically break down evaluation into several
        criteria, each with its own score.

        - 'PassFail': A simple 'true' if call passed, 'false' if not.


        Default is 'PassFail'.
      title: SuccessEvaluationPlanRubric
    SuccessEvaluationPlanMessagesItems:
      type: object
      properties: {}
      title: SuccessEvaluationPlanMessagesItems
    SuccessEvaluationPlan:
      type: object
      properties:
        rubric:
          $ref: '#/components/schemas/SuccessEvaluationPlanRubric'
          description: >-
            This enforces the rubric of the evaluation. The output is stored in
            `call.analysis.successEvaluation`.


            Options include:

            - 'NumericScale': A scale of 1 to 10.

            - 'DescriptiveScale': A scale of Excellent, Good, Fair, Poor.

            - 'Checklist': A checklist of criteria and their status.

            - 'Matrix': A grid that evaluates multiple criteria across different
            performance levels.

            - 'PercentageScale': A scale of 0% to 100%.

            - 'LikertScale': A scale of Strongly Agree, Agree, Neutral,
            Disagree, Strongly Disagree.

            - 'AutomaticRubric': Automatically break down evaluation into
            several criteria, each with its own score.

            - 'PassFail': A simple 'true' if call passed, 'false' if not.


            Default is 'PassFail'.
        messages:
          type: array
          items:
            $ref: '#/components/schemas/SuccessEvaluationPlanMessagesItems'
          description: >-
            These are the messages used to generate the success evaluation.


            @default: ```

            [
              {
                "role": "system",
                "content": "You are an expert call evaluator. You will be given a transcript of a call and the system prompt of the AI participant. Determine if the call was successful based on the objectives inferred from the system prompt. DO NOT return anything except the result.\n\nRubric:\\n{{rubric}}\n\nOnly respond with the result."
              },
              {
                "role": "user",
                "content": "Here is the transcript:\n\n{{transcript}}\n\n"
              },
              {
                "role": "user",
                "content": "Here was the system prompt of the call:\n\n{{systemPrompt}}\n\n. Here is the ended reason of the call:\n\n{{endedReason}}\n\n"
              }
            ]```


            You can customize by providing any messages you want.


            Here are the template variables available:

            - {{transcript}}: the transcript of the call from
            `call.artifact.transcript`- {{systemPrompt}}: the system prompt of
            the call from `assistant.model.messages[type=system].content`-
            {{messages}}: the messages of the call from
            `assistant.model.messages`- {{rubric}}: the rubric of the success
            evaluation from `successEvaluationPlan.rubric`- {{endedReason}}: the
            ended reason of the call from `call.endedReason`
        enabled:
          type: boolean
          description: >-
            This determines whether a success evaluation is generated and stored
            in `call.analysis.successEvaluation`. Defaults to true.


            Usage:

            - If you want to disable the success evaluation, set this to false.


            @default true
        timeoutSeconds:
          type: number
          format: double
          description: >-
            This is how long the request is tried before giving up. When request
            times out, `call.analysis.successEvaluation` will be empty.


            Usage:

            - To guarantee the success evaluation is generated, set this value
            high. Note, this will delay the end of call report in cases where
            model is slow to respond.


            @default 5 seconds
      title: SuccessEvaluationPlan
    AnalysisPlan:
      type: object
      properties:
        minMessagesThreshold:
          type: number
          format: double
          description: >-
            The minimum number of messages required to run the analysis plan.

            If the number of messages is less than this, analysis will be
            skipped.


            @default 2
        summaryPlan:
          $ref: '#/components/schemas/SummaryPlan'
          description: >-
            This is the plan for generating the summary of the call. This
            outputs to `call.analysis.summary`.
        structuredDataPlan:
          $ref: '#/components/schemas/StructuredDataPlan'
          description: >-
            This is the plan for generating the structured data from the call.
            This outputs to `call.analysis.structuredData`.
        structuredDataMultiPlan:
          type: array
          items:
            $ref: '#/components/schemas/StructuredDataMultiPlan'
          description: >-
            This is an array of structured data plan catalogs. Each entry
            includes a `key` and a `plan` for generating the structured data
            from the call. This outputs to `call.analysis.structuredDataMulti`.
        successEvaluationPlan:
          $ref: '#/components/schemas/SuccessEvaluationPlan'
          description: >-
            This is the plan for generating the success evaluation of the call.
            This outputs to `call.analysis.successEvaluation`.
        outcomeIds:
          type: array
          items:
            type: string
          description: >-
            This is an array of outcome UUIDs to be calculated during analysis.

            The outcomes will be calculated and stored in
            `call.analysis.outcomes`.
      title: AnalysisPlan
    ArtifactPlanRecordingFormat:
      type: string
      enum:
        - wav;l16
        - mp3
      description: |-
        This determines the format of the recording. Defaults to `wav;l16`.

        @default 'wav;l16'
      title: ArtifactPlanRecordingFormat
    TranscriptPlan:
      type: object
      properties:
        enabled:
          type: boolean
          description: >-
            This determines whether the transcript is stored in
            `call.artifact.transcript`. Defaults to true.


            @default true
        assistantName:
          type: string
          description: >-
            This is the name of the assistant in the transcript. Defaults to
            'AI'.


            Usage:

            - If you want to change the name of the assistant in the transcript,
            set this. Example, here is what the transcript would look like with
            `assistantName` set to 'Buyer':

            ```

            User: Hello, how are you?

            Buyer: I'm fine.

            User: Do you want to buy a car?

            Buyer: No.

            ```


            @default 'AI'
        userName:
          type: string
          description: >-
            This is the name of the user in the transcript. Defaults to 'User'.


            Usage:

            - If you want to change the name of the user in the transcript, set
            this. Example, here is what the transcript would look like with
            `userName` set to 'Seller':

            ```

            Seller: Hello, how are you?

            AI: I'm fine.

            Seller: Do you want to buy a car?

            AI: No.

            ```


            @default 'User'
      title: TranscriptPlan
    CreateStructuredOutputDtoType:
      type: string
      enum:
        - ai
        - regex
      default: ai
      description: >-
        This is the type of structured output.


        - 'ai': Uses an LLM to extract structured data from the conversation
        (default).

        - 'regex': Uses a regex pattern to extract data from the transcript
        without an LLM.


        Defaults to 'ai' if not specified.
      title: CreateStructuredOutputDtoType
    WorkflowOpenAiModelProvider:
      type: string
      enum:
        - openai
      description: This is the provider of the model (`openai`).
      title: WorkflowOpenAiModelProvider
    WorkflowOpenAiModelModel:
      type: string
      enum:
        - gpt-5.4
        - gpt-5.4-mini
        - gpt-5.4-nano
        - gpt-5.2
        - gpt-5.2-chat-latest
        - gpt-5.1
        - gpt-5.1-chat-latest
        - gpt-5
        - gpt-5-chat-latest
        - gpt-5-mini
        - gpt-5-nano
        - gpt-4.1-2025-04-14
        - gpt-4.1-mini-2025-04-14
        - gpt-4.1-nano-2025-04-14
        - gpt-4.1
        - gpt-4.1-mini
        - gpt-4.1-nano
        - chatgpt-4o-latest
        - o3
        - o3-mini
        - o4-mini
        - o1-mini
        - o1-mini-2024-09-12
        - gpt-4o-mini-2024-07-18
        - gpt-4o-mini
        - gpt-4o
        - gpt-4o-2024-05-13
        - gpt-4o-2024-08-06
        - gpt-4o-2024-11-20
        - gpt-4-turbo
        - gpt-4-turbo-2024-04-09
        - gpt-4-turbo-preview
        - gpt-4-0125-preview
        - gpt-4-1106-preview
        - gpt-4
        - gpt-4-0613
        - gpt-3.5-turbo
        - gpt-3.5-turbo-0125
        - gpt-3.5-turbo-1106
        - gpt-3.5-turbo-16k
        - gpt-3.5-turbo-0613
        - gpt-4.1-2025-04-14:westus
        - gpt-4.1-2025-04-14:eastus2
        - gpt-4.1-2025-04-14:eastus
        - gpt-4.1-2025-04-14:westus3
        - gpt-4.1-2025-04-14:northcentralus
        - gpt-4.1-2025-04-14:southcentralus
        - gpt-4.1-2025-04-14:westeurope
        - gpt-4.1-2025-04-14:germanywestcentral
        - gpt-4.1-2025-04-14:polandcentral
        - gpt-4.1-2025-04-14:spaincentral
        - gpt-4.1-mini-2025-04-14:westus
        - gpt-4.1-mini-2025-04-14:eastus2
        - gpt-4.1-mini-2025-04-14:eastus
        - gpt-4.1-mini-2025-04-14:westus3
        - gpt-4.1-mini-2025-04-14:northcentralus
        - gpt-4.1-mini-2025-04-14:southcentralus
        - gpt-4.1-mini-2025-04-14:westeurope
        - gpt-4.1-mini-2025-04-14:germanywestcentral
        - gpt-4.1-mini-2025-04-14:polandcentral
        - gpt-4.1-mini-2025-04-14:spaincentral
        - gpt-4.1-nano-2025-04-14:westus
        - gpt-4.1-nano-2025-04-14:eastus2
        - gpt-4.1-nano-2025-04-14:westus3
        - gpt-4.1-nano-2025-04-14:northcentralus
        - gpt-4.1-nano-2025-04-14:southcentralus
        - gpt-4o-2024-11-20:swedencentral
        - gpt-4o-2024-11-20:westus
        - gpt-4o-2024-11-20:eastus2
        - gpt-4o-2024-11-20:eastus
        - gpt-4o-2024-11-20:westus3
        - gpt-4o-2024-11-20:southcentralus
        - gpt-4o-2024-11-20:westeurope
        - gpt-4o-2024-11-20:germanywestcentral
        - gpt-4o-2024-11-20:polandcentral
        - gpt-4o-2024-11-20:spaincentral
        - gpt-4o-2024-08-06:westus
        - gpt-4o-2024-08-06:westus3
        - gpt-4o-2024-08-06:eastus
        - gpt-4o-2024-08-06:eastus2
        - gpt-4o-2024-08-06:northcentralus
        - gpt-4o-2024-08-06:southcentralus
        - gpt-4o-mini-2024-07-18:westus
        - gpt-4o-mini-2024-07-18:westus3
        - gpt-4o-mini-2024-07-18:eastus
        - gpt-4o-mini-2024-07-18:eastus2
        - gpt-4o-mini-2024-07-18:northcentralus
        - gpt-4o-mini-2024-07-18:southcentralus
        - gpt-4o-2024-05-13:eastus2
        - gpt-4o-2024-05-13:eastus
        - gpt-4o-2024-05-13:northcentralus
        - gpt-4o-2024-05-13:southcentralus
        - gpt-4o-2024-05-13:westus3
        - gpt-4o-2024-05-13:westus
        - gpt-4-turbo-2024-04-09:eastus2
        - gpt-4-0125-preview:eastus
        - gpt-4-0125-preview:northcentralus
        - gpt-4-0125-preview:southcentralus
        - gpt-4-1106-preview:australiaeast
        - gpt-4-1106-preview:canadaeast
        - gpt-4-1106-preview:france
        - gpt-4-1106-preview:india
        - gpt-4-1106-preview:norway
        - gpt-4-1106-preview:swedencentral
        - gpt-4-1106-preview:uk
        - gpt-4-1106-preview:westus
        - gpt-4-1106-preview:westus3
        - gpt-4-0613:canadaeast
        - gpt-3.5-turbo-0125:canadaeast
        - gpt-3.5-turbo-0125:northcentralus
        - gpt-3.5-turbo-0125:southcentralus
        - gpt-3.5-turbo-1106:canadaeast
        - gpt-3.5-turbo-1106:westus
      description: >-
        This is the OpenAI model that will be used.


        When using Vapi OpenAI or your own Azure Credentials, you have the
        option to specify the region for the selected model. This shouldn't be
        specified unless you have a specific reason to do so. Vapi will
        automatically find the fastest region that make sense.

        This is helpful when you are required to comply with Data Residency
        rules. Learn more about Azure regions here
        https://azure.microsoft.com/en-us/explore/global-infrastructure/data-residency/.
      title: WorkflowOpenAiModelModel
    WorkflowOpenAIModel:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/WorkflowOpenAiModelProvider'
          description: This is the provider of the model (`openai`).
        model:
          $ref: '#/components/schemas/WorkflowOpenAiModelModel'
          description: >-
            This is the OpenAI model that will be used.


            When using Vapi OpenAI or your own Azure Credentials, you have the
            option to specify the region for the selected model. This shouldn't
            be specified unless you have a specific reason to do so. Vapi will
            automatically find the fastest region that make sense.

            This is helpful when you are required to comply with Data Residency
            rules. Learn more about Azure regions here
            https://azure.microsoft.com/en-us/explore/global-infrastructure/data-residency/.
        temperature:
          type: number
          format: double
          description: This is the temperature of the model.
        maxTokens:
          type: number
          format: double
          description: This is the max tokens of the model.
      required:
        - provider
        - model
      title: WorkflowOpenAIModel
    WorkflowAnthropicModelProvider:
      type: string
      enum:
        - anthropic
      description: This is the provider of the model (`anthropic`).
      title: WorkflowAnthropicModelProvider
    WorkflowAnthropicModelModel:
      type: string
      enum:
        - claude-3-opus-20240229
        - claude-3-sonnet-20240229
        - claude-3-haiku-20240307
        - claude-3-5-sonnet-20240620
        - claude-3-5-sonnet-20241022
        - claude-3-5-haiku-20241022
        - claude-3-7-sonnet-20250219
        - claude-opus-4-20250514
        - claude-opus-4-5-20251101
        - claude-opus-4-6
        - claude-sonnet-4-20250514
        - claude-sonnet-4-5-20250929
        - claude-sonnet-4-6
        - claude-haiku-4-5-20251001
      description: This is the specific model that will be used.
      title: WorkflowAnthropicModelModel
    WorkflowAnthropicModel:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/WorkflowAnthropicModelProvider'
          description: This is the provider of the model (`anthropic`).
        model:
          $ref: '#/components/schemas/WorkflowAnthropicModelModel'
          description: This is the specific model that will be used.
        thinking:
          $ref: '#/components/schemas/AnthropicThinkingConfig'
          description: >-
            This is the optional configuration for Anthropic's thinking feature.


            - If provided, `maxTokens` must be greater than
            `thinking.budgetTokens`.
        temperature:
          type: number
          format: double
          description: This is the temperature of the model.
        maxTokens:
          type: number
          format: double
          description: This is the max tokens of the model.
      required:
        - provider
        - model
      title: WorkflowAnthropicModel
    WorkflowAnthropicBedrockModelProvider:
      type: string
      enum:
        - anthropic-bedrock
      description: This is the provider of the model (`anthropic-bedrock`).
      title: WorkflowAnthropicBedrockModelProvider
    WorkflowAnthropicBedrockModelModel:
      type: string
      enum:
        - claude-3-opus-20240229
        - claude-3-sonnet-20240229
        - claude-3-haiku-20240307
        - claude-3-5-sonnet-20240620
        - claude-3-5-sonnet-20241022
        - claude-3-5-haiku-20241022
        - claude-3-7-sonnet-20250219
        - claude-opus-4-20250514
        - claude-opus-4-5-20251101
        - claude-opus-4-6
        - claude-sonnet-4-20250514
        - claude-sonnet-4-5-20250929
        - claude-sonnet-4-6
        - claude-haiku-4-5-20251001
      description: This is the specific model that will be used.
      title: WorkflowAnthropicBedrockModelModel
    WorkflowAnthropicBedrockModel:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/WorkflowAnthropicBedrockModelProvider'
          description: This is the provider of the model (`anthropic-bedrock`).
        model:
          $ref: '#/components/schemas/WorkflowAnthropicBedrockModelModel'
          description: This is the specific model that will be used.
        thinking:
          $ref: '#/components/schemas/AnthropicThinkingConfig'
          description: >-
            This is the optional configuration for Anthropic's thinking feature.


            - If provided, `maxTokens` must be greater than
            `thinking.budgetTokens`.
        temperature:
          type: number
          format: double
          description: This is the temperature of the model.
        maxTokens:
          type: number
          format: double
          description: This is the max tokens of the model.
      required:
        - provider
        - model
      title: WorkflowAnthropicBedrockModel
    WorkflowGoogleModelProvider:
      type: string
      enum:
        - google
      description: This is the provider of the model (`google`).
      title: WorkflowGoogleModelProvider
    WorkflowGoogleModelModel:
      type: string
      enum:
        - gemini-3-flash-preview
        - gemini-2.5-pro
        - gemini-2.5-flash
        - gemini-2.5-flash-lite
        - gemini-2.0-flash-thinking-exp
        - gemini-2.0-pro-exp-02-05
        - gemini-2.0-flash
        - gemini-2.0-flash-lite
        - gemini-2.0-flash-exp
        - gemini-2.0-flash-realtime-exp
        - gemini-1.5-flash
        - gemini-1.5-flash-002
        - gemini-1.5-pro
        - gemini-1.5-pro-002
        - gemini-1.0-pro
      description: >-
        This is the name of the model. Ex.
        cognitivecomputations/dolphin-mixtral-8x7b
      title: WorkflowGoogleModelModel
    WorkflowGoogleModel:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/WorkflowGoogleModelProvider'
          description: This is the provider of the model (`google`).
        model:
          $ref: '#/components/schemas/WorkflowGoogleModelModel'
          description: >-
            This is the name of the model. Ex.
            cognitivecomputations/dolphin-mixtral-8x7b
        temperature:
          type: number
          format: double
          description: This is the temperature of the model.
        maxTokens:
          type: number
          format: double
          description: This is the max tokens of the model.
      required:
        - provider
        - model
      title: WorkflowGoogleModel
    WorkflowCustomModelProvider:
      type: string
      enum:
        - custom-llm
      description: This is the provider of the model (`custom-llm`).
      title: WorkflowCustomModelProvider
    WorkflowCustomModelMetadataSendMode:
      type: string
      enum:
        - 'off'
        - variable
        - destructured
      description: >-
        This determines whether metadata is sent in requests to the custom
        provider.


        - `off` will not send any metadata. payload will look like `{ messages
        }`

        - `variable` will send `assistant.metadata` as a variable on the
        payload. payload will look like `{ messages, metadata }`

        - `destructured` will send `assistant.metadata` fields directly on the
        payload. payload will look like `{ messages, ...metadata }`


        Further, `variable` and `destructured` will send `call`, `phoneNumber`,
        and `customer` objects in the payload.


        Default is `variable`.
      title: WorkflowCustomModelMetadataSendMode
    WorkflowCustomModelHeaders:
      type: object
      properties: {}
      description: These are the headers we'll use for the OpenAI client's `headers`.
      title: WorkflowCustomModelHeaders
    WorkflowCustomModel:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/WorkflowCustomModelProvider'
          description: This is the provider of the model (`custom-llm`).
        metadataSendMode:
          $ref: '#/components/schemas/WorkflowCustomModelMetadataSendMode'
          description: >-
            This determines whether metadata is sent in requests to the custom
            provider.


            - `off` will not send any metadata. payload will look like `{
            messages }`

            - `variable` will send `assistant.metadata` as a variable on the
            payload. payload will look like `{ messages, metadata }`

            - `destructured` will send `assistant.metadata` fields directly on
            the payload. payload will look like `{ messages, ...metadata }`


            Further, `variable` and `destructured` will send `call`,
            `phoneNumber`, and `customer` objects in the payload.


            Default is `variable`.
        url:
          type: string
          description: >-
            These is the URL we'll use for the OpenAI client's `baseURL`. Ex.
            https://openrouter.ai/api/v1
        headers:
          $ref: '#/components/schemas/WorkflowCustomModelHeaders'
          description: These are the headers we'll use for the OpenAI client's `headers`.
        timeoutSeconds:
          type: number
          format: double
          description: >-
            This sets the timeout for the connection to the custom provider
            without needing to stream any tokens back. Default is 20 seconds.
        model:
          type: string
          description: >-
            This is the name of the model. Ex.
            cognitivecomputations/dolphin-mixtral-8x7b
        temperature:
          type: number
          format: double
          description: This is the temperature of the model.
        maxTokens:
          type: number
          format: double
          description: This is the max tokens of the model.
      required:
        - provider
        - url
        - model
      title: WorkflowCustomModel
    CreateStructuredOutputDtoModel:
      oneOf:
        - $ref: '#/components/schemas/WorkflowOpenAIModel'
        - $ref: '#/components/schemas/WorkflowAnthropicModel'
        - $ref: '#/components/schemas/WorkflowAnthropicBedrockModel'
        - $ref: '#/components/schemas/WorkflowGoogleModel'
        - $ref: '#/components/schemas/WorkflowCustomModel'
      description: >-
        This is the model that will be used to extract the structured output.


        To provide your own custom system and user prompts for structured output
        extraction, populate the messages array with your system and user
        messages. You can specify liquid templating in your system and user
        messages.

        Between the system or user messages, you must reference either
        'transcript' or 'messages' with the `{{}}` syntax to access the
        conversation history.

        Between the system or user messages, you must reference a variation of
        the structured output with the `{{}}` syntax to access the structured
        output definition.

        i.e.:

        `{{structuredOutput}}`

        `{{structuredOutput.name}}`

        `{{structuredOutput.description}}`

        `{{structuredOutput.schema}}`


        If model is not specified, GPT-4.1 will be used by default for
        extraction, utilizing default system and user prompts.

        If messages or required fields are not specified, the default system and
        user prompts will be used.
      title: CreateStructuredOutputDtoModel
    ComplianceOverride:
      type: object
      properties:
        forceStoreOnHipaaEnabled:
          type: boolean
          description: >-
            Force storage for this output under HIPAA. Only enable if output
            contains no sensitive data.
      title: ComplianceOverride
    CreateStructuredOutputDTO:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/CreateStructuredOutputDtoType'
          description: >-
            This is the type of structured output.


            - 'ai': Uses an LLM to extract structured data from the conversation
            (default).

            - 'regex': Uses a regex pattern to extract data from the transcript
            without an LLM.


            Defaults to 'ai' if not specified.
        regex:
          type: string
          description: >-
            This is the regex pattern to match against the transcript.


            Only used when type is 'regex'. Supports both raw patterns (e.g.
            '\d+') and

            regex literal format (e.g. '/\d+/gi'). Uses RE2 syntax for safety.


            The result depends on the schema type:

            - boolean: true if the pattern matches, false otherwise

            - string: the first match or first capture group

            - number/integer: the first match parsed as a number

            - array: all matches
        model:
          $ref: '#/components/schemas/CreateStructuredOutputDtoModel'
          description: >-
            This is the model that will be used to extract the structured
            output.


            To provide your own custom system and user prompts for structured
            output extraction, populate the messages array with your system and
            user messages. You can specify liquid templating in your system and
            user messages.

            Between the system or user messages, you must reference either
            'transcript' or 'messages' with the `{{}}` syntax to access the
            conversation history.

            Between the system or user messages, you must reference a variation
            of the structured output with the `{{}}` syntax to access the
            structured output definition.

            i.e.:

            `{{structuredOutput}}`

            `{{structuredOutput.name}}`

            `{{structuredOutput.description}}`

            `{{structuredOutput.schema}}`


            If model is not specified, GPT-4.1 will be used by default for
            extraction, utilizing default system and user prompts.

            If messages or required fields are not specified, the default system
            and user prompts will be used.
        compliancePlan:
          $ref: '#/components/schemas/ComplianceOverride'
          description: >-
            Compliance configuration for this output. Only enable overrides if
            no sensitive data will be stored.
        name:
          type: string
          description: This is the name of the structured output.
        schema:
          $ref: '#/components/schemas/JsonSchema'
          description: >-
            This is the JSON Schema definition for the structured output.


            This is required when creating a structured output. Defines the
            structure and validation rules for the data that will be extracted.
            Supports all JSON Schema features including:

            - Objects and nested properties

            - Arrays and array validation

            - String, number, boolean, and null types

            - Enums and const values

            - Validation constraints (min/max, patterns, etc.)

            - Composition with allOf, anyOf, oneOf
        description:
          type: string
          description: >-
            This is the description of what the structured output extracts.


            Use this to provide context about what data will be extracted and
            how it will be used.
        assistantIds:
          type: array
          items:
            type: string
          description: >-
            These are the assistant IDs that this structured output is linked
            to.


            When linked to assistants, this structured output will be available
            for extraction during those assistant's calls.
        workflowIds:
          type: array
          items:
            type: string
          description: >-
            These are the workflow IDs that this structured output is linked to.


            When linked to workflows, this structured output will be available
            for extraction during those workflow's execution.
      required:
        - name
        - schema
      title: CreateStructuredOutputDTO
    ScorecardMetricConditionsItems:
      type: object
      properties: {}
      title: ScorecardMetricConditionsItems
    ScorecardMetric:
      type: object
      properties:
        structuredOutputId:
          type: string
          description: >-
            This is the unique identifier for the structured output that will be
            used to evaluate the scorecard.

            The structured output must be of type number or boolean only for
            now.
        conditions:
          type: array
          items:
            $ref: '#/components/schemas/ScorecardMetricConditionsItems'
          description: >-
            These are the conditions that will be used to evaluate the
            scorecard.

            Each condition will have a comparator, value, and points that will
            be used to calculate the final score.

            The points will be added to the overall score if the condition is
            met.

            The overall score will be normalized to a 100 point scale to ensure
            uniformity across different scorecards.
      required:
        - structuredOutputId
        - conditions
      title: ScorecardMetric
    CreateScorecardDTO:
      type: object
      properties:
        name:
          type: string
          description: >-
            This is the name of the scorecard. It is only for user reference and
            will not be used for any evaluation.
        description:
          type: string
          description: >-
            This is the description of the scorecard. It is only for user
            reference and will not be used for any evaluation.
        metrics:
          type: array
          items:
            $ref: '#/components/schemas/ScorecardMetric'
          description: >-
            These are the metrics that will be used to evaluate the scorecard.

            Each metric will have a set of conditions and points that will be
            used to generate the score.
        assistantIds:
          type: array
          items:
            type: string
          description: >-
            These are the assistant IDs that this scorecard is linked to.

            When linked to assistants, this scorecard will be available for
            evaluation during those assistants' calls.
      required:
        - metrics
      title: CreateScorecardDTO
    ArtifactPlan:
      type: object
      properties:
        recordingEnabled:
          type: boolean
          description: >-
            This determines whether assistant's calls are recorded. Defaults to
            true.


            Usage:

            - If you don't want to record the calls, set this to false.

            - If you want to record the calls when `assistant.hipaaEnabled`
            (deprecated) or `assistant.compliancePlan.hipaaEnabled` explicity
            set this to true and make sure to provide S3 or GCP credentials on
            the Provider Credentials page in the Dashboard.


            You can find the recording at `call.artifact.recordingUrl` and
            `call.artifact.stereoRecordingUrl` after the call is ended.


            @default true
        recordingFormat:
          $ref: '#/components/schemas/ArtifactPlanRecordingFormat'
          description: |-
            This determines the format of the recording. Defaults to `wav;l16`.

            @default 'wav;l16'
        recordingUseCustomStorageEnabled:
          type: boolean
          description: >-
            This determines whether to use custom storage (S3 or GCP) for call
            recordings when storage credentials are configured.


            When set to false, recordings will be stored on Vapi's storage
            instead of your custom storage, even if you have custom storage
            credentials configured.


            Usage:

            - Set to false if you have custom storage configured but want to
            store recordings on Vapi's storage for this assistant.

            - Set to true (or leave unset) to use your custom storage for
            recordings when available.


            @default true
        videoRecordingEnabled:
          type: boolean
          description: >-
            This determines whether the video is recorded during the call.
            Defaults to false. Only relevant for `webCall` type.


            You can find the video recording at
            `call.artifact.videoRecordingUrl` after the call is ended.


            @default false
        fullMessageHistoryEnabled:
          type: boolean
          description: >-
            This determines whether the artifact contains the full message
            history, even after handoff context engineering. Defaults to false.
        pcapEnabled:
          type: boolean
          description: >-
            This determines whether the SIP packet capture is enabled. Defaults
            to true. Only relevant for `phone` type calls where phone number's
            provider is `vapi` or `byo-phone-number`.


            You can find the packet capture at `call.artifact.pcapUrl` after the
            call is ended.


            @default true
        pcapS3PathPrefix:
          type: string
          description: >-
            This is the path where the SIP packet capture will be uploaded. This
            is only used if you have provided S3 or GCP credentials on the
            Provider Credentials page in the Dashboard.


            If credential.s3PathPrefix or credential.bucketPlan.path is set,
            this will append to it.


            Usage:

            - If you want to upload the packet capture to a specific path, set
            this to the path. Example: `/my-assistant-captures`.

            - If you want to upload the packet capture to the root of the
            bucket, set this to `/`.


            @default '/'
        pcapUseCustomStorageEnabled:
          type: boolean
          description: >-
            This determines whether to use custom storage (S3 or GCP) for SIP
            packet captures when storage credentials are configured.


            When set to false, packet captures will be stored on Vapi's storage
            instead of your custom storage, even if you have custom storage
            credentials configured.


            Usage:

            - Set to false if you have custom storage configured but want to
            store packet captures on Vapi's storage for this assistant.

            - Set to true (or leave unset) to use your custom storage for packet
            captures when available.


            @default true
        loggingEnabled:
          type: boolean
          description: |-
            This determines whether the call logs are enabled. Defaults to true.

            @default true
        loggingUseCustomStorageEnabled:
          type: boolean
          description: >-
            This determines whether to use custom storage (S3 or GCP) for call
            logs when storage credentials are configured.


            When set to false, logs will be stored on Vapi's storage instead of
            your custom storage, even if you have custom storage credentials
            configured.


            Usage:

            - Set to false if you have custom storage configured but want to
            store logs on Vapi's storage for this assistant.

            - Set to true (or leave unset) to use your custom storage for logs
            when available.


            @default true
        transcriptPlan:
          $ref: '#/components/schemas/TranscriptPlan'
          description: >-
            This is the plan for `call.artifact.transcript`. To disable, set
            `transcriptPlan.enabled` to false.
        recordingPath:
          type: string
          description: >-
            This is the path where the recording will be uploaded. This is only
            used if you have provided S3 or GCP credentials on the Provider
            Credentials page in the Dashboard.


            If credential.s3PathPrefix or credential.bucketPlan.path is set,
            this will append to it.


            Usage:

            - If you want to upload the recording to a specific path, set this
            to the path. Example: `/my-assistant-recordings`.

            - If you want to upload the recording to the root of the bucket, set
            this to `/`.


            @default '/'
        structuredOutputIds:
          type: array
          items:
            type: string
          description: >-
            This is an array of structured output IDs to be calculated during
            the call.

            The outputs will be extracted and stored in
            `call.artifact.structuredOutputs` after the call is ended.
        structuredOutputs:
          type: array
          items:
            $ref: '#/components/schemas/CreateStructuredOutputDTO'
          description: >-
            This is an array of transient structured outputs to be calculated
            during the call.

            The outputs will be extracted and stored in
            `call.artifact.structuredOutputs` after the call is ended.

            Use this to provide inline structured output configurations instead
            of referencing existing ones via structuredOutputIds.
        scorecardIds:
          type: array
          items:
            type: string
          description: >-
            This is an array of scorecard IDs that will be evaluated based on
            the structured outputs extracted during the call.

            The scorecards will be evaluated and the results will be stored in
            `call.artifact.scorecards` after the call has ended.
        scorecards:
          type: array
          items:
            $ref: '#/components/schemas/CreateScorecardDTO'
          description: >-
            This is the array of scorecards that will be evaluated based on the
            structured outputs extracted during the call.

            The scorecards will be evaluated and the results will be stored in
            `call.artifact.scorecards` after the call has ended.
        loggingPath:
          type: string
          description: >-
            This is the path where the call logs will be uploaded. This is only
            used if you have provided S3 or GCP credentials on the Provider
            Credentials page in the Dashboard.


            If credential.s3PathPrefix or credential.bucketPlan.path is set,
            this will append to it.


            Usage:

            - If you want to upload the call logs to a specific path, set this
            to the path. Example: `/my-assistant-logs`.

            - If you want to upload the call logs to the root of the bucket, set
            this to `/`.


            @default '/'
      title: ArtifactPlan
    StartSpeakingPlanSmartEndpointingEnabled1:
      type: string
      enum:
        - livekit
      title: StartSpeakingPlanSmartEndpointingEnabled1
    StartSpeakingPlanSmartEndpointingEnabled:
      oneOf:
        - type: boolean
        - $ref: '#/components/schemas/StartSpeakingPlanSmartEndpointingEnabled1'
      title: StartSpeakingPlanSmartEndpointingEnabled
    VapiSmartEndpointingPlanProvider:
      type: string
      enum:
        - vapi
        - livekit
        - custom-endpointing-model
      description: This is the provider for the smart endpointing plan.
      title: VapiSmartEndpointingPlanProvider
    VapiSmartEndpointingPlan:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/VapiSmartEndpointingPlanProvider'
          description: This is the provider for the smart endpointing plan.
      required:
        - provider
      title: VapiSmartEndpointingPlan
    LivekitSmartEndpointingPlanProvider:
      type: string
      enum:
        - vapi
        - livekit
        - custom-endpointing-model
      description: This is the provider for the smart endpointing plan.
      title: LivekitSmartEndpointingPlanProvider
    LivekitSmartEndpointingPlan:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/LivekitSmartEndpointingPlanProvider'
          description: This is the provider for the smart endpointing plan.
        waitFunction:
          type: string
          description: >-
            This expression describes how long the bot will wait to start
            speaking based on the likelihood that the user has reached an
            endpoint.


            This is a millisecond valued function. It maps probabilities (real
            numbers on [0,1]) to milliseconds that the bot should wait before
            speaking ([0, \infty]). Any negative values that are returned are
            set to zero (the bot can't start talking in the past).


            A probability of zero represents very high confidence that the
            caller has stopped speaking, and would like the bot to speak to
            them. A probability of one represents very high confidence that the
            caller is still speaking.


            Under the hood, this is parsed into a mathjs expression. Whatever
            you use to write your expression needs to be valid with respect to
            mathjs


            @default "20 + 500 * sqrt(x) + 2500 * x^3"
      required:
        - provider
      title: LivekitSmartEndpointingPlan
    CustomEndpointingModelSmartEndpointingPlanProvider:
      type: string
      enum:
        - vapi
        - livekit
        - custom-endpointing-model
      description: >-
        This is the provider for the smart endpointing plan. Use
        `custom-endpointing-model` for custom endpointing providers that are not
        natively supported.
      title: CustomEndpointingModelSmartEndpointingPlanProvider
    CustomEndpointingModelSmartEndpointingPlan:
      type: object
      properties:
        provider:
          $ref: >-
            #/components/schemas/CustomEndpointingModelSmartEndpointingPlanProvider
          description: >-
            This is the provider for the smart endpointing plan. Use
            `custom-endpointing-model` for custom endpointing providers that are
            not natively supported.
        server:
          $ref: '#/components/schemas/Server'
          description: >-
            This is where the endpointing request will be sent. If not provided,
            will be sent to `assistant.server`. If that does not exist either,
            will be sent to `org.server`.


            Request Example:


            POST https://{server.url}

            Content-Type: application/json


            {
              "message": {
                "type": "call.endpointing.request",
                "messages": [
                  {
                    "role": "user",
                    "message": "Hello, how are you?",
                    "time": 1234567890,
                    "secondsFromStart": 0
                  }
                ],
                ...other metadata about the call...
              }
            }


            Response Expected:

            {
              "timeoutSeconds": 0.5
            }


            The timeout is the number of seconds to wait before considering the
            user's speech as finished. The endpointing timeout is automatically
            reset each time a new transcript is received (and another
            `call.endpointing.request` is sent).
      required:
        - provider
      title: CustomEndpointingModelSmartEndpointingPlan
    StartSpeakingPlanSmartEndpointingPlan:
      oneOf:
        - $ref: '#/components/schemas/VapiSmartEndpointingPlan'
        - $ref: '#/components/schemas/LivekitSmartEndpointingPlan'
        - $ref: '#/components/schemas/CustomEndpointingModelSmartEndpointingPlan'
      description: >-
        This is the plan for smart endpointing. Pick between Vapi smart
        endpointing, LiveKit, or custom endpointing model (or nothing). We
        strongly recommend using livekit endpointing when working in English.
        LiveKit endpointing is not supported in other languages, yet.


        If this is set, it will override and take precedence over
        `transcriptionEndpointingPlan`.

        This plan will still be overridden by any matching
        `customEndpointingRules`.


        If this is not set, the system will automatically use the transcriber's
        built-in endpointing capabilities if available.
      title: StartSpeakingPlanSmartEndpointingPlan
    AssistantCustomEndpointingRuleType:
      type: string
      enum:
        - assistant
      description: >-
        This endpointing rule is based on the last assistant message before
        customer started speaking.


        Flow:

        - Assistant speaks

        - Customer starts speaking

        - Customer transcription comes in

        - This rule is evaluated on the last assistant message

        - If a match is found based on `regex`, the endpointing timeout is set
        to `timeoutSeconds`


        Usage:

        - If you have yes/no questions in your use case like "are you interested
        in a loan?", you can set a shorter timeout.

        - If you have questions where the customer may pause to look up
        information like "what's my account number?", you can set a longer
        timeout.
      title: AssistantCustomEndpointingRuleType
    AssistantCustomEndpointingRule:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/AssistantCustomEndpointingRuleType'
          description: >-
            This endpointing rule is based on the last assistant message before
            customer started speaking.


            Flow:

            - Assistant speaks

            - Customer starts speaking

            - Customer transcription comes in

            - This rule is evaluated on the last assistant message

            - If a match is found based on `regex`, the endpointing timeout is
            set to `timeoutSeconds`


            Usage:

            - If you have yes/no questions in your use case like "are you
            interested in a loan?", you can set a shorter timeout.

            - If you have questions where the customer may pause to look up
            information like "what's my account number?", you can set a longer
            timeout.
        regex:
          type: string
          description: >-
            This is the regex pattern to match.


            Note:

            - This works by using the `RegExp.test` method in Node.JS. Eg.
            `/hello/.test("hello there")` will return `true`.


            Hot tip:

            - In JavaScript, escape `\` when sending the regex pattern. Eg.
            `"hello\sthere"` will be sent over the wire as `"hellosthere"`. Send
            `"hello\\sthere"` instead.

            - `RegExp.test` does substring matching, so `/cat/.test("I love
            cats")` will return `true`. To do full string matching, send
            "^cat$".
        regexOptions:
          type: array
          items:
            $ref: '#/components/schemas/RegexOption'
          description: |-
            These are the options for the regex match. Defaults to all disabled.

            @default []
        timeoutSeconds:
          type: number
          format: double
          description: This is the endpointing timeout in seconds, if the rule is matched.
      required:
        - type
        - regex
        - timeoutSeconds
      title: AssistantCustomEndpointingRule
    CustomerCustomEndpointingRuleType:
      type: string
      enum:
        - customer
      description: >-
        This endpointing rule is based on current customer message as they are
        speaking.


        Flow:

        - Assistant speaks

        - Customer starts speaking

        - Customer transcription comes in

        - This rule is evaluated on the current customer transcription

        - If a match is found based on `regex`, the endpointing timeout is set
        to `timeoutSeconds`


        Usage:

        - If you want to wait longer while customer is speaking numbers, you can
        set a longer timeout.
      title: CustomerCustomEndpointingRuleType
    CustomerCustomEndpointingRule:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/CustomerCustomEndpointingRuleType'
          description: >-
            This endpointing rule is based on current customer message as they
            are speaking.


            Flow:

            - Assistant speaks

            - Customer starts speaking

            - Customer transcription comes in

            - This rule is evaluated on the current customer transcription

            - If a match is found based on `regex`, the endpointing timeout is
            set to `timeoutSeconds`


            Usage:

            - If you want to wait longer while customer is speaking numbers, you
            can set a longer timeout.
        regex:
          type: string
          description: >-
            This is the regex pattern to match.


            Note:

            - This works by using the `RegExp.test` method in Node.JS. Eg.
            `/hello/.test("hello there")` will return `true`.


            Hot tip:

            - In JavaScript, escape `\` when sending the regex pattern. Eg.
            `"hello\sthere"` will be sent over the wire as `"hellosthere"`. Send
            `"hello\\sthere"` instead.

            - `RegExp.test` does substring matching, so `/cat/.test("I love
            cats")` will return `true`. To do full string matching, send
            "^cat$".
        regexOptions:
          type: array
          items:
            $ref: '#/components/schemas/RegexOption'
          description: |-
            These are the options for the regex match. Defaults to all disabled.

            @default []
        timeoutSeconds:
          type: number
          format: double
          description: This is the endpointing timeout in seconds, if the rule is matched.
      required:
        - type
        - regex
        - timeoutSeconds
      title: CustomerCustomEndpointingRule
    BothCustomEndpointingRuleType:
      type: string
      enum:
        - both
      description: >-
        This endpointing rule is based on both the last assistant message and
        the current customer message as they are speaking.


        Flow:

        - Assistant speaks

        - Customer starts speaking

        - Customer transcription comes in

        - This rule is evaluated on the last assistant message and the current
        customer transcription

        - If assistant message matches `assistantRegex` AND customer message
        matches `customerRegex`, the endpointing timeout is set to
        `timeoutSeconds`


        Usage:

        - If you want to wait longer while customer is speaking numbers, you can
        set a longer timeout.
      title: BothCustomEndpointingRuleType
    BothCustomEndpointingRule:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/BothCustomEndpointingRuleType'
          description: >-
            This endpointing rule is based on both the last assistant message
            and the current customer message as they are speaking.


            Flow:

            - Assistant speaks

            - Customer starts speaking

            - Customer transcription comes in

            - This rule is evaluated on the last assistant message and the
            current customer transcription

            - If assistant message matches `assistantRegex` AND customer message
            matches `customerRegex`, the endpointing timeout is set to
            `timeoutSeconds`


            Usage:

            - If you want to wait longer while customer is speaking numbers, you
            can set a longer timeout.
        assistantRegex:
          type: string
          description: >-
            This is the regex pattern to match the assistant's message.


            Note:

            - This works by using the `RegExp.test` method in Node.JS. Eg.
            `/hello/.test("hello there")` will return `true`.


            Hot tip:

            - In JavaScript, escape `\` when sending the regex pattern. Eg.
            `"hello\sthere"` will be sent over the wire as `"hellosthere"`. Send
            `"hello\\sthere"` instead.

            - `RegExp.test` does substring matching, so `/cat/.test("I love
            cats")` will return `true`. To do full string matching, send
            "^cat$".
        assistantRegexOptions:
          type: array
          items:
            $ref: '#/components/schemas/RegexOption'
          description: >-
            These are the options for the assistant's message regex match.
            Defaults to all disabled.


            @default []
        customerRegex:
          type: string
        customerRegexOptions:
          type: array
          items:
            $ref: '#/components/schemas/RegexOption'
          description: >-
            These are the options for the customer's message regex match.
            Defaults to all disabled.


            @default []
        timeoutSeconds:
          type: number
          format: double
          description: This is the endpointing timeout in seconds, if the rule is matched.
      required:
        - type
        - assistantRegex
        - customerRegex
        - timeoutSeconds
      title: BothCustomEndpointingRule
    StartSpeakingPlanCustomEndpointingRulesItems:
      oneOf:
        - $ref: '#/components/schemas/AssistantCustomEndpointingRule'
        - $ref: '#/components/schemas/CustomerCustomEndpointingRule'
        - $ref: '#/components/schemas/BothCustomEndpointingRule'
      title: StartSpeakingPlanCustomEndpointingRulesItems
    TranscriptionEndpointingPlan:
      type: object
      properties:
        onPunctuationSeconds:
          type: number
          format: double
          description: >-
            The minimum number of seconds to wait after transcription ending
            with punctuation before sending a request to the model. Defaults to
            0.1.


            This setting exists because the transcriber punctuates the
            transcription when it's more confident that customer has completed a
            thought.


            @default 0.1
        onNoPunctuationSeconds:
          type: number
          format: double
          description: >-
            The minimum number of seconds to wait after transcription ending
            without punctuation before sending a request to the model. Defaults
            to 1.5.


            This setting exists to catch the cases where the transcriber was not
            confident enough to punctuate the transcription, but the customer is
            done and has been silent for a long time.


            @default 1.5
        onNumberSeconds:
          type: number
          format: double
          description: >-
            The minimum number of seconds to wait after transcription ending
            with a number before sending a request to the model. Defaults to
            0.4.


            This setting exists because the transcriber will sometimes punctuate
            the transcription ending with a number, even though the customer
            hasn't uttered the full number. This happens commonly for long
            numbers when the customer reads the number in chunks.


            @default 0.5
      title: TranscriptionEndpointingPlan
    StartSpeakingPlan:
      type: object
      properties:
        waitSeconds:
          type: number
          format: double
          description: >-
            This is how long assistant waits before speaking. Defaults to 0.4.


            This is the minimum it will wait but if there is latency is the
            pipeline, this minimum will be exceeded. This is intended as a
            stopgap in case the pipeline is moving too fast.


            Example:

            - If model generates tokens and voice generates bytes within 100ms,
            the pipeline still waits 300ms before outputting speech.


            Usage:

            - If the customer is taking long pauses, set this to a higher value.

            - If the assistant is accidentally jumping in too much, set this to
            a higher value.


            @default 0.4
        smartEndpointingEnabled:
          $ref: '#/components/schemas/StartSpeakingPlanSmartEndpointingEnabled'
        smartEndpointingPlan:
          $ref: '#/components/schemas/StartSpeakingPlanSmartEndpointingPlan'
          description: >-
            This is the plan for smart endpointing. Pick between Vapi smart
            endpointing, LiveKit, or custom endpointing model (or nothing). We
            strongly recommend using livekit endpointing when working in
            English. LiveKit endpointing is not supported in other languages,
            yet.


            If this is set, it will override and take precedence over
            `transcriptionEndpointingPlan`.

            This plan will still be overridden by any matching
            `customEndpointingRules`.


            If this is not set, the system will automatically use the
            transcriber's built-in endpointing capabilities if available.
        customEndpointingRules:
          type: array
          items:
            $ref: '#/components/schemas/StartSpeakingPlanCustomEndpointingRulesItems'
          description: >-
            These are the custom endpointing rules to set an endpointing timeout
            based on a regex on the customer's speech or the assistant's last
            message.


            Usage:

            - If you have yes/no questions like "are you interested in a loan?",
            you can set a shorter timeout.

            - If you have questions where the customer may pause to look up
            information like "what's my account number?", you can set a longer
            timeout.

            - If you want to wait longer while customer is enumerating a list of
            numbers, you can set a longer timeout.


            These rules have the highest precedence and will override both
            `smartEndpointingPlan` and `transcriptionEndpointingPlan` when a
            rule is matched.


            The rules are evaluated in order and the first one that matches will
            be used.


            Order of precedence for endpointing:

            1. customEndpointingRules (if any match)

            2. smartEndpointingPlan (if set)

            3. transcriptionEndpointingPlan


            @default []
        transcriptionEndpointingPlan:
          $ref: '#/components/schemas/TranscriptionEndpointingPlan'
          description: >-
            This determines how a customer speech is considered done
            (endpointing) using the transcription of customer's speech.


            Once an endpoint is triggered, the request is sent to
            `assistant.model`.


            Note: This plan is only used if `smartEndpointingPlan` is not set
            and transcriber does not have built-in endpointing capabilities. If
            both are provided, `smartEndpointingPlan` takes precedence.

            This plan will also be overridden by any matching
            `customEndpointingRules`.
      title: StartSpeakingPlan
    StopSpeakingPlan:
      type: object
      properties:
        numWords:
          type: number
          format: double
          description: >-
            This is the number of words that the customer has to say before the
            assistant will stop talking.


            Words like "stop", "actually", "no", etc. will always interrupt
            immediately regardless of this value.


            Words like "okay", "yeah", "right" will never interrupt.


            When set to 0, `voiceSeconds` is used in addition to the
            transcriptions to determine the customer has started speaking.


            Defaults to 0.


            @default 0
        voiceSeconds:
          type: number
          format: double
          description: >-
            This is the seconds customer has to speak before the assistant stops
            talking. This uses the VAD (Voice Activity Detection) spike to
            determine if the customer has started speaking.


            Considerations:

            - A lower value might be more responsive but could potentially pick
            up non-speech sounds.

            - A higher value reduces false positives but might slightly delay
            the detection of speech onset.


            This is only used if `numWords` is set to 0.


            Defaults to 0.2


            @default 0.2
        backoffSeconds:
          type: number
          format: double
          description: >-
            This is the seconds to wait before the assistant will start talking
            again after being interrupted.


            Defaults to 1.


            @default 1
        acknowledgementPhrases:
          type: array
          items:
            type: string
          description: >-
            These are the phrases that will never interrupt the assistant, even
            if numWords threshold is met.

            These are typically acknowledgement or backchanneling phrases.
        interruptionPhrases:
          type: array
          items:
            type: string
          description: >-
            These are the phrases that will always interrupt the assistant
            immediately, regardless of numWords.

            These are typically phrases indicating disagreement or desire to
            stop.
      title: StopSpeakingPlan
    MonitorPlan:
      type: object
      properties:
        listenEnabled:
          type: boolean
          description: >-
            This determines whether the assistant's calls allow live listening.
            Defaults to true.


            Fetch `call.monitor.listenUrl` to get the live listening URL.


            @default true
        listenAuthenticationEnabled:
          type: boolean
          description: >-
            This enables authentication on the `call.monitor.listenUrl`.


            If `listenAuthenticationEnabled` is `true`, the
            `call.monitor.listenUrl` will require an `Authorization: Bearer
            <vapi-public-api-key>` header.


            @default false
        controlEnabled:
          type: boolean
          description: >-
            This determines whether the assistant's calls allow live control.
            Defaults to true.


            Fetch `call.monitor.controlUrl` to get the live control URL.


            To use, send any control message via a POST request to
            `call.monitor.controlUrl`. Here are the types of controls supported:
            https://docs.vapi.ai/api-reference/messages/client-inbound-message


            @default true
        controlAuthenticationEnabled:
          type: boolean
          description: >-
            This enables authentication on the `call.monitor.controlUrl`.


            If `controlAuthenticationEnabled` is `true`, the
            `call.monitor.controlUrl` will require an `Authorization: Bearer
            <vapi-public-api-key>` header.


            @default false
        monitorIds:
          type: array
          items:
            type: string
          description: >-
            This the set of monitor ids that are attached to the assistant.

            The source of truth for the monitor ids is the assistant_monitor
            join table.

            This field can be used for transient assistants and to update
            assistants with new monitor ids.


            @default []
      title: MonitorPlan
    KeypadInputPlanDelimiters:
      type: string
      enum:
        - '#'
        - '*'
        - ''
      description: |-
        This is the delimiter(s) that will be used to process the input.
        Can be '#', '*', or an empty array.
      title: KeypadInputPlanDelimiters
    KeypadInputPlan:
      type: object
      properties:
        enabled:
          type: boolean
          description: |-
            This keeps track of whether the user has enabled keypad input.
            By default, it is off.

            @default false
        timeoutSeconds:
          type: number
          format: double
          description: >-
            This is the time in seconds to wait before processing the input.

            If the input is not received within this time, the input will be
            ignored.

            If set to "off", the input will be processed when the user enters a
            delimiter or immediately if no delimiter is used.


            @default 2
        delimiters:
          $ref: '#/components/schemas/KeypadInputPlanDelimiters'
          description: |-
            This is the delimiter(s) that will be used to process the input.
            Can be '#', '*', or an empty array.
      title: KeypadInputPlan
    AssistantOverrides:
      type: object
      properties:
        transcriber:
          $ref: '#/components/schemas/AssistantOverridesTranscriber'
          description: These are the options for the assistant's transcriber.
        model:
          $ref: '#/components/schemas/AssistantOverridesModel'
          description: These are the options for the assistant's LLM.
        voice:
          $ref: '#/components/schemas/AssistantOverridesVoice'
          description: These are the options for the assistant's voice.
        firstMessage:
          type: string
          description: >-
            This is the first message that the assistant will say. This can also
            be a URL to a containerized audio file (mp3, wav, etc.).


            If unspecified, assistant will wait for user to speak and use the
            model to respond once they speak.
        firstMessageInterruptionsEnabled:
          type: boolean
          default: false
        firstMessageMode:
          $ref: '#/components/schemas/AssistantOverridesFirstMessageMode'
          description: >-
            This is the mode for the first message. Default is
            'assistant-speaks-first'.


            Use:

            - 'assistant-speaks-first' to have the assistant speak first.

            - 'assistant-waits-for-user' to have the assistant wait for the user
            to speak first.

            - 'assistant-speaks-first-with-model-generated-message' to have the
            assistant speak first with a message generated by the model based on
            the conversation state. (`assistant.model.messages` at call start,
            `call.messages` at squad transfer points).


            @default 'assistant-speaks-first'
        voicemailDetection:
          $ref: '#/components/schemas/AssistantOverridesVoicemailDetection'
          description: >-
            These are the settings to configure or disable voicemail detection.
            Alternatively, voicemail detection can be configured using the
            model.tools=[VoicemailTool].

            By default, voicemail detection is disabled.
        clientMessages:
          $ref: '#/components/schemas/AssistantOverridesClientMessages'
          description: >-
            These are the messages that will be sent to your Client SDKs.
            Default is
            conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started,assistant.started.
            You can check the shape of the messages in ClientMessage schema.
        serverMessages:
          $ref: '#/components/schemas/AssistantOverridesServerMessages'
          description: >-
            These are the messages that will be sent to your Server URL. Default
            is
            conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,handoff-destination-request,user-interrupted,assistant.started.
            You can check the shape of the messages in ServerMessage schema.
        maxDurationSeconds:
          type: number
          format: double
          description: >-
            This is the maximum number of seconds that the call will last. When
            the call reaches this duration, it will be ended.


            @default 600 (10 minutes)
        backgroundSound:
          $ref: '#/components/schemas/AssistantOverridesBackgroundSound'
          description: >-
            This is the background sound in the call. Default for phone calls is
            'office' and default for web calls is 'off'.

            You can also provide a custom sound by providing a URL to an audio
            file.
        modelOutputInMessagesEnabled:
          type: boolean
          description: >-
            This determines whether the model's output is used in conversation
            history rather than the transcription of assistant's speech.


            @default false
        transportConfigurations:
          type: array
          items:
            $ref: >-
              #/components/schemas/AssistantOverridesTransportConfigurationsItems
          description: >-
            These are the configurations to be passed to the transport providers
            of assistant's calls, like Twilio. You can store multiple
            configurations for different transport providers. For a call, only
            the configuration matching the call transport provider is used.
        observabilityPlan:
          $ref: '#/components/schemas/LangfuseObservabilityPlan'
          description: |-
            This is the plan for observability of assistant's calls.

            Currently, only Langfuse is supported.
        credentials:
          type: array
          items:
            $ref: '#/components/schemas/AssistantOverridesCredentialsItems'
          description: >-
            These are dynamic credentials that will be used for the assistant
            calls. By default, all the credentials are available for use in the
            call but you can supplement an additional credentials using this.
            Dynamic credentials override existing credentials.
        hooks:
          type: array
          items:
            $ref: '#/components/schemas/AssistantOverridesHooksItems'
          description: This is a set of actions that will be performed on certain events.
        tools:append:
          type: array
          items:
            $ref: '#/components/schemas/AssistantOverridesToolsAppendItems'
        variableValues:
          $ref: '#/components/schemas/AssistantOverridesVariableValues'
          description: >-
            These are values that will be used to replace the template variables
            in the assistant messages and other text-based fields.

            This uses LiquidJS syntax.
            https://liquidjs.com/tutorials/intro-to-liquid.html


            So for example, `{{ name }}` will be replaced with the value of
            `name` in `variableValues`.

            `{{"now" | date: "%b %d, %Y, %I:%M %p", "America/New_York"}}` will
            be replaced with the current date and time in New York.
             Some VAPI reserved defaults:
             - *customer* - the customer object
        name:
          type: string
          description: >-
            This is the name of the assistant.


            This is required when you want to transfer between assistants in a
            call.
        voicemailMessage:
          type: string
          description: >-
            This is the message that the assistant will say if the call is
            forwarded to voicemail.


            If unspecified, it will hang up.
        endCallMessage:
          type: string
          description: |-
            This is the message that the assistant will say if it ends the call.

            If unspecified, it will hang up without saying anything.
        endCallPhrases:
          type: array
          items:
            type: string
          description: >-
            This list contains phrases that, if spoken by the assistant, will
            trigger the call to be hung up. Case insensitive.
        compliancePlan:
          $ref: '#/components/schemas/CompliancePlan'
        metadata:
          $ref: '#/components/schemas/AssistantOverridesMetadata'
          description: This is for metadata you want to store on the assistant.
        backgroundSpeechDenoisingPlan:
          $ref: '#/components/schemas/BackgroundSpeechDenoisingPlan'
          description: >-
            This enables filtering of noise and background speech while the user
            is talking.


            Features:

            - Smart denoising using Krisp

            - Fourier denoising


            Smart denoising can be combined with or used independently of
            Fourier denoising.


            Order of precedence:

            - Smart denoising

            - Fourier denoising
        analysisPlan:
          $ref: '#/components/schemas/AnalysisPlan'
          description: >-
            This is the plan for analysis of assistant's calls. Stored in
            `call.analysis`.
        artifactPlan:
          $ref: '#/components/schemas/ArtifactPlan'
          description: >-
            This is the plan for artifacts generated during assistant's calls.
            Stored in `call.artifact`.
        startSpeakingPlan:
          $ref: '#/components/schemas/StartSpeakingPlan'
          description: >-
            This is the plan for when the assistant should start talking.


            You should configure this if you're running into these issues:

            - The assistant is too slow to start talking after the customer is
            done speaking.

            - The assistant is too fast to start talking after the customer is
            done speaking.

            - The assistant is so fast that it's actually interrupting the
            customer.
        stopSpeakingPlan:
          $ref: '#/components/schemas/StopSpeakingPlan'
          description: >-
            This is the plan for when assistant should stop talking on customer
            interruption.


            You should configure this if you're running into these issues:

            - The assistant is too slow to recognize customer's interruption.

            - The assistant is too fast to recognize customer's interruption.

            - The assistant is getting interrupted by phrases that are just
            acknowledgments.

            - The assistant is getting interrupted by background noises.

            - The assistant is not properly stopping -- it starts talking right
            after getting interrupted.
        monitorPlan:
          $ref: '#/components/schemas/MonitorPlan'
          description: >-
            This is the plan for real-time monitoring of the assistant's calls.


            Usage:

            - To enable live listening of the assistant's calls, set
            `monitorPlan.listenEnabled` to `true`.

            - To enable live control of the assistant's calls, set
            `monitorPlan.controlEnabled` to `true`.

            - To attach monitors to the assistant, set `monitorPlan.monitorIds`
            to the set of monitor ids.
        credentialIds:
          type: array
          items:
            type: string
          description: >-
            These are the credentials that will be used for the assistant calls.
            By default, all the credentials are available for use in the call
            but you can provide a subset using this.
        server:
          $ref: '#/components/schemas/Server'
          description: >-
            This is where Vapi will send webhooks. You can find all webhooks
            available along with their shape in ServerMessage schema.


            The order of precedence is:


            1. assistant.server.url

            2. phoneNumber.serverUrl

            3. org.serverUrl
        keypadInputPlan:
          $ref: '#/components/schemas/KeypadInputPlan'
      title: AssistantOverrides
    HandoffDestinationAssistant:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/HandoffDestinationAssistantType'
        contextEngineeringPlan:
          $ref: >-
            #/components/schemas/HandoffDestinationAssistantContextEngineeringPlan
          description: >-
            This is the plan for manipulating the message context before handing
            off the call to the next assistant.
        assistantName:
          type: string
          description: >-
            This is the assistant to transfer the call to. You must provide
            either assistantName or assistantId.
        assistantId:
          type: string
          description: >-
            This is the assistant id to transfer the call to. You must provide
            either assistantName or assistantId.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: >-
            This is a transient assistant to transfer the call to. You may
            provide a transient assistant in the response 
            `handoff-destination-request` in a dynamic handoff.
        variableExtractionPlan:
          $ref: '#/components/schemas/VariableExtractionPlan'
          description: This is the variable extraction plan for the handoff tool.
        assistantOverrides:
          $ref: '#/components/schemas/AssistantOverrides'
          description: >-
            These are the assistant overrides to apply to the destination
            assistant.
        description:
          type: string
          description: >-
            This is the description of the destination, used by the AI to choose
            when and how to transfer the call.
      required:
        - type
      title: HandoffDestinationAssistant
    HandoffDestinationDynamicType:
      type: string
      enum:
        - dynamic
      title: HandoffDestinationDynamicType
    HandoffDestinationDynamic:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/HandoffDestinationDynamicType'
        server:
          $ref: '#/components/schemas/Server'
          description: >-
            This is where Vapi will send the handoff-destination-request webhook
            in a dynamic handoff.


            The order of precedence is:


            1. tool.server.url

            2. assistant.server.url

            3. phoneNumber.server.url

            4. org.server.url
        description:
          type: string
          description: >-
            This is the description of the destination, used by the AI to choose
            when and how to transfer the call.
      required:
        - type
      title: HandoffDestinationDynamic
    HandoffDestinationSquadType:
      type: string
      enum:
        - squad
      title: HandoffDestinationSquadType
    HandoffDestinationSquadContextEngineeringPlan:
      oneOf:
        - $ref: '#/components/schemas/ContextEngineeringPlanLastNMessages'
        - $ref: '#/components/schemas/ContextEngineeringPlanNone'
        - $ref: '#/components/schemas/ContextEngineeringPlanAll'
        - $ref: '#/components/schemas/ContextEngineeringPlanUserAndAssistantMessages'
      description: >-
        This is the plan for manipulating the message context before handing off
        the call to the squad.
      title: HandoffDestinationSquadContextEngineeringPlan
    SquadMemberDtoAssistantDestinationsItems:
      oneOf:
        - $ref: '#/components/schemas/TransferDestinationAssistant'
        - $ref: '#/components/schemas/HandoffDestinationAssistant'
      title: SquadMemberDtoAssistantDestinationsItems
    SquadMemberDTO:
      type: object
      properties:
        assistantDestinations:
          type: array
          items:
            $ref: '#/components/schemas/SquadMemberDtoAssistantDestinationsItems'
        assistantId:
          type:
            - string
            - 'null'
          description: >-
            This is the assistant that will be used for the call. To use a
            transient assistant, use `assistant` instead.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: >-
            This is the assistant that will be used for the call. To use an
            existing assistant, use `assistantId` instead.
        assistantOverrides:
          $ref: '#/components/schemas/AssistantOverrides'
          description: >-
            This can be used to override the assistant's settings and provide
            values for it's template variables.
      title: SquadMemberDTO
    CreateSquadDTO:
      type: object
      properties:
        name:
          type: string
          description: This is the name of the squad.
        members:
          type: array
          items:
            $ref: '#/components/schemas/SquadMemberDTO'
          description: |-
            This is the list of assistants that make up the squad.

            The call will start with the first assistant in the list.
        membersOverrides:
          $ref: '#/components/schemas/AssistantOverrides'
          description: >-
            This can be used to override all the assistants' settings and
            provide values for their template variables.


            Both `membersOverrides` and `members[n].assistantOverrides` can be
            used together. First, `members[n].assistantOverrides` is applied.
            Then, `membersOverrides` is applied as a global override.
      required:
        - members
      title: CreateSquadDTO
    HandoffDestinationSquad:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/HandoffDestinationSquadType'
        contextEngineeringPlan:
          $ref: '#/components/schemas/HandoffDestinationSquadContextEngineeringPlan'
          description: >-
            This is the plan for manipulating the message context before handing
            off the call to the squad.
        squadId:
          type: string
          description: This is the squad id to transfer the call to.
        squad:
          $ref: '#/components/schemas/CreateSquadDTO'
          description: This is a transient squad to transfer the call to.
        entryAssistantName:
          type: string
          description: >-
            This is the name of the entry assistant to start with when handing
            off to the squad.

            If not provided, the first member of the squad will be used.
        variableExtractionPlan:
          $ref: '#/components/schemas/VariableExtractionPlan'
          description: This is the variable extraction plan for the handoff tool.
        squadOverrides:
          $ref: '#/components/schemas/AssistantOverrides'
          description: |-
            These are the overrides to apply to the squad configuration.
            Maps to squad-level membersOverrides.
        description:
          type: string
          description: >-
            This is the description of the destination, used by the AI to choose
            when and how to transfer the call.
      required:
        - type
      title: HandoffDestinationSquad
    CreateHandoffToolDtoDestinationsItems:
      oneOf:
        - $ref: '#/components/schemas/HandoffDestinationAssistant'
        - $ref: '#/components/schemas/HandoffDestinationDynamic'
        - $ref: '#/components/schemas/HandoffDestinationSquad'
      title: CreateHandoffToolDtoDestinationsItems
    CreateHandoffToolDTO:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/CreateHandoffToolDtoMessagesItems'
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/CreateHandoffToolDtoType'
          description: >-
            This is the type of the tool.

            When you're using handoff tool, we recommend adding this to your
            system prompt

            ---

            # System context


            You are part of a multi-agent system designed to make agent
            coordination and execution easy. Agents uses two primary
            abstraction: **Agents** and **Handoffs**. An agent encompasses
            instructions and tools and can hand off a conversation to another
            agent when appropriate. Handoffs are achieved by calling a handoff
            function, generally named `handoff_to_<agent_name>`. Handoffs
            between agents are handled seamlessly in the background; do not
            mention or draw attention to these handoffs in your conversation
            with the user.


            # Agent context


            {put your agent system prompt here}

            ---
        defaultResult:
          type: string
          description: >-
            This is the default local tool result message used when no runtime
            handoff result override is returned.
        destinations:
          type: array
          items:
            $ref: '#/components/schemas/CreateHandoffToolDtoDestinationsItems'
          description: >-
            These are the destinations that the call can be handed off to.


            Usage:

            1. Single destination


            Use `assistantId` to handoff the call to a saved assistant, or
            `assistantName` to handoff the call to an assistant in the same
            squad.


            ```json

            {
              "tools": [
                {
                  "type": "handoff",
                  "destinations": [
                    {
                      "type": "assistant",
                      "assistantId": "assistant-123", // or "assistantName": "Assistant123"
                      "description": "customer wants to be handed off to assistant-123",
                      "contextEngineeringPlan": {
                        "type": "all"
                      }
                    }
                  ],
                }
              ]
            }

            ```


            2. Multiple destinations


            2.1. Multiple Tools, Each With One Destination (OpenAI recommended)


            ```json

            {
              "tools": [
                {
                  "type": "handoff",
                  "destinations": [
                    {
                      "type": "assistant",
                      "assistantId": "assistant-123",
                      "description": "customer wants to be handed off to assistant-123",
                      "contextEngineeringPlan": {
                        "type": "all"
                      }
                    },
                  ],
                },
                {
                  "type": "handoff",
                  "destinations": [
                    {
                      "type": "assistant",
                      "assistantId": "assistant-456",
                      "description": "customer wants to be handed off to assistant-456",
                      "contextEngineeringPlan": {
                        "type": "all"
                      }
                    }
                  ],
                }
              ]
            }

            ```


            2.2. One Tool, Multiple Destinations (Anthropic recommended)


            ```json

            {
              "tools": [
                {
                  "type": "handoff",
                  "destinations": [
                    {
                      "type": "assistant",
                      "assistantId": "assistant-123",
                      "description": "customer wants to be handed off to assistant-123",
                      "contextEngineeringPlan": {
                        "type": "all"
                      }
                    },
                    {
                      "type": "assistant",
                      "assistantId": "assistant-456",
                      "description": "customer wants to be handed off to assistant-456",
                      "contextEngineeringPlan": {
                        "type": "all"
                      }
                    }
                  ],
                }
              ]
            }

            ```


            3. Dynamic destination


            3.1 To determine the destination dynamically, supply a `dynamic`
            handoff destination type and a `server` object.
                VAPI will send a handoff-destination-request webhook to the `server.url`.
                The response from the server will be used as the destination (if valid).

            ```json

            {
              "tools": [
                {
                  "type": "handoff",
                  "destinations": [
                    {
                      "type": "dynamic",
                      "server": {
                        "url": "https://example.com"
                      }
                    }
                  ],
                }
              ]
            }

            ```


            3.2. To pass custom parameters to the server, you can use the
            `function` object.


            ```json

            {
              "tools": [
                {
                  "type": "handoff",
                  "destinations": [
                    {
                      "type": "dynamic",
                      "server": {
                        "url": "https://example.com"
                      },
                    }
                  ],
                  "function": {
                    "name": "handoff",
                    "description": "Call this function when the customer is ready to be handed off to the next assistant",
                    "parameters": {
                      "type": "object",
                      "properties": {
                        "destination": {
                          "type": "string",
                          "description": "Use dynamic when customer is ready to be handed off to the next assistant",
                          "enum": ["dynamic"]
                        },
                        "customerAreaCode": {
                          "type": "number",
                          "description": "Area code of the customer"
                        },
                        "customerIntent": {
                          "type": "string",
                          "enum": ["new-customer", "existing-customer"],
                          "description": "Use new-customer when customer is a new customer, existing-customer when customer is an existing customer"
                        },
                        "customerSentiment": {
                          "type": "string",
                          "enum": ["positive", "negative", "neutral"],
                          "description": "Use positive when customer is happy, negative when customer is unhappy, neutral when customer is neutral"
                        }
                      }
                    }
                  }
                }
              ]
            }

            ```


            The properties `customerAreaCode`, `customerIntent`, and
            `customerSentiment` will be passed to the server in the webhook
            request body.
        function:
          $ref: '#/components/schemas/OpenAIFunction'
          description: >-
            This is the optional function definition that will be passed to the
            LLM.

            If this is not defined, we will construct this based on the other
            properties.


            For example, given the following tools definition:

            ```json

            {
              "tools": [
                {
                  "type": "handoff",
                  "destinations": [
                    {
                      "type": "assistant",
                      "assistantId": "assistant-123",
                      "description": "customer wants to be handed off to assistant-123",
                      "contextEngineeringPlan": {
                        "type": "all"
                      }
                    },
                    {
                      "type": "assistant",
                      "assistantId": "assistant-456",
                      "description": "customer wants to be handed off to assistant-456",
                      "contextEngineeringPlan": {
                        "type": "all"
                      }
                    }
                  ],
                }
              ]
            }

            ```


            We will construct the following function definition:

            ```json

            {
              "function": {
                "name": "handoff_to_assistant-123",
                "description": "
                     Use this function to handoff the call to the next assistant.
                     Only use it when instructions explicitly ask you to use the handoff_to_assistant function.
                     DO NOT call this function unless you are instructed to do so.
                     Here are the destinations you can handoff the call to:
                     1. assistant-123. When: customer wants to be handed off to assistant-123
                     2. assistant-456. When: customer wants to be handed off to assistant-456
                ",
                "parameters": {
                  "type": "object",
                  "properties": {
                    "destination": {
                      "type": "string",
                      "description": "Options: assistant-123 (customer wants to be handed off to assistant-123), assistant-456 (customer wants to be handed off to assistant-456)",
                      "enum": ["assistant-123", "assistant-456"]
                    },
                  },
                  "required": ["destination"]
                }
              }
            }

            ```


            To override this function, please provide an OpenAI function
            definition and refer to it in the system prompt.

            You may override parts of the function definition (i.e. you may only
            want to change the function name for your prompt).

            If you choose to override the function parameters, it must include
            `destination` as a required parameter, and it must evaluate to
            either an assistantId, assistantName, or a the string literal
            `dynamic`.


            To pass custom parameters to the server in a dynamic handoff, you
            can use the function parameters, with `dynamic` as the destination.

            ```json

            {
              "function": {
                "name": "dynamic_handoff",
                "description": "
                     Call this function when the customer is ready to be handed off to the next assistant
                ",
                "parameters": {
                  "type": "object",
                  "properties": {
                    "destination": {
                      "type": "string",
                      "enum": ["dynamic"]
                    },
                    "customerAreaCode": {
                      "type": "number",
                      "description": "Area code of the customer"
                    },
                    "customerIntent": {
                      "type": "string",
                      "enum": ["new-customer", "existing-customer"],
                      "description": "Use new-customer when customer is a new customer, existing-customer when customer is an existing customer"
                    },
                    "customerSentiment": {
                      "type": "string",
                      "enum": ["positive", "negative", "neutral"],
                      "description": "Use positive when customer is happy, negative when customer is unhappy, neutral when customer is neutral"
                    }
                  },
                  "required": ["destination", "customerAreaCode", "customerIntent", "customerSentiment"]
                }
              }
            }

            ```
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
      title: CreateHandoffToolDTO
    AnthropicModelToolsItems:
      oneOf:
        - $ref: '#/components/schemas/CreateApiRequestToolDTO'
        - $ref: '#/components/schemas/CreateBashToolDTO'
        - $ref: '#/components/schemas/CreateCodeToolDTO'
        - $ref: '#/components/schemas/CreateComputerToolDTO'
        - $ref: '#/components/schemas/CreateDtmfToolDTO'
        - $ref: '#/components/schemas/CreateEndCallToolDTO'
        - $ref: '#/components/schemas/CreateFunctionToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
        - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
        - $ref: '#/components/schemas/CreateHandoffToolDTO'
        - $ref: '#/components/schemas/CreateMcpToolDTO'
        - $ref: '#/components/schemas/CreateQueryToolDTO'
        - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
        - $ref: '#/components/schemas/CreateSmsToolDTO'
        - $ref: '#/components/schemas/CreateTextEditorToolDTO'
        - $ref: '#/components/schemas/CreateTransferCallToolDTO'
        - $ref: '#/components/schemas/CreateSipRequestToolDTO'
        - $ref: '#/components/schemas/CreateVoicemailToolDTO'
      title: AnthropicModelToolsItems
    AnthropicModelKnowledgeBase:
      oneOf:
        - $ref: '#/components/schemas/CreateCustomKnowledgeBaseDTO'
      description: These are the options for the knowledge base.
      title: AnthropicModelKnowledgeBase
    AnthropicModelModel:
      type: string
      enum:
        - claude-3-opus-20240229
        - claude-3-sonnet-20240229
        - claude-3-haiku-20240307
        - claude-3-5-sonnet-20240620
        - claude-3-5-sonnet-20241022
        - claude-3-5-haiku-20241022
        - claude-3-7-sonnet-20250219
        - claude-opus-4-20250514
        - claude-opus-4-5-20251101
        - claude-opus-4-6
        - claude-sonnet-4-20250514
        - claude-sonnet-4-5-20250929
        - claude-sonnet-4-6
        - claude-haiku-4-5-20251001
      description: The specific Anthropic/Claude model that will be used.
      title: AnthropicModelModel
    AnthropicModelProvider:
      type: string
      enum:
        - anthropic
      description: The provider identifier for Anthropic.
      title: AnthropicModelProvider
    AnthropicModel:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
          description: This is the starting state for the conversation.
        tools:
          type: array
          items:
            $ref: '#/components/schemas/AnthropicModelToolsItems'
          description: >-
            These are the tools that the assistant can use during the call. To
            use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
        toolIds:
          type: array
          items:
            type: string
          description: >-
            These are the tools that the assistant can use during the call. To
            use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
        knowledgeBase:
          $ref: '#/components/schemas/AnthropicModelKnowledgeBase'
          description: These are the options for the knowledge base.
        model:
          $ref: '#/components/schemas/AnthropicModelModel'
          description: The specific Anthropic/Claude model that will be used.
        provider:
          $ref: '#/components/schemas/AnthropicModelProvider'
          description: The provider identifier for Anthropic.
        thinking:
          $ref: '#/components/schemas/AnthropicThinkingConfig'
          description: |-
            Optional configuration for Anthropic's thinking feature.
            Only applicable for claude-3-7-sonnet-20250219 model.
            If provided, maxTokens must be greater than thinking.budgetTokens.
        temperature:
          type: number
          format: double
          description: >-
            This is the temperature that will be used for calls. Default is 0 to
            leverage caching for lower latency.
        maxTokens:
          type: number
          format: double
          description: >-
            This is the max number of tokens that the assistant will be allowed
            to generate in each turn of the conversation. Default is 250.
        emotionRecognitionEnabled:
          type: boolean
          description: >-
            This determines whether we detect user's emotion while they speak
            and send it as an additional info to model.


            Default `false` because the model is usually are good at
            understanding the user's emotion from text.


            @default false
        numFastTurns:
          type: number
          format: double
          description: >-
            This sets how many turns at the start of the conversation to use a
            smaller, faster model from the same provider before switching to the
            primary model. Example, gpt-3.5-turbo if provider is openai.


            Default is 0.


            @default 0
      required:
        - model
        - provider
      title: AnthropicModel
    CreateAssistantDtoModel:
      oneOf:
        - $ref: '#/components/schemas/AnthropicModel'
        - $ref: '#/components/schemas/AnthropicBedrockModel'
        - $ref: '#/components/schemas/AnyscaleModel'
        - $ref: '#/components/schemas/CerebrasModel'
        - $ref: '#/components/schemas/CustomLLMModel'
        - $ref: '#/components/schemas/DeepInfraModel'
        - $ref: '#/components/schemas/DeepSeekModel'
        - $ref: '#/components/schemas/GoogleModel'
        - $ref: '#/components/schemas/GroqModel'
        - $ref: '#/components/schemas/InflectionAIModel'
        - $ref: '#/components/schemas/MinimaxLLMModel'
        - $ref: '#/components/schemas/OpenAIModel'
        - $ref: '#/components/schemas/OpenRouterModel'
        - $ref: '#/components/schemas/PerplexityAIModel'
        - $ref: '#/components/schemas/TogetherAIModel'
        - $ref: '#/components/schemas/XaiModel'
      description: These are the options for the assistant's LLM.
      title: CreateAssistantDtoModel
    CreateAssistantDtoVoice:
      oneOf:
        - $ref: '#/components/schemas/AzureVoice'
        - $ref: '#/components/schemas/CartesiaVoice'
        - $ref: '#/components/schemas/CustomVoice'
        - $ref: '#/components/schemas/DeepgramVoice'
        - $ref: '#/components/schemas/ElevenLabsVoice'
        - $ref: '#/components/schemas/HumeVoice'
        - $ref: '#/components/schemas/LMNTVoice'
        - $ref: '#/components/schemas/NeuphonicVoice'
        - $ref: '#/components/schemas/OpenAIVoice'
        - $ref: '#/components/schemas/PlayHTVoice'
        - $ref: '#/components/schemas/WellSaidVoice'
        - $ref: '#/components/schemas/RimeAIVoice'
        - $ref: '#/components/schemas/SmallestAIVoice'
        - $ref: '#/components/schemas/TavusVoice'
        - $ref: '#/components/schemas/VapiVoice'
        - $ref: '#/components/schemas/SesameVoice'
        - $ref: '#/components/schemas/InworldVoice'
        - $ref: '#/components/schemas/MinimaxVoice'
      description: These are the options for the assistant's voice.
      title: CreateAssistantDtoVoice
    CreateAssistantDtoFirstMessageMode:
      type: string
      enum:
        - assistant-speaks-first
        - assistant-speaks-first-with-model-generated-message
        - assistant-waits-for-user
      description: >-
        This is the mode for the first message. Default is
        'assistant-speaks-first'.


        Use:

        - 'assistant-speaks-first' to have the assistant speak first.

        - 'assistant-waits-for-user' to have the assistant wait for the user to
        speak first.

        - 'assistant-speaks-first-with-model-generated-message' to have the
        assistant speak first with a message generated by the model based on the
        conversation state. (`assistant.model.messages` at call start,
        `call.messages` at squad transfer points).


        @default 'assistant-speaks-first'
      title: CreateAssistantDtoFirstMessageMode
    CreateAssistantDtoVoicemailDetection0:
      type: string
      enum:
        - 'off'
      title: CreateAssistantDtoVoicemailDetection0
    CreateAssistantDtoVoicemailDetection:
      oneOf:
        - $ref: '#/components/schemas/CreateAssistantDtoVoicemailDetection0'
        - $ref: '#/components/schemas/GoogleVoicemailDetectionPlan'
        - $ref: '#/components/schemas/OpenAIVoicemailDetectionPlan'
        - $ref: '#/components/schemas/TwilioVoicemailDetectionPlan'
        - $ref: '#/components/schemas/VapiVoicemailDetectionPlan'
      description: >-
        These are the settings to configure or disable voicemail detection.
        Alternatively, voicemail detection can be configured using the
        model.tools=[VoicemailTool].

        By default, voicemail detection is disabled.
      title: CreateAssistantDtoVoicemailDetection
    CreateAssistantDtoClientMessages:
      type: string
      enum:
        - conversation-update
        - assistant.speechStarted
        - function-call
        - function-call-result
        - hang
        - language-changed
        - metadata
        - model-output
        - speech-update
        - status-update
        - transcript
        - tool-calls
        - tool-calls-result
        - tool.completed
        - transfer-update
        - user-interrupted
        - voice-input
        - workflow.node.started
        - assistant.started
      description: >-
        These are the messages that will be sent to your Client SDKs. Default is
        conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started,assistant.started.
        You can check the shape of the messages in ClientMessage schema.
      title: CreateAssistantDtoClientMessages
    CreateAssistantDtoServerMessages:
      type: string
      enum:
        - assistant.started
        - assistant.speechStarted
        - conversation-update
        - end-of-call-report
        - function-call
        - hang
        - language-changed
        - language-change-detected
        - model-output
        - phone-call-control
        - speech-update
        - status-update
        - transcript
        - transcript[transcriptType="final"]
        - tool-calls
        - transfer-destination-request
        - handoff-destination-request
        - transfer-update
        - user-interrupted
        - voice-input
        - chat.created
        - chat.deleted
        - session.created
        - session.updated
        - session.deleted
        - call.deleted
        - call.delete.failed
      description: >-
        These are the messages that will be sent to your Server URL. Default is
        conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,handoff-destination-request,user-interrupted,assistant.started.
        You can check the shape of the messages in ServerMessage schema.
      title: CreateAssistantDtoServerMessages
    CreateAssistantDtoBackgroundSound0:
      type: string
      enum:
        - 'off'
        - office
      title: CreateAssistantDtoBackgroundSound0
    CreateAssistantDtoBackgroundSound:
      oneOf:
        - $ref: '#/components/schemas/CreateAssistantDtoBackgroundSound0'
        - type: string
          format: uri
      description: >-
        This is the background sound in the call. Default for phone calls is
        'office' and default for web calls is 'off'.

        You can also provide a custom sound by providing a URL to an audio file.
      title: CreateAssistantDtoBackgroundSound
    CreateAssistantDtoTransportConfigurationsItems:
      oneOf:
        - $ref: '#/components/schemas/TransportConfigurationTwilio'
      title: CreateAssistantDtoTransportConfigurationsItems
    CreateAssistantDtoCredentialsItems:
      oneOf:
        - type: object
          properties:
            provider:
              type: string
              enum:
                - 11labs
              description: 'Discriminator value: 11labs'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: 11labs variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - anthropic
              description: 'Discriminator value: anthropic'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: anthropic variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - anthropic-bedrock
              description: 'Discriminator value: anthropic-bedrock'
            region:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAnthropicBedrockRegion
              description: AWS region where Bedrock is configured.
            authenticationPlan:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAnthropicBedrockAuthenticationPlan
              description: >-
                Authentication method - either direct IAM credentials or
                cross-account role assumption.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - region
            - authenticationPlan
          description: anthropic-bedrock variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - anyscale
              description: 'Discriminator value: anyscale'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: anyscale variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - assembly-ai
              description: 'Discriminator value: assembly-ai'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: assembly-ai variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - azure-openai
              description: 'Discriminator value: azure-openai'
            region:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAzureOpenaiRegion
            models:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAzureOpenaiModels
            openAIKey:
              type: string
              description: This is not returned in the API.
            ocpApimSubscriptionKey:
              type: string
              description: This is not returned in the API.
            openAIEndpoint:
              type: string
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - region
            - models
            - openAIKey
            - openAIEndpoint
          description: azure-openai variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - azure
              description: 'Discriminator value: azure'
            service:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAzureService
              description: This is the service being used in Azure.
            region:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAzureRegion
              description: This is the region of the Azure resource.
            apiKey:
              type: string
              description: This is not returned in the API.
            fallbackIndex:
              type: number
              format: double
              description: >-
                This is the order in which this storage provider is tried during
                upload retries. Lower numbers are tried first in increasing
                order.
            bucketPlan:
              $ref: '#/components/schemas/AzureBlobStorageBucketPlan'
              description: >-
                This is the bucket plan that can be provided to store call
                artifacts in Azure Blob Storage.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - service
          description: azure variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - byo-sip-trunk
              description: 'Discriminator value: byo-sip-trunk'
            gateways:
              type: array
              items:
                $ref: '#/components/schemas/SipTrunkGateway'
              description: This is the list of SIP trunk's gateways.
            outboundAuthenticationPlan:
              $ref: '#/components/schemas/SipTrunkOutboundAuthenticationPlan'
              description: >-
                This can be used to configure the outbound authentication if
                required by the SIP trunk.
            outboundLeadingPlusEnabled:
              type: boolean
              description: >-
                This ensures the outbound origination attempts have a leading
                plus. Defaults to false to match conventional telecom behavior.


                Usage:

                - Vonage/Twilio requires leading plus for all outbound calls.
                Set this to true.


                @default false
            techPrefix:
              type: string
              description: >-
                This can be used to configure the tech prefix on outbound calls.
                This is an advanced property.
            sipDiversionHeader:
              type: string
              description: >-
                This can be used to enable the SIP diversion header for
                authenticating the calling number if the SIP trunk supports it.
                This is an advanced property.
            sbcConfiguration:
              $ref: '#/components/schemas/SbcConfiguration'
              description: >-
                This is an advanced configuration for enterprise deployments.
                This uses the onprem SBC to trunk into the SIP trunk's
                `gateways`, rather than the managed SBC provided by Vapi.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - gateways
          description: byo-sip-trunk variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - cartesia
              description: 'Discriminator value: cartesia'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: cartesia variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - cerebras
              description: 'Discriminator value: cerebras'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: cerebras variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - cloudflare
              description: 'Discriminator value: cloudflare'
            accountId:
              type: string
              description: Cloudflare Account Id.
            apiKey:
              type: string
              description: Cloudflare API Key / Token.
            accountEmail:
              type: string
              description: Cloudflare Account Email.
            fallbackIndex:
              type: number
              format: double
              description: >-
                This is the order in which this storage provider is tried during
                upload retries. Lower numbers are tried first in increasing
                order.
            bucketPlan:
              $ref: '#/components/schemas/CloudflareR2BucketPlan'
              description: >-
                This is the bucket plan that can be provided to store call
                artifacts in R2
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
          description: cloudflare variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - custom-llm
              description: 'Discriminator value: custom-llm'
            apiKey:
              type: string
              description: This is not returned in the API.
            authenticationPlan:
              $ref: '#/components/schemas/OAuth2AuthenticationPlan'
              description: >-
                This is the authentication plan. Currently supports OAuth2 RFC
                6749. To use Bearer authentication, use apiKey
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: custom-llm variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - deepgram
              description: 'Discriminator value: deepgram'
            apiKey:
              type: string
              description: This is not returned in the API.
            apiUrl:
              type: string
              description: >-
                This can be used to point to an onprem Deepgram instance.
                Defaults to api.deepgram.com.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: deepgram variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - deepinfra
              description: 'Discriminator value: deepinfra'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: deepinfra variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - deep-seek
              description: 'Discriminator value: deep-seek'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: deep-seek variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - gcp
              description: 'Discriminator value: gcp'
            fallbackIndex:
              type: number
              format: double
              description: >-
                This is the order in which this storage provider is tried during
                upload retries. Lower numbers are tried first in increasing
                order.
            gcpKey:
              $ref: '#/components/schemas/GcpKey'
              description: >-
                This is the GCP key. This is the JSON that can be generated in
                the Google Cloud Console at
                https://console.cloud.google.com/iam-admin/serviceaccounts/details/<service-account-id>/keys.


                The schema is identical to the JSON that GCP outputs.
            region:
              type: string
              description: This is the region of the GCP resource.
            bucketPlan:
              $ref: '#/components/schemas/BucketPlan'
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - gcpKey
          description: gcp variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - gladia
              description: 'Discriminator value: gladia'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: gladia variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - gohighlevel
              description: 'Discriminator value: gohighlevel'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: gohighlevel variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - google
              description: 'Discriminator value: google'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: google variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - groq
              description: 'Discriminator value: groq'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: groq variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - inflection-ai
              description: 'Discriminator value: inflection-ai'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: inflection-ai variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - langfuse
              description: 'Discriminator value: langfuse'
            publicKey:
              type: string
              description: 'The public key for Langfuse project. Eg: pk-lf-...'
            apiKey:
              type: string
              description: >-
                The secret key for Langfuse project. Eg: sk-lf-... .This is not
                returned in the API.
            apiUrl:
              type: string
              description: >-
                The host URL for Langfuse project. Eg:
                https://cloud.langfuse.com
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - publicKey
            - apiKey
            - apiUrl
          description: langfuse variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - lmnt
              description: 'Discriminator value: lmnt'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: lmnt variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - make
              description: 'Discriminator value: make'
            teamId:
              type: string
              description: Team ID
            region:
              type: string
              description: 'Region of your application. For example: eu1, eu2, us1, us2'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - teamId
            - region
            - apiKey
          description: make variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - openai
              description: 'Discriminator value: openai'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: openai variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - openrouter
              description: 'Discriminator value: openrouter'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: openrouter variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - perplexity-ai
              description: 'Discriminator value: perplexity-ai'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: perplexity-ai variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - playht
              description: 'Discriminator value: playht'
            apiKey:
              type: string
              description: This is not returned in the API.
            userId:
              type: string
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
            - userId
          description: playht variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - rime-ai
              description: 'Discriminator value: rime-ai'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: rime-ai variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - runpod
              description: 'Discriminator value: runpod'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: runpod variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - s3
              description: 'Discriminator value: s3'
            awsAccessKeyId:
              type: string
              description: AWS access key ID.
            awsSecretAccessKey:
              type: string
              description: AWS access key secret. This is not returned in the API.
            region:
              type: string
              description: AWS region in which the S3 bucket is located.
            s3BucketName:
              type: string
              description: AWS S3 bucket name.
            s3PathPrefix:
              type: string
              description: The path prefix for the uploaded recording. Ex. "recordings/"
            fallbackIndex:
              type: number
              format: double
              description: >-
                This is the order in which this storage provider is tried during
                upload retries. Lower numbers are tried first in increasing
                order.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - awsAccessKeyId
            - awsSecretAccessKey
            - region
            - s3BucketName
            - s3PathPrefix
          description: s3 variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - supabase
              description: 'Discriminator value: supabase'
            fallbackIndex:
              type: number
              format: double
              description: >-
                This is the order in which this storage provider is tried during
                upload retries. Lower numbers are tried first in increasing
                order.
            bucketPlan:
              $ref: '#/components/schemas/SupabaseBucketPlan'
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
          description: supabase variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - smallest-ai
              description: 'Discriminator value: smallest-ai'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: smallest-ai variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - tavus
              description: 'Discriminator value: tavus'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: tavus variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - together-ai
              description: 'Discriminator value: together-ai'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: together-ai variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - twilio
              description: 'Discriminator value: twilio'
            authToken:
              type: string
              description: This is not returned in the API.
            apiKey:
              type: string
              description: This is not returned in the API.
            apiSecret:
              type: string
              description: This is not returned in the API.
            accountSid:
              type: string
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - accountSid
          description: twilio variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - vonage
              description: 'Discriminator value: vonage'
            apiSecret:
              type: string
              description: This is not returned in the API.
            apiKey:
              type: string
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiSecret
            - apiKey
          description: vonage variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - webhook
              description: 'Discriminator value: webhook'
            authenticationPlan:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingWebhookAuthenticationPlan
              description: >-
                This is the authentication plan. Supports OAuth2 RFC 6749, HMAC
                signing, and Bearer authentication.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - authenticationPlan
          description: webhook variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - custom-credential
              description: 'Discriminator value: custom-credential'
            authenticationPlan:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingCustomCredentialAuthenticationPlan
              description: >-
                This is the authentication plan. Supports OAuth2 RFC 6749, HMAC
                signing, and Bearer authentication.
            encryptionPlan:
              $ref: '#/components/schemas/PublicKeyEncryptionPlan'
              description: >-
                This is the encryption plan for encrypting sensitive data.
                Currently supports public-key encryption.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - authenticationPlan
          description: custom-credential variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - xai
              description: 'Discriminator value: xai'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: xai variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - neuphonic
              description: 'Discriminator value: neuphonic'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: neuphonic variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - hume
              description: 'Discriminator value: hume'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: hume variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - mistral
              description: 'Discriminator value: mistral'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: mistral variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - speechmatics
              description: 'Discriminator value: speechmatics'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: speechmatics variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - soniox
              description: 'Discriminator value: soniox'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: soniox variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - trieve
              description: 'Discriminator value: trieve'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: trieve variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - google.calendar.oauth2-client
              description: 'Discriminator value: google.calendar.oauth2-client'
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
          description: google.calendar.oauth2-client variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - google.calendar.oauth2-authorization
              description: 'Discriminator value: google.calendar.oauth2-authorization'
            authorizationId:
              type: string
              description: The authorization ID for the OAuth2 authorization
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - authorizationId
          description: google.calendar.oauth2-authorization variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - google.sheets.oauth2-authorization
              description: 'Discriminator value: google.sheets.oauth2-authorization'
            authorizationId:
              type: string
              description: The authorization ID for the OAuth2 authorization
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - authorizationId
          description: google.sheets.oauth2-authorization variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - slack.oauth2-authorization
              description: 'Discriminator value: slack.oauth2-authorization'
            authorizationId:
              type: string
              description: The authorization ID for the OAuth2 authorization
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - authorizationId
          description: slack.oauth2-authorization variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - ghl.oauth2-authorization
              description: 'Discriminator value: ghl.oauth2-authorization'
            authenticationSession:
              $ref: '#/components/schemas/Oauth2AuthenticationSession'
              description: This is the authentication session for the credential.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - authenticationSession
          description: ghl.oauth2-authorization variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - inworld
              description: 'Discriminator value: inworld'
            apiKey:
              type: string
              description: >-
                This is the Inworld Basic (Base64) authentication token. This is
                not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: inworld variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - minimax
              description: 'Discriminator value: minimax'
            apiKey:
              type: string
              description: This is not returned in the API.
            groupId:
              type: string
              description: This is the Minimax Group ID.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
            - groupId
          description: minimax variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - wellsaid
              description: 'Discriminator value: wellsaid'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: wellsaid variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - email
              description: 'Discriminator value: email'
            email:
              type: string
              description: The recipient email address for alerts
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - email
          description: email variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - slack-webhook
              description: 'Discriminator value: slack-webhook'
            webhookUrl:
              type: string
              description: >-
                Slack incoming webhook URL. See
                https://api.slack.com/messaging/webhooks for setup instructions.
                This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - webhookUrl
          description: slack-webhook variant
      discriminator:
        propertyName: provider
      title: CreateAssistantDtoCredentialsItems
    CreateAssistantDtoHooksItems:
      oneOf:
        - $ref: '#/components/schemas/CallHookCallEnding'
        - $ref: '#/components/schemas/CallHookAssistantSpeechInterrupted'
        - $ref: '#/components/schemas/CallHookCustomerSpeechInterrupted'
        - $ref: '#/components/schemas/CallHookCustomerSpeechTimeout'
        - $ref: '#/components/schemas/SessionCreatedHook'
      title: CreateAssistantDtoHooksItems
    CreateAssistantDtoMetadata:
      type: object
      properties: {}
      description: This is for metadata you want to store on the assistant.
      title: CreateAssistantDtoMetadata
    CreateAssistantDTO:
      type: object
      properties:
        transcriber:
          $ref: '#/components/schemas/CreateAssistantDtoTranscriber'
          description: These are the options for the assistant's transcriber.
        model:
          $ref: '#/components/schemas/CreateAssistantDtoModel'
          description: These are the options for the assistant's LLM.
        voice:
          $ref: '#/components/schemas/CreateAssistantDtoVoice'
          description: These are the options for the assistant's voice.
        firstMessage:
          type: string
          description: >-
            This is the first message that the assistant will say. This can also
            be a URL to a containerized audio file (mp3, wav, etc.).


            If unspecified, assistant will wait for user to speak and use the
            model to respond once they speak.
        firstMessageInterruptionsEnabled:
          type: boolean
          default: false
        firstMessageMode:
          $ref: '#/components/schemas/CreateAssistantDtoFirstMessageMode'
          description: >-
            This is the mode for the first message. Default is
            'assistant-speaks-first'.


            Use:

            - 'assistant-speaks-first' to have the assistant speak first.

            - 'assistant-waits-for-user' to have the assistant wait for the user
            to speak first.

            - 'assistant-speaks-first-with-model-generated-message' to have the
            assistant speak first with a message generated by the model based on
            the conversation state. (`assistant.model.messages` at call start,
            `call.messages` at squad transfer points).


            @default 'assistant-speaks-first'
        voicemailDetection:
          $ref: '#/components/schemas/CreateAssistantDtoVoicemailDetection'
          description: >-
            These are the settings to configure or disable voicemail detection.
            Alternatively, voicemail detection can be configured using the
            model.tools=[VoicemailTool].

            By default, voicemail detection is disabled.
        clientMessages:
          $ref: '#/components/schemas/CreateAssistantDtoClientMessages'
          description: >-
            These are the messages that will be sent to your Client SDKs.
            Default is
            conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started,assistant.started.
            You can check the shape of the messages in ClientMessage schema.
        serverMessages:
          $ref: '#/components/schemas/CreateAssistantDtoServerMessages'
          description: >-
            These are the messages that will be sent to your Server URL. Default
            is
            conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,handoff-destination-request,user-interrupted,assistant.started.
            You can check the shape of the messages in ServerMessage schema.
        maxDurationSeconds:
          type: number
          format: double
          description: >-
            This is the maximum number of seconds that the call will last. When
            the call reaches this duration, it will be ended.


            @default 600 (10 minutes)
        backgroundSound:
          $ref: '#/components/schemas/CreateAssistantDtoBackgroundSound'
          description: >-
            This is the background sound in the call. Default for phone calls is
            'office' and default for web calls is 'off'.

            You can also provide a custom sound by providing a URL to an audio
            file.
        modelOutputInMessagesEnabled:
          type: boolean
          description: >-
            This determines whether the model's output is used in conversation
            history rather than the transcription of assistant's speech.


            @default false
        transportConfigurations:
          type: array
          items:
            $ref: >-
              #/components/schemas/CreateAssistantDtoTransportConfigurationsItems
          description: >-
            These are the configurations to be passed to the transport providers
            of assistant's calls, like Twilio. You can store multiple
            configurations for different transport providers. For a call, only
            the configuration matching the call transport provider is used.
        observabilityPlan:
          $ref: '#/components/schemas/LangfuseObservabilityPlan'
          description: |-
            This is the plan for observability of assistant's calls.

            Currently, only Langfuse is supported.
        credentials:
          type: array
          items:
            $ref: '#/components/schemas/CreateAssistantDtoCredentialsItems'
          description: >-
            These are dynamic credentials that will be used for the assistant
            calls. By default, all the credentials are available for use in the
            call but you can supplement an additional credentials using this.
            Dynamic credentials override existing credentials.
        hooks:
          type: array
          items:
            $ref: '#/components/schemas/CreateAssistantDtoHooksItems'
          description: This is a set of actions that will be performed on certain events.
        name:
          type: string
          description: >-
            This is the name of the assistant.


            This is required when you want to transfer between assistants in a
            call.
        voicemailMessage:
          type: string
          description: >-
            This is the message that the assistant will say if the call is
            forwarded to voicemail.


            If unspecified, it will hang up.
        endCallMessage:
          type: string
          description: |-
            This is the message that the assistant will say if it ends the call.

            If unspecified, it will hang up without saying anything.
        endCallPhrases:
          type: array
          items:
            type: string
          description: >-
            This list contains phrases that, if spoken by the assistant, will
            trigger the call to be hung up. Case insensitive.
        compliancePlan:
          $ref: '#/components/schemas/CompliancePlan'
        metadata:
          $ref: '#/components/schemas/CreateAssistantDtoMetadata'
          description: This is for metadata you want to store on the assistant.
        backgroundSpeechDenoisingPlan:
          $ref: '#/components/schemas/BackgroundSpeechDenoisingPlan'
          description: >-
            This enables filtering of noise and background speech while the user
            is talking.


            Features:

            - Smart denoising using Krisp

            - Fourier denoising


            Smart denoising can be combined with or used independently of
            Fourier denoising.


            Order of precedence:

            - Smart denoising

            - Fourier denoising
        analysisPlan:
          $ref: '#/components/schemas/AnalysisPlan'
          description: >-
            This is the plan for analysis of assistant's calls. Stored in
            `call.analysis`.
        artifactPlan:
          $ref: '#/components/schemas/ArtifactPlan'
          description: >-
            This is the plan for artifacts generated during assistant's calls.
            Stored in `call.artifact`.
        startSpeakingPlan:
          $ref: '#/components/schemas/StartSpeakingPlan'
          description: >-
            This is the plan for when the assistant should start talking.


            You should configure this if you're running into these issues:

            - The assistant is too slow to start talking after the customer is
            done speaking.

            - The assistant is too fast to start talking after the customer is
            done speaking.

            - The assistant is so fast that it's actually interrupting the
            customer.
        stopSpeakingPlan:
          $ref: '#/components/schemas/StopSpeakingPlan'
          description: >-
            This is the plan for when assistant should stop talking on customer
            interruption.


            You should configure this if you're running into these issues:

            - The assistant is too slow to recognize customer's interruption.

            - The assistant is too fast to recognize customer's interruption.

            - The assistant is getting interrupted by phrases that are just
            acknowledgments.

            - The assistant is getting interrupted by background noises.

            - The assistant is not properly stopping -- it starts talking right
            after getting interrupted.
        monitorPlan:
          $ref: '#/components/schemas/MonitorPlan'
          description: >-
            This is the plan for real-time monitoring of the assistant's calls.


            Usage:

            - To enable live listening of the assistant's calls, set
            `monitorPlan.listenEnabled` to `true`.

            - To enable live control of the assistant's calls, set
            `monitorPlan.controlEnabled` to `true`.

            - To attach monitors to the assistant, set `monitorPlan.monitorIds`
            to the set of monitor ids.
        credentialIds:
          type: array
          items:
            type: string
          description: >-
            These are the credentials that will be used for the assistant calls.
            By default, all the credentials are available for use in the call
            but you can provide a subset using this.
        server:
          $ref: '#/components/schemas/Server'
          description: >-
            This is where Vapi will send webhooks. You can find all webhooks
            available along with their shape in ServerMessage schema.


            The order of precedence is:


            1. assistant.server.url

            2. phoneNumber.serverUrl

            3. org.serverUrl
        keypadInputPlan:
          $ref: '#/components/schemas/KeypadInputPlan'
      title: CreateAssistantDTO
    CreateCustomerDTO:
      type: object
      properties:
        numberE164CheckEnabled:
          type: boolean
          default: true
          description: >-
            This is the flag to toggle the E164 check for the `number` field.
            This is an advanced property which should be used if you know your
            use case requires it.


            Use cases:

            - `false`: To allow non-E164 numbers like `+001234567890`, `1234`,
            or `abc`. This is useful for dialing out to non-E164 numbers on your
            SIP trunks.

            - `true` (default): To allow only E164 numbers like `+14155551234`.
            This is standard for PSTN calls.


            If `false`, the `number` is still required to only contain
            alphanumeric characters (regex: `/^\+?[a-zA-Z0-9]+$/`).


            @default true (E164 check is enabled)
        extension:
          type: string
          description: >-
            This is the extension that will be dialed after the call is
            answered.
        assistantOverrides:
          $ref: '#/components/schemas/AssistantOverrides'
          description: >-
            These are the overrides for the assistant's settings and template
            variables specific to this customer.

            This allows customization of the assistant's behavior for individual
            customers in batch calls.
        number:
          type: string
          description: This is the number of the customer.
        sipUri:
          type: string
          description: This is the SIP URI of the customer.
        name:
          type: string
          description: >-
            This is the name of the customer. This is just for your own
            reference.


            For SIP inbound calls, this is extracted from the `From` SIP header
            with format `"Display Name" <sip:username@domain>`.
        email:
          type: string
          description: This is the email of the customer.
        externalId:
          type: string
          description: This is the external ID of the customer.
      title: CreateCustomerDTO
    CallType:
      type: string
      enum:
        - inboundPhoneCall
        - outboundPhoneCall
        - webCall
        - vapi.websocketCall
      description: This is the type of call.
      title: CallType
    TransportCostType:
      type: string
      enum:
        - transport
      description: This is the type of cost, always 'transport' for this class.
      title: TransportCostType
    TransportCostProvider:
      type: string
      enum:
        - daily
        - vapi.websocket
        - twilio
        - vonage
        - telnyx
        - vapi.sip
      title: TransportCostProvider
    TransportCost:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/TransportCostType'
          description: This is the type of cost, always 'transport' for this class.
        provider:
          $ref: '#/components/schemas/TransportCostProvider'
        minutes:
          type: number
          format: double
          description: >-
            This is the minutes of `transport` usage. This should match
            `call.endedAt` - `call.startedAt`.
        cost:
          type: number
          format: double
          description: This is the cost of the component in USD.
      required:
        - type
        - minutes
        - cost
      title: TransportCost
    TranscriberCostType:
      type: string
      enum:
        - transcriber
      description: This is the type of cost, always 'transcriber' for this class.
      title: TranscriberCostType
    TranscriberCostTranscriber:
      type: object
      properties: {}
      description: |-
        This is the transcriber that was used during the call.

        This matches one of the below:
        - `call.assistant.transcriber`,
        - `call.assistantId->transcriber`,
        - `call.squad[n].assistant.transcriber`,
        - `call.squad[n].assistantId->transcriber`,
        - `call.squadId->[n].assistant.transcriber`,
        - `call.squadId->[n].assistantId->transcriber`.
      title: TranscriberCostTranscriber
    TranscriberCost:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/TranscriberCostType'
          description: This is the type of cost, always 'transcriber' for this class.
        transcriber:
          $ref: '#/components/schemas/TranscriberCostTranscriber'
          description: |-
            This is the transcriber that was used during the call.

            This matches one of the below:
            - `call.assistant.transcriber`,
            - `call.assistantId->transcriber`,
            - `call.squad[n].assistant.transcriber`,
            - `call.squad[n].assistantId->transcriber`,
            - `call.squadId->[n].assistant.transcriber`,
            - `call.squadId->[n].assistantId->transcriber`.
        minutes:
          type: number
          format: double
          description: >-
            This is the minutes of `transcriber` usage. This should match
            `call.endedAt` - `call.startedAt` for single assistant calls, while
            squad calls will have multiple transcriber costs one for each
            assistant that was used.
        cost:
          type: number
          format: double
          description: This is the cost of the component in USD.
      required:
        - type
        - transcriber
        - minutes
        - cost
      title: TranscriberCost
    ModelCostType:
      type: string
      enum:
        - model
      description: This is the type of cost, always 'model' for this class.
      title: ModelCostType
    ModelCostModel:
      type: object
      properties: {}
      description: |-
        This is the model that was used during the call.

        This matches one of the following:
        - `call.assistant.model`,
        - `call.assistantId->model`,
        - `call.squad[n].assistant.model`,
        - `call.squad[n].assistantId->model`,
        - `call.squadId->[n].assistant.model`,
        - `call.squadId->[n].assistantId->model`.
      title: ModelCostModel
    ModelCost:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/ModelCostType'
          description: This is the type of cost, always 'model' for this class.
        model:
          $ref: '#/components/schemas/ModelCostModel'
          description: |-
            This is the model that was used during the call.

            This matches one of the following:
            - `call.assistant.model`,
            - `call.assistantId->model`,
            - `call.squad[n].assistant.model`,
            - `call.squad[n].assistantId->model`,
            - `call.squadId->[n].assistant.model`,
            - `call.squadId->[n].assistantId->model`.
        promptTokens:
          type: number
          format: double
          description: >-
            This is the number of prompt tokens used in the call. These should
            be total prompt tokens used in the call for single assistant calls,
            while squad calls will have multiple model costs one for each
            assistant that was used.
        completionTokens:
          type: number
          format: double
          description: >-
            This is the number of completion tokens generated in the call. These
            should be total completion tokens used in the call for single
            assistant calls, while squad calls will have multiple model costs
            one for each assistant that was used.
        cachedPromptTokens:
          type: number
          format: double
          description: >-
            This is the number of cached prompt tokens used in the call. This is
            only applicable to certain providers (e.g., OpenAI, Azure OpenAI)
            that support prompt caching. Cached tokens are billed at a
            discounted rate.
        cost:
          type: number
          format: double
          description: This is the cost of the component in USD.
      required:
        - type
        - model
        - promptTokens
        - completionTokens
        - cost
      title: ModelCost
    VoiceCostType:
      type: string
      enum:
        - voice
      description: This is the type of cost, always 'voice' for this class.
      title: VoiceCostType
    VoiceCostVoice:
      type: object
      properties: {}
      description: |-
        This is the voice that was used during the call.

        This matches one of the following:
        - `call.assistant.voice`,
        - `call.assistantId->voice`,
        - `call.squad[n].assistant.voice`,
        - `call.squad[n].assistantId->voice`,
        - `call.squadId->[n].assistant.voice`,
        - `call.squadId->[n].assistantId->voice`.
      title: VoiceCostVoice
    VoiceCost:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/VoiceCostType'
          description: This is the type of cost, always 'voice' for this class.
        voice:
          $ref: '#/components/schemas/VoiceCostVoice'
          description: |-
            This is the voice that was used during the call.

            This matches one of the following:
            - `call.assistant.voice`,
            - `call.assistantId->voice`,
            - `call.squad[n].assistant.voice`,
            - `call.squad[n].assistantId->voice`,
            - `call.squadId->[n].assistant.voice`,
            - `call.squadId->[n].assistantId->voice`.
        characters:
          type: number
          format: double
          description: >-
            This is the number of characters that were generated during the
            call. These should be total characters used in the call for single
            assistant calls, while squad calls will have multiple voice costs
            one for each assistant that was used.
        cost:
          type: number
          format: double
          description: This is the cost of the component in USD.
      required:
        - type
        - voice
        - characters
        - cost
      title: VoiceCost
    VapiCostType:
      type: string
      enum:
        - vapi
      description: This is the type of cost, always 'vapi' for this class.
      title: VapiCostType
    VapiCostSubType:
      type: string
      enum:
        - normal
        - overage
      description: This is the sub type of the cost.
      title: VapiCostSubType
    VapiCost:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/VapiCostType'
          description: This is the type of cost, always 'vapi' for this class.
        subType:
          $ref: '#/components/schemas/VapiCostSubType'
          description: This is the sub type of the cost.
        minutes:
          type: number
          format: double
          description: >-
            This is the minutes of Vapi usage. This should match `call.endedAt`
            - `call.startedAt`.
        cost:
          type: number
          format: double
          description: This is the cost of the component in USD.
      required:
        - type
        - subType
        - minutes
        - cost
      title: VapiCost
    VoicemailDetectionCostType:
      type: string
      enum:
        - voicemail-detection
      description: This is the type of cost, always 'voicemail-detection' for this class.
      title: VoicemailDetectionCostType
    VoicemailDetectionCostModel:
      type: object
      properties: {}
      description: This is the model that was used to perform the analysis.
      title: VoicemailDetectionCostModel
    VoicemailDetectionCostProvider:
      type: string
      enum:
        - twilio
        - google
        - openai
        - vapi
      description: This is the provider that was used to detect the voicemail.
      title: VoicemailDetectionCostProvider
    VoicemailDetectionCost:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/VoicemailDetectionCostType'
          description: >-
            This is the type of cost, always 'voicemail-detection' for this
            class.
        model:
          $ref: '#/components/schemas/VoicemailDetectionCostModel'
          description: This is the model that was used to perform the analysis.
        provider:
          $ref: '#/components/schemas/VoicemailDetectionCostProvider'
          description: This is the provider that was used to detect the voicemail.
        promptTextTokens:
          type: number
          format: double
          description: >-
            This is the number of prompt text tokens used in the voicemail
            detection.
        promptAudioTokens:
          type: number
          format: double
          description: >-
            This is the number of prompt audio tokens used in the voicemail
            detection.
        completionTextTokens:
          type: number
          format: double
          description: >-
            This is the number of completion text tokens used in the voicemail
            detection.
        completionAudioTokens:
          type: number
          format: double
          description: >-
            This is the number of completion audio tokens used in the voicemail
            detection.
        cost:
          type: number
          format: double
          description: This is the cost of the component in USD.
      required:
        - type
        - model
        - provider
        - promptTextTokens
        - promptAudioTokens
        - completionTextTokens
        - completionAudioTokens
        - cost
      title: VoicemailDetectionCost
    AnalysisCostType:
      type: string
      enum:
        - analysis
      description: This is the type of cost, always 'analysis' for this class.
      title: AnalysisCostType
    AnalysisCostAnalysisType:
      type: string
      enum:
        - summary
        - structuredData
        - successEvaluation
        - structuredOutput
      description: This is the type of analysis performed.
      title: AnalysisCostAnalysisType
    AnalysisCostModel:
      type: object
      properties: {}
      description: This is the model that was used to perform the analysis.
      title: AnalysisCostModel
    AnalysisCost:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/AnalysisCostType'
          description: This is the type of cost, always 'analysis' for this class.
        analysisType:
          $ref: '#/components/schemas/AnalysisCostAnalysisType'
          description: This is the type of analysis performed.
        model:
          $ref: '#/components/schemas/AnalysisCostModel'
          description: This is the model that was used to perform the analysis.
        promptTokens:
          type: number
          format: double
          description: This is the number of prompt tokens used in the analysis.
        completionTokens:
          type: number
          format: double
          description: This is the number of completion tokens generated in the analysis.
        cachedPromptTokens:
          type: number
          format: double
          description: >-
            This is the number of cached prompt tokens used in the analysis.
            This is only applicable to certain providers (e.g., OpenAI, Azure
            OpenAI) that support prompt caching. Cached tokens are billed at a
            discounted rate.
        cost:
          type: number
          format: double
          description: This is the cost of the component in USD.
      required:
        - type
        - analysisType
        - model
        - promptTokens
        - completionTokens
        - cost
      title: AnalysisCost
    KnowledgeBaseCostType:
      type: string
      enum:
        - knowledge-base
      description: This is the type of cost, always 'knowledge-base' for this class.
      title: KnowledgeBaseCostType
    KnowledgeBaseCostModel:
      type: object
      properties: {}
      description: This is the model that was used for processing the knowledge base.
      title: KnowledgeBaseCostModel
    KnowledgeBaseCost:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/KnowledgeBaseCostType'
          description: This is the type of cost, always 'knowledge-base' for this class.
        model:
          $ref: '#/components/schemas/KnowledgeBaseCostModel'
          description: This is the model that was used for processing the knowledge base.
        promptTokens:
          type: number
          format: double
          description: >-
            This is the number of prompt tokens used in the knowledge base
            query.
        completionTokens:
          type: number
          format: double
          description: >-
            This is the number of completion tokens generated in the knowledge
            base query.
        cost:
          type: number
          format: double
          description: This is the cost of the component in USD.
      required:
        - type
        - model
        - promptTokens
        - completionTokens
        - cost
      title: KnowledgeBaseCost
    CallCostsItems:
      oneOf:
        - $ref: '#/components/schemas/TransportCost'
        - $ref: '#/components/schemas/TranscriberCost'
        - $ref: '#/components/schemas/ModelCost'
        - $ref: '#/components/schemas/VoiceCost'
        - $ref: '#/components/schemas/VapiCost'
        - $ref: '#/components/schemas/VoicemailDetectionCost'
        - $ref: '#/components/schemas/AnalysisCost'
        - $ref: '#/components/schemas/KnowledgeBaseCost'
      title: CallCostsItems
    CallMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/UserMessage'
        - $ref: '#/components/schemas/SystemMessage'
        - $ref: '#/components/schemas/BotMessage'
        - $ref: '#/components/schemas/ToolCallMessage'
        - $ref: '#/components/schemas/ToolCallResultMessage'
      title: CallMessagesItems
    CallPhoneCallProvider:
      type: string
      enum:
        - twilio
        - vonage
        - vapi
        - telnyx
      description: |-
        This is the provider of the call.

        Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type.
      title: CallPhoneCallProvider
    CallPhoneCallTransport:
      type: string
      enum:
        - sip
        - pstn
      description: |-
        This is the transport of the phone call.

        Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type.
      title: CallPhoneCallTransport
    CallStatus:
      type: string
      enum:
        - scheduled
        - queued
        - ringing
        - in-progress
        - forwarding
        - ended
        - not-found
        - deletion-failed
      description: This is the status of the call.
      title: CallStatus
    CallEndedReason:
      type: string
      enum:
        - call-start-error-neither-assistant-nor-server-set
        - assistant-request-failed
        - assistant-request-returned-error
        - assistant-request-returned-unspeakable-error
        - assistant-request-returned-invalid-assistant
        - assistant-request-returned-no-assistant
        - assistant-request-returned-forwarding-phone-number
        - scheduled-call-deleted
        - call.start.error-vapifault-get-org
        - call.start.error-vapifault-get-subscription
        - call.start.error-get-assistant
        - call.start.error-get-phone-number
        - call.start.error-get-customer
        - call.start.error-get-resources-validation
        - call.start.error-vapi-number-international
        - call.start.error-vapi-number-outbound-daily-limit
        - call.start.error-get-transport
        - call.start.error-subscription-wallet-does-not-exist
        - call.start.error-fraud-check-failed
        - call.start.error-subscription-frozen
        - call.start.error-subscription-insufficient-credits
        - call.start.error-subscription-upgrade-failed
        - call.start.error-subscription-concurrency-limit-reached
        - call.start.error-enterprise-feature-not-available-recording-consent
        - assistant-not-valid
        - call.start.error-vapifault-database-error
        - assistant-not-found
        - pipeline-error-openai-voice-failed
        - pipeline-error-cartesia-voice-failed
        - pipeline-error-deepgram-voice-failed
        - pipeline-error-eleven-labs-voice-failed
        - pipeline-error-playht-voice-failed
        - pipeline-error-lmnt-voice-failed
        - pipeline-error-azure-voice-failed
        - pipeline-error-rime-ai-voice-failed
        - pipeline-error-smallest-ai-voice-failed
        - pipeline-error-vapi-voice-failed
        - pipeline-error-neuphonic-voice-failed
        - pipeline-error-hume-voice-failed
        - pipeline-error-sesame-voice-failed
        - pipeline-error-inworld-voice-failed
        - pipeline-error-minimax-voice-failed
        - pipeline-error-wellsaid-voice-failed
        - pipeline-error-tavus-video-failed
        - call.in-progress.error-vapifault-openai-voice-failed
        - call.in-progress.error-vapifault-cartesia-voice-failed
        - call.in-progress.error-vapifault-deepgram-voice-failed
        - call.in-progress.error-vapifault-eleven-labs-voice-failed
        - call.in-progress.error-vapifault-playht-voice-failed
        - call.in-progress.error-vapifault-lmnt-voice-failed
        - call.in-progress.error-vapifault-azure-voice-failed
        - call.in-progress.error-vapifault-rime-ai-voice-failed
        - call.in-progress.error-vapifault-smallest-ai-voice-failed
        - call.in-progress.error-vapifault-vapi-voice-failed
        - call.in-progress.error-vapifault-neuphonic-voice-failed
        - call.in-progress.error-vapifault-hume-voice-failed
        - call.in-progress.error-vapifault-sesame-voice-failed
        - call.in-progress.error-vapifault-inworld-voice-failed
        - call.in-progress.error-vapifault-minimax-voice-failed
        - call.in-progress.error-vapifault-wellsaid-voice-failed
        - call.in-progress.error-vapifault-tavus-video-failed
        - pipeline-error-vapi-llm-failed
        - pipeline-error-vapi-400-bad-request-validation-failed
        - pipeline-error-vapi-401-unauthorized
        - pipeline-error-vapi-403-model-access-denied
        - pipeline-error-vapi-429-exceeded-quota
        - pipeline-error-vapi-500-server-error
        - pipeline-error-vapi-503-server-overloaded-error
        - call.in-progress.error-providerfault-vapi-llm-failed
        - >-
          call.in-progress.error-vapifault-vapi-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-vapi-401-unauthorized
        - call.in-progress.error-vapifault-vapi-403-model-access-denied
        - call.in-progress.error-vapifault-vapi-429-exceeded-quota
        - call.in-progress.error-providerfault-vapi-500-server-error
        - call.in-progress.error-providerfault-vapi-503-server-overloaded-error
        - pipeline-error-deepgram-transcriber-failed
        - pipeline-error-deepgram-transcriber-api-key-missing
        - call.in-progress.error-vapifault-deepgram-transcriber-failed
        - pipeline-error-gladia-transcriber-failed
        - call.in-progress.error-vapifault-gladia-transcriber-failed
        - pipeline-error-speechmatics-transcriber-failed
        - call.in-progress.error-vapifault-speechmatics-transcriber-failed
        - pipeline-error-assembly-ai-transcriber-failed
        - pipeline-error-assembly-ai-returning-400-insufficent-funds
        - pipeline-error-assembly-ai-returning-400-paid-only-feature
        - pipeline-error-assembly-ai-returning-401-invalid-credentials
        - pipeline-error-assembly-ai-returning-500-invalid-schema
        - pipeline-error-assembly-ai-returning-500-word-boost-parsing-failed
        - call.in-progress.error-vapifault-assembly-ai-transcriber-failed
        - >-
          call.in-progress.error-vapifault-assembly-ai-returning-400-insufficent-funds
        - >-
          call.in-progress.error-vapifault-assembly-ai-returning-400-paid-only-feature
        - >-
          call.in-progress.error-vapifault-assembly-ai-returning-401-invalid-credentials
        - >-
          call.in-progress.error-vapifault-assembly-ai-returning-500-invalid-schema
        - >-
          call.in-progress.error-vapifault-assembly-ai-returning-500-word-boost-parsing-failed
        - pipeline-error-talkscriber-transcriber-failed
        - call.in-progress.error-vapifault-talkscriber-transcriber-failed
        - pipeline-error-azure-speech-transcriber-failed
        - call.in-progress.error-vapifault-azure-speech-transcriber-failed
        - pipeline-error-eleven-labs-transcriber-failed
        - call.in-progress.error-vapifault-eleven-labs-transcriber-failed
        - pipeline-error-google-transcriber-failed
        - call.in-progress.error-vapifault-google-transcriber-failed
        - pipeline-error-openai-transcriber-failed
        - call.in-progress.error-vapifault-openai-transcriber-failed
        - pipeline-error-soniox-transcriber-auth-failed
        - pipeline-error-soniox-transcriber-rate-limited
        - pipeline-error-soniox-transcriber-invalid-config
        - pipeline-error-soniox-transcriber-server-error
        - pipeline-error-soniox-transcriber-failed
        - call.in-progress.error-vapifault-soniox-transcriber-auth-failed
        - call.in-progress.error-vapifault-soniox-transcriber-rate-limited
        - call.in-progress.error-vapifault-soniox-transcriber-invalid-config
        - call.in-progress.error-vapifault-soniox-transcriber-server-error
        - call.in-progress.error-vapifault-soniox-transcriber-failed
        - call.in-progress.error-pipeline-no-available-llm-model
        - worker-shutdown
        - vonage-disconnected
        - vonage-failed-to-connect-call
        - vonage-completed
        - phone-call-provider-bypass-enabled-but-no-call-received
        - call.in-progress.error-providerfault-transport-never-connected
        - call.in-progress.error-vapifault-worker-not-available
        - call.in-progress.error-vapifault-transport-never-connected
        - >-
          call.in-progress.error-vapifault-transport-connected-but-call-not-active
        - >-
          call.in-progress.error-vapifault-call-started-but-connection-to-transport-missing
        - call.in-progress.error-vapifault-worker-died
        - call.in-progress.twilio-completed-call
        - call.in-progress.sip-completed-call
        - call.in-progress.error-sip-inbound-call-failed-to-connect
        - >-
          call.in-progress.error-providerfault-outbound-sip-503-service-unavailable
        - call.in-progress.error-sip-outbound-call-failed-to-connect
        - call.ringing.error-sip-inbound-call-failed-to-connect
        - call.in-progress.error-providerfault-openai-llm-failed
        - call.in-progress.error-providerfault-azure-openai-llm-failed
        - call.in-progress.error-providerfault-groq-llm-failed
        - call.in-progress.error-providerfault-google-llm-failed
        - call.in-progress.error-providerfault-xai-llm-failed
        - call.in-progress.error-providerfault-mistral-llm-failed
        - call.in-progress.error-providerfault-minimax-llm-failed
        - call.in-progress.error-providerfault-inflection-ai-llm-failed
        - call.in-progress.error-providerfault-cerebras-llm-failed
        - call.in-progress.error-providerfault-deep-seek-llm-failed
        - call.in-progress.error-providerfault-baseten-llm-failed
        - call.in-progress.error-vapifault-chat-pipeline-failed-to-start
        - pipeline-error-openai-400-bad-request-validation-failed
        - pipeline-error-openai-401-unauthorized
        - pipeline-error-openai-401-incorrect-api-key
        - pipeline-error-openai-401-account-not-in-organization
        - pipeline-error-openai-403-model-access-denied
        - pipeline-error-openai-429-exceeded-quota
        - pipeline-error-openai-429-rate-limit-reached
        - pipeline-error-openai-500-server-error
        - pipeline-error-openai-503-server-overloaded-error
        - pipeline-error-openai-llm-failed
        - >-
          call.in-progress.error-vapifault-openai-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-openai-401-unauthorized
        - call.in-progress.error-vapifault-openai-401-incorrect-api-key
        - >-
          call.in-progress.error-vapifault-openai-401-account-not-in-organization
        - call.in-progress.error-vapifault-openai-403-model-access-denied
        - call.in-progress.error-vapifault-openai-429-exceeded-quota
        - call.in-progress.error-vapifault-openai-429-rate-limit-reached
        - call.in-progress.error-providerfault-openai-500-server-error
        - >-
          call.in-progress.error-providerfault-openai-503-server-overloaded-error
        - pipeline-error-azure-openai-400-bad-request-validation-failed
        - pipeline-error-azure-openai-401-unauthorized
        - pipeline-error-azure-openai-403-model-access-denied
        - pipeline-error-azure-openai-429-exceeded-quota
        - pipeline-error-azure-openai-500-server-error
        - pipeline-error-azure-openai-503-server-overloaded-error
        - pipeline-error-azure-openai-llm-failed
        - >-
          call.in-progress.error-vapifault-azure-openai-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-azure-openai-401-unauthorized
        - call.in-progress.error-vapifault-azure-openai-403-model-access-denied
        - call.in-progress.error-vapifault-azure-openai-429-exceeded-quota
        - call.in-progress.error-providerfault-azure-openai-500-server-error
        - >-
          call.in-progress.error-providerfault-azure-openai-503-server-overloaded-error
        - pipeline-error-google-400-bad-request-validation-failed
        - pipeline-error-google-401-unauthorized
        - pipeline-error-google-403-model-access-denied
        - pipeline-error-google-429-exceeded-quota
        - pipeline-error-google-500-server-error
        - pipeline-error-google-503-server-overloaded-error
        - pipeline-error-google-llm-failed
        - >-
          call.in-progress.error-vapifault-google-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-google-401-unauthorized
        - call.in-progress.error-vapifault-google-403-model-access-denied
        - call.in-progress.error-vapifault-google-429-exceeded-quota
        - call.in-progress.error-providerfault-google-500-server-error
        - >-
          call.in-progress.error-providerfault-google-503-server-overloaded-error
        - pipeline-error-xai-400-bad-request-validation-failed
        - pipeline-error-xai-401-unauthorized
        - pipeline-error-xai-403-model-access-denied
        - pipeline-error-xai-429-exceeded-quota
        - pipeline-error-xai-500-server-error
        - pipeline-error-xai-503-server-overloaded-error
        - pipeline-error-xai-llm-failed
        - call.in-progress.error-vapifault-xai-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-xai-401-unauthorized
        - call.in-progress.error-vapifault-xai-403-model-access-denied
        - call.in-progress.error-vapifault-xai-429-exceeded-quota
        - call.in-progress.error-providerfault-xai-500-server-error
        - call.in-progress.error-providerfault-xai-503-server-overloaded-error
        - pipeline-error-baseten-400-bad-request-validation-failed
        - pipeline-error-baseten-401-unauthorized
        - pipeline-error-baseten-403-model-access-denied
        - pipeline-error-baseten-429-exceeded-quota
        - pipeline-error-baseten-500-server-error
        - pipeline-error-baseten-503-server-overloaded-error
        - pipeline-error-baseten-llm-failed
        - >-
          call.in-progress.error-vapifault-baseten-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-baseten-401-unauthorized
        - call.in-progress.error-vapifault-baseten-403-model-access-denied
        - call.in-progress.error-vapifault-baseten-429-exceeded-quota
        - call.in-progress.error-providerfault-baseten-500-server-error
        - >-
          call.in-progress.error-providerfault-baseten-503-server-overloaded-error
        - pipeline-error-mistral-400-bad-request-validation-failed
        - pipeline-error-mistral-401-unauthorized
        - pipeline-error-mistral-403-model-access-denied
        - pipeline-error-mistral-429-exceeded-quota
        - pipeline-error-mistral-500-server-error
        - pipeline-error-mistral-503-server-overloaded-error
        - pipeline-error-mistral-llm-failed
        - >-
          call.in-progress.error-vapifault-mistral-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-mistral-401-unauthorized
        - call.in-progress.error-vapifault-mistral-403-model-access-denied
        - call.in-progress.error-vapifault-mistral-429-exceeded-quota
        - call.in-progress.error-providerfault-mistral-500-server-error
        - >-
          call.in-progress.error-providerfault-mistral-503-server-overloaded-error
        - pipeline-error-minimax-400-bad-request-validation-failed
        - pipeline-error-minimax-401-unauthorized
        - pipeline-error-minimax-403-model-access-denied
        - pipeline-error-minimax-429-exceeded-quota
        - pipeline-error-minimax-500-server-error
        - pipeline-error-minimax-503-server-overloaded-error
        - pipeline-error-minimax-llm-failed
        - >-
          call.in-progress.error-vapifault-minimax-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-minimax-401-unauthorized
        - call.in-progress.error-vapifault-minimax-403-model-access-denied
        - call.in-progress.error-vapifault-minimax-429-exceeded-quota
        - call.in-progress.error-providerfault-minimax-500-server-error
        - >-
          call.in-progress.error-providerfault-minimax-503-server-overloaded-error
        - pipeline-error-inflection-ai-400-bad-request-validation-failed
        - pipeline-error-inflection-ai-401-unauthorized
        - pipeline-error-inflection-ai-403-model-access-denied
        - pipeline-error-inflection-ai-429-exceeded-quota
        - pipeline-error-inflection-ai-500-server-error
        - pipeline-error-inflection-ai-503-server-overloaded-error
        - pipeline-error-inflection-ai-llm-failed
        - >-
          call.in-progress.error-vapifault-inflection-ai-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-inflection-ai-401-unauthorized
        - call.in-progress.error-vapifault-inflection-ai-403-model-access-denied
        - call.in-progress.error-vapifault-inflection-ai-429-exceeded-quota
        - call.in-progress.error-providerfault-inflection-ai-500-server-error
        - >-
          call.in-progress.error-providerfault-inflection-ai-503-server-overloaded-error
        - pipeline-error-deep-seek-400-bad-request-validation-failed
        - pipeline-error-deep-seek-401-unauthorized
        - pipeline-error-deep-seek-403-model-access-denied
        - pipeline-error-deep-seek-429-exceeded-quota
        - pipeline-error-deep-seek-500-server-error
        - pipeline-error-deep-seek-503-server-overloaded-error
        - pipeline-error-deep-seek-llm-failed
        - >-
          call.in-progress.error-vapifault-deep-seek-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-deep-seek-401-unauthorized
        - call.in-progress.error-vapifault-deep-seek-403-model-access-denied
        - call.in-progress.error-vapifault-deep-seek-429-exceeded-quota
        - call.in-progress.error-providerfault-deep-seek-500-server-error
        - >-
          call.in-progress.error-providerfault-deep-seek-503-server-overloaded-error
        - pipeline-error-groq-400-bad-request-validation-failed
        - pipeline-error-groq-401-unauthorized
        - pipeline-error-groq-403-model-access-denied
        - pipeline-error-groq-429-exceeded-quota
        - pipeline-error-groq-500-server-error
        - pipeline-error-groq-503-server-overloaded-error
        - pipeline-error-groq-llm-failed
        - >-
          call.in-progress.error-vapifault-groq-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-groq-401-unauthorized
        - call.in-progress.error-vapifault-groq-403-model-access-denied
        - call.in-progress.error-vapifault-groq-429-exceeded-quota
        - call.in-progress.error-providerfault-groq-500-server-error
        - call.in-progress.error-providerfault-groq-503-server-overloaded-error
        - pipeline-error-cerebras-400-bad-request-validation-failed
        - pipeline-error-cerebras-401-unauthorized
        - pipeline-error-cerebras-403-model-access-denied
        - pipeline-error-cerebras-429-exceeded-quota
        - pipeline-error-cerebras-500-server-error
        - pipeline-error-cerebras-503-server-overloaded-error
        - pipeline-error-cerebras-llm-failed
        - >-
          call.in-progress.error-vapifault-cerebras-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-cerebras-401-unauthorized
        - call.in-progress.error-vapifault-cerebras-403-model-access-denied
        - call.in-progress.error-vapifault-cerebras-429-exceeded-quota
        - call.in-progress.error-providerfault-cerebras-500-server-error
        - >-
          call.in-progress.error-providerfault-cerebras-503-server-overloaded-error
        - pipeline-error-anthropic-400-bad-request-validation-failed
        - pipeline-error-anthropic-401-unauthorized
        - pipeline-error-anthropic-403-model-access-denied
        - pipeline-error-anthropic-429-exceeded-quota
        - pipeline-error-anthropic-500-server-error
        - pipeline-error-anthropic-503-server-overloaded-error
        - pipeline-error-anthropic-llm-failed
        - call.in-progress.error-providerfault-anthropic-llm-failed
        - >-
          call.in-progress.error-vapifault-anthropic-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-anthropic-401-unauthorized
        - call.in-progress.error-vapifault-anthropic-403-model-access-denied
        - call.in-progress.error-vapifault-anthropic-429-exceeded-quota
        - call.in-progress.error-providerfault-anthropic-500-server-error
        - >-
          call.in-progress.error-providerfault-anthropic-503-server-overloaded-error
        - pipeline-error-anthropic-bedrock-400-bad-request-validation-failed
        - pipeline-error-anthropic-bedrock-401-unauthorized
        - pipeline-error-anthropic-bedrock-403-model-access-denied
        - pipeline-error-anthropic-bedrock-429-exceeded-quota
        - pipeline-error-anthropic-bedrock-500-server-error
        - pipeline-error-anthropic-bedrock-503-server-overloaded-error
        - pipeline-error-anthropic-bedrock-llm-failed
        - call.in-progress.error-providerfault-anthropic-bedrock-llm-failed
        - >-
          call.in-progress.error-vapifault-anthropic-bedrock-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-anthropic-bedrock-401-unauthorized
        - >-
          call.in-progress.error-vapifault-anthropic-bedrock-403-model-access-denied
        - call.in-progress.error-vapifault-anthropic-bedrock-429-exceeded-quota
        - >-
          call.in-progress.error-providerfault-anthropic-bedrock-500-server-error
        - >-
          call.in-progress.error-providerfault-anthropic-bedrock-503-server-overloaded-error
        - pipeline-error-anthropic-vertex-400-bad-request-validation-failed
        - pipeline-error-anthropic-vertex-401-unauthorized
        - pipeline-error-anthropic-vertex-403-model-access-denied
        - pipeline-error-anthropic-vertex-429-exceeded-quota
        - pipeline-error-anthropic-vertex-500-server-error
        - pipeline-error-anthropic-vertex-503-server-overloaded-error
        - pipeline-error-anthropic-vertex-llm-failed
        - call.in-progress.error-providerfault-anthropic-vertex-llm-failed
        - >-
          call.in-progress.error-vapifault-anthropic-vertex-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-anthropic-vertex-401-unauthorized
        - >-
          call.in-progress.error-vapifault-anthropic-vertex-403-model-access-denied
        - call.in-progress.error-vapifault-anthropic-vertex-429-exceeded-quota
        - call.in-progress.error-providerfault-anthropic-vertex-500-server-error
        - >-
          call.in-progress.error-providerfault-anthropic-vertex-503-server-overloaded-error
        - pipeline-error-together-ai-400-bad-request-validation-failed
        - pipeline-error-together-ai-401-unauthorized
        - pipeline-error-together-ai-403-model-access-denied
        - pipeline-error-together-ai-429-exceeded-quota
        - pipeline-error-together-ai-500-server-error
        - pipeline-error-together-ai-503-server-overloaded-error
        - pipeline-error-together-ai-llm-failed
        - call.in-progress.error-providerfault-together-ai-llm-failed
        - >-
          call.in-progress.error-vapifault-together-ai-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-together-ai-401-unauthorized
        - call.in-progress.error-vapifault-together-ai-403-model-access-denied
        - call.in-progress.error-vapifault-together-ai-429-exceeded-quota
        - call.in-progress.error-providerfault-together-ai-500-server-error
        - >-
          call.in-progress.error-providerfault-together-ai-503-server-overloaded-error
        - pipeline-error-anyscale-400-bad-request-validation-failed
        - pipeline-error-anyscale-401-unauthorized
        - pipeline-error-anyscale-403-model-access-denied
        - pipeline-error-anyscale-429-exceeded-quota
        - pipeline-error-anyscale-500-server-error
        - pipeline-error-anyscale-503-server-overloaded-error
        - pipeline-error-anyscale-llm-failed
        - call.in-progress.error-providerfault-anyscale-llm-failed
        - >-
          call.in-progress.error-vapifault-anyscale-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-anyscale-401-unauthorized
        - call.in-progress.error-vapifault-anyscale-403-model-access-denied
        - call.in-progress.error-vapifault-anyscale-429-exceeded-quota
        - call.in-progress.error-providerfault-anyscale-500-server-error
        - >-
          call.in-progress.error-providerfault-anyscale-503-server-overloaded-error
        - pipeline-error-openrouter-400-bad-request-validation-failed
        - pipeline-error-openrouter-401-unauthorized
        - pipeline-error-openrouter-403-model-access-denied
        - pipeline-error-openrouter-429-exceeded-quota
        - pipeline-error-openrouter-500-server-error
        - pipeline-error-openrouter-503-server-overloaded-error
        - pipeline-error-openrouter-llm-failed
        - call.in-progress.error-providerfault-openrouter-llm-failed
        - >-
          call.in-progress.error-vapifault-openrouter-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-openrouter-401-unauthorized
        - call.in-progress.error-vapifault-openrouter-403-model-access-denied
        - call.in-progress.error-vapifault-openrouter-429-exceeded-quota
        - call.in-progress.error-providerfault-openrouter-500-server-error
        - >-
          call.in-progress.error-providerfault-openrouter-503-server-overloaded-error
        - pipeline-error-perplexity-ai-400-bad-request-validation-failed
        - pipeline-error-perplexity-ai-401-unauthorized
        - pipeline-error-perplexity-ai-403-model-access-denied
        - pipeline-error-perplexity-ai-429-exceeded-quota
        - pipeline-error-perplexity-ai-500-server-error
        - pipeline-error-perplexity-ai-503-server-overloaded-error
        - pipeline-error-perplexity-ai-llm-failed
        - call.in-progress.error-providerfault-perplexity-ai-llm-failed
        - >-
          call.in-progress.error-vapifault-perplexity-ai-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-perplexity-ai-401-unauthorized
        - call.in-progress.error-vapifault-perplexity-ai-403-model-access-denied
        - call.in-progress.error-vapifault-perplexity-ai-429-exceeded-quota
        - call.in-progress.error-providerfault-perplexity-ai-500-server-error
        - >-
          call.in-progress.error-providerfault-perplexity-ai-503-server-overloaded-error
        - pipeline-error-deepinfra-400-bad-request-validation-failed
        - pipeline-error-deepinfra-401-unauthorized
        - pipeline-error-deepinfra-403-model-access-denied
        - pipeline-error-deepinfra-429-exceeded-quota
        - pipeline-error-deepinfra-500-server-error
        - pipeline-error-deepinfra-503-server-overloaded-error
        - pipeline-error-deepinfra-llm-failed
        - call.in-progress.error-providerfault-deepinfra-llm-failed
        - >-
          call.in-progress.error-vapifault-deepinfra-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-deepinfra-401-unauthorized
        - call.in-progress.error-vapifault-deepinfra-403-model-access-denied
        - call.in-progress.error-vapifault-deepinfra-429-exceeded-quota
        - call.in-progress.error-providerfault-deepinfra-500-server-error
        - >-
          call.in-progress.error-providerfault-deepinfra-503-server-overloaded-error
        - pipeline-error-runpod-400-bad-request-validation-failed
        - pipeline-error-runpod-401-unauthorized
        - pipeline-error-runpod-403-model-access-denied
        - pipeline-error-runpod-429-exceeded-quota
        - pipeline-error-runpod-500-server-error
        - pipeline-error-runpod-503-server-overloaded-error
        - pipeline-error-runpod-llm-failed
        - call.in-progress.error-providerfault-runpod-llm-failed
        - >-
          call.in-progress.error-vapifault-runpod-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-runpod-401-unauthorized
        - call.in-progress.error-vapifault-runpod-403-model-access-denied
        - call.in-progress.error-vapifault-runpod-429-exceeded-quota
        - call.in-progress.error-providerfault-runpod-500-server-error
        - >-
          call.in-progress.error-providerfault-runpod-503-server-overloaded-error
        - pipeline-error-custom-llm-400-bad-request-validation-failed
        - pipeline-error-custom-llm-401-unauthorized
        - pipeline-error-custom-llm-403-model-access-denied
        - pipeline-error-custom-llm-429-exceeded-quota
        - pipeline-error-custom-llm-500-server-error
        - pipeline-error-custom-llm-503-server-overloaded-error
        - pipeline-error-custom-llm-llm-failed
        - call.in-progress.error-providerfault-custom-llm-llm-failed
        - >-
          call.in-progress.error-vapifault-custom-llm-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-custom-llm-401-unauthorized
        - call.in-progress.error-vapifault-custom-llm-403-model-access-denied
        - call.in-progress.error-vapifault-custom-llm-429-exceeded-quota
        - call.in-progress.error-providerfault-custom-llm-500-server-error
        - >-
          call.in-progress.error-providerfault-custom-llm-503-server-overloaded-error
        - call.in-progress.error-pipeline-ws-model-connection-failed
        - pipeline-error-custom-voice-failed
        - pipeline-error-cartesia-socket-hang-up
        - pipeline-error-cartesia-requested-payment
        - pipeline-error-cartesia-500-server-error
        - pipeline-error-cartesia-502-server-error
        - pipeline-error-cartesia-503-server-error
        - pipeline-error-cartesia-522-server-error
        - call.in-progress.error-vapifault-cartesia-socket-hang-up
        - call.in-progress.error-vapifault-cartesia-requested-payment
        - call.in-progress.error-providerfault-cartesia-500-server-error
        - call.in-progress.error-providerfault-cartesia-503-server-error
        - call.in-progress.error-providerfault-cartesia-522-server-error
        - pipeline-error-eleven-labs-voice-not-found
        - pipeline-error-eleven-labs-quota-exceeded
        - pipeline-error-eleven-labs-unauthorized-access
        - pipeline-error-eleven-labs-unauthorized-to-access-model
        - pipeline-error-eleven-labs-professional-voices-only-for-creator-plus
        - pipeline-error-eleven-labs-blocked-free-plan-and-requested-upgrade
        - >-
          pipeline-error-eleven-labs-blocked-concurrent-requests-and-requested-upgrade
        - >-
          pipeline-error-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade
        - pipeline-error-eleven-labs-system-busy-and-requested-upgrade
        - pipeline-error-eleven-labs-voice-not-fine-tuned
        - pipeline-error-eleven-labs-invalid-api-key
        - pipeline-error-eleven-labs-invalid-voice-samples
        - pipeline-error-eleven-labs-voice-disabled-by-owner
        - pipeline-error-eleven-labs-vapi-voice-disabled-by-owner
        - pipeline-error-eleven-labs-blocked-account-in-probation
        - pipeline-error-eleven-labs-blocked-content-against-their-policy
        - pipeline-error-eleven-labs-missing-samples-for-voice-clone
        - pipeline-error-eleven-labs-voice-not-fine-tuned-and-cannot-be-used
        - pipeline-error-eleven-labs-voice-not-allowed-for-free-users
        - pipeline-error-eleven-labs-max-character-limit-exceeded
        - >-
          pipeline-error-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification
        - pipeline-error-eleven-labs-500-server-error
        - pipeline-error-eleven-labs-503-server-error
        - call.in-progress.error-vapifault-eleven-labs-voice-not-found
        - call.in-progress.error-vapifault-eleven-labs-quota-exceeded
        - call.in-progress.error-vapifault-eleven-labs-unauthorized-access
        - >-
          call.in-progress.error-vapifault-eleven-labs-unauthorized-to-access-model
        - >-
          call.in-progress.error-vapifault-eleven-labs-professional-voices-only-for-creator-plus
        - >-
          call.in-progress.error-vapifault-eleven-labs-blocked-free-plan-and-requested-upgrade
        - >-
          call.in-progress.error-vapifault-eleven-labs-blocked-concurrent-requests-and-requested-upgrade
        - >-
          call.in-progress.error-vapifault-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade
        - >-
          call.in-progress.error-vapifault-eleven-labs-system-busy-and-requested-upgrade
        - call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned
        - call.in-progress.error-vapifault-eleven-labs-invalid-api-key
        - call.in-progress.error-vapifault-eleven-labs-invalid-voice-samples
        - call.in-progress.error-vapifault-eleven-labs-voice-disabled-by-owner
        - >-
          call.in-progress.error-vapifault-eleven-labs-blocked-account-in-probation
        - >-
          call.in-progress.error-vapifault-eleven-labs-blocked-content-against-their-policy
        - >-
          call.in-progress.error-vapifault-eleven-labs-missing-samples-for-voice-clone
        - >-
          call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned-and-cannot-be-used
        - >-
          call.in-progress.error-vapifault-eleven-labs-voice-not-allowed-for-free-users
        - >-
          call.in-progress.error-vapifault-eleven-labs-max-character-limit-exceeded
        - >-
          call.in-progress.error-vapifault-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification
        - >-
          call.in-progress.error-providerfault-eleven-labs-system-busy-and-requested-upgrade
        - call.in-progress.error-providerfault-eleven-labs-500-server-error
        - call.in-progress.error-providerfault-eleven-labs-503-server-error
        - pipeline-error-playht-request-timed-out
        - pipeline-error-playht-invalid-voice
        - pipeline-error-playht-unexpected-error
        - pipeline-error-playht-out-of-credits
        - pipeline-error-playht-invalid-emotion
        - pipeline-error-playht-voice-must-be-a-valid-voice-manifest-uri
        - pipeline-error-playht-401-unauthorized
        - pipeline-error-playht-403-forbidden-out-of-characters
        - pipeline-error-playht-403-forbidden-api-access-not-available
        - pipeline-error-playht-429-exceeded-quota
        - pipeline-error-playht-502-gateway-error
        - pipeline-error-playht-504-gateway-error
        - call.in-progress.error-vapifault-playht-request-timed-out
        - call.in-progress.error-vapifault-playht-invalid-voice
        - call.in-progress.error-vapifault-playht-unexpected-error
        - call.in-progress.error-vapifault-playht-out-of-credits
        - call.in-progress.error-vapifault-playht-invalid-emotion
        - >-
          call.in-progress.error-vapifault-playht-voice-must-be-a-valid-voice-manifest-uri
        - call.in-progress.error-vapifault-playht-401-unauthorized
        - >-
          call.in-progress.error-vapifault-playht-403-forbidden-out-of-characters
        - >-
          call.in-progress.error-vapifault-playht-403-forbidden-api-access-not-available
        - call.in-progress.error-vapifault-playht-429-exceeded-quota
        - call.in-progress.error-providerfault-playht-502-gateway-error
        - call.in-progress.error-providerfault-playht-504-gateway-error
        - pipeline-error-custom-transcriber-failed
        - call.in-progress.error-vapifault-custom-transcriber-failed
        - pipeline-error-eleven-labs-transcriber-failed
        - call.in-progress.error-vapifault-eleven-labs-transcriber-failed
        - >-
          pipeline-error-deepgram-returning-400-no-such-model-language-tier-combination
        - pipeline-error-deepgram-returning-401-invalid-credentials
        - pipeline-error-deepgram-returning-403-model-access-denied
        - pipeline-error-deepgram-returning-404-not-found
        - pipeline-error-deepgram-returning-500-invalid-json
        - pipeline-error-deepgram-returning-502-network-error
        - pipeline-error-deepgram-returning-502-bad-gateway-ehostunreach
        - pipeline-error-deepgram-returning-econnreset
        - >-
          call.in-progress.error-vapifault-deepgram-returning-400-no-such-model-language-tier-combination
        - >-
          call.in-progress.error-vapifault-deepgram-returning-401-invalid-credentials
        - call.in-progress.error-vapifault-deepgram-returning-404-not-found
        - >-
          call.in-progress.error-vapifault-deepgram-returning-403-model-access-denied
        - >-
          call.in-progress.error-providerfault-deepgram-returning-500-invalid-json
        - >-
          call.in-progress.error-providerfault-deepgram-returning-502-network-error
        - >-
          call.in-progress.error-providerfault-deepgram-returning-502-bad-gateway-ehostunreach
        - pipeline-error-google-transcriber-failed
        - call.in-progress.error-vapifault-google-transcriber-failed
        - pipeline-error-openai-transcriber-failed
        - call.in-progress.error-vapifault-openai-transcriber-failed
        - pipeline-error-soniox-transcriber-auth-failed
        - pipeline-error-soniox-transcriber-rate-limited
        - pipeline-error-soniox-transcriber-invalid-config
        - pipeline-error-soniox-transcriber-server-error
        - pipeline-error-soniox-transcriber-failed
        - call.in-progress.error-vapifault-soniox-transcriber-auth-failed
        - call.in-progress.error-vapifault-soniox-transcriber-rate-limited
        - call.in-progress.error-vapifault-soniox-transcriber-invalid-config
        - call.in-progress.error-vapifault-soniox-transcriber-server-error
        - call.in-progress.error-vapifault-soniox-transcriber-failed
        - call.in-progress.error-warm-transfer-max-duration
        - call.in-progress.error-warm-transfer-assistant-cancelled
        - call.in-progress.error-warm-transfer-silence-timeout
        - call.in-progress.error-warm-transfer-microphone-timeout
        - assistant-ended-call
        - assistant-said-end-call-phrase
        - assistant-ended-call-with-hangup-task
        - assistant-ended-call-after-message-spoken
        - assistant-forwarded-call
        - assistant-join-timed-out
        - call.in-progress.error-assistant-did-not-receive-customer-audio
        - call.in-progress.error-transfer-failed
        - customer-busy
        - customer-ended-call
        - customer-ended-call-before-warm-transfer
        - customer-ended-call-after-warm-transfer-attempt
        - customer-ended-call-during-transfer
        - customer-did-not-answer
        - customer-did-not-give-microphone-permission
        - exceeded-max-duration
        - manually-canceled
        - phone-call-provider-closed-websocket
        - call.forwarding.operator-busy
        - silence-timed-out
        - call.in-progress.error-sip-inbound-call-failed-to-connect
        - call.in-progress.error-providerfault-outbound-sip-403-forbidden
        - >-
          call.in-progress.error-providerfault-outbound-sip-407-proxy-authentication-required
        - call.in-progress.error-providerfault-outbound-sip-408-request-timeout
        - >-
          call.in-progress.error-providerfault-outbound-sip-503-service-unavailable
        - >-
          call.in-progress.error-providerfault-outbound-sip-480-temporarily-unavailable
        - call.in-progress.error-sip-outbound-call-failed-to-connect
        - call.ringing.hook-executed-say
        - call.ringing.hook-executed-transfer
        - call.ending.hook-executed-say
        - call.ending.hook-executed-transfer
        - call.ringing.sip-inbound-caller-hungup-before-call-connect
        - call.ringing.error-sip-inbound-call-failed-to-connect
        - twilio-failed-to-connect-call
        - twilio-reported-customer-misdialed
        - vonage-rejected
        - voicemail
        - call-deleted
      description: This is the explanation for how the call ended.
      title: CallEndedReason
    CallDestination:
      oneOf:
        - $ref: '#/components/schemas/TransferDestinationNumber'
        - $ref: '#/components/schemas/TransferDestinationSip'
      description: >-
        This is the destination where the call ended up being transferred to. If
        the call was not transferred, this will be empty.
      title: CallDestination
    AnalysisCostBreakdown:
      type: object
      properties:
        summary:
          type: number
          format: double
          description: This is the cost to summarize the call.
        summaryPromptTokens:
          type: number
          format: double
          description: This is the number of prompt tokens used to summarize the call.
        summaryCompletionTokens:
          type: number
          format: double
          description: This is the number of completion tokens used to summarize the call.
        summaryCachedPromptTokens:
          type: number
          format: double
          description: >-
            This is the number of cached prompt tokens used to summarize the
            call.
        structuredData:
          type: number
          format: double
          description: This is the cost to extract structured data from the call.
        structuredDataPromptTokens:
          type: number
          format: double
          description: >-
            This is the number of prompt tokens used to extract structured data
            from the call.
        structuredDataCompletionTokens:
          type: number
          format: double
          description: >-
            This is the number of completion tokens used to extract structured
            data from the call.
        structuredDataCachedPromptTokens:
          type: number
          format: double
          description: >-
            This is the number of cached prompt tokens used to extract
            structured data from the call.
        successEvaluation:
          type: number
          format: double
          description: This is the cost to evaluate if the call was successful.
        successEvaluationPromptTokens:
          type: number
          format: double
          description: >-
            This is the number of prompt tokens used to evaluate if the call was
            successful.
        successEvaluationCompletionTokens:
          type: number
          format: double
          description: >-
            This is the number of completion tokens used to evaluate if the call
            was successful.
        successEvaluationCachedPromptTokens:
          type: number
          format: double
          description: >-
            This is the number of cached prompt tokens used to evaluate if the
            call was successful.
        structuredOutput:
          type: number
          format: double
          description: This is the cost to evaluate structuredOutputs from the call.
        structuredOutputPromptTokens:
          type: number
          format: double
          description: >-
            This is the number of prompt tokens used to evaluate
            structuredOutputs from the call.
        structuredOutputCompletionTokens:
          type: number
          format: double
          description: >-
            This is the number of completion tokens used to evaluate
            structuredOutputs from the call.
        structuredOutputCachedPromptTokens:
          type: number
          format: double
          description: >-
            This is the number of cached prompt tokens used to evaluate
            structuredOutputs from the call.
      title: AnalysisCostBreakdown
    CostBreakdown:
      type: object
      properties:
        transport:
          type: number
          format: double
          description: This is the cost of the transport provider, like Twilio or Vonage.
        stt:
          type: number
          format: double
          description: This is the cost of the speech-to-text service.
        llm:
          type: number
          format: double
          description: This is the cost of the language model.
        tts:
          type: number
          format: double
          description: This is the cost of the text-to-speech service.
        vapi:
          type: number
          format: double
          description: This is the cost of Vapi.
        chat:
          type: number
          format: double
          description: This is the cost of chat interactions.
        total:
          type: number
          format: double
          description: This is the total cost of the call.
        llmPromptTokens:
          type: number
          format: double
          description: This is the LLM prompt tokens used for the call.
        llmCompletionTokens:
          type: number
          format: double
          description: This is the LLM completion tokens used for the call.
        llmCachedPromptTokens:
          type: number
          format: double
          description: This is the LLM cached prompt tokens used for the call.
        ttsCharacters:
          type: number
          format: double
          description: This is the TTS characters used for the call.
        analysisCostBreakdown:
          $ref: '#/components/schemas/AnalysisCostBreakdown'
          description: This is the cost of the analysis.
      title: CostBreakdown
    AnalysisStructuredData:
      type: object
      properties: {}
      description: >-
        This is the structured data extracted from the call. Customize by
        setting `assistant.analysisPlan.structuredDataPrompt` and/or
        `assistant.analysisPlan.structuredDataSchema`.
      title: AnalysisStructuredData
    AnalysisStructuredDataMultiItems:
      type: object
      properties: {}
      title: AnalysisStructuredDataMultiItems
    Analysis:
      type: object
      properties:
        summary:
          type: string
          description: >-
            This is the summary of the call. Customize by setting
            `assistant.analysisPlan.summaryPrompt`.
        structuredData:
          $ref: '#/components/schemas/AnalysisStructuredData'
          description: >-
            This is the structured data extracted from the call. Customize by
            setting `assistant.analysisPlan.structuredDataPrompt` and/or
            `assistant.analysisPlan.structuredDataSchema`.
        structuredDataMulti:
          type: array
          items:
            $ref: '#/components/schemas/AnalysisStructuredDataMultiItems'
          description: >-
            This is the structured data catalog of the call. Customize by
            setting `assistant.analysisPlan.structuredDataMultiPlan`.
        successEvaluation:
          type: string
          description: >-
            This is the evaluation of the call. Customize by setting
            `assistant.analysisPlan.successEvaluationPrompt` and/or
            `assistant.analysisPlan.successEvaluationRubric`.
      title: Analysis
    MonitorResult:
      type: object
      properties:
        monitorId:
          type: string
        filterPassed:
          type: boolean
      required:
        - monitorId
        - filterPassed
      title: MonitorResult
    Monitor:
      type: object
      properties:
        monitors:
          type: array
          items:
            $ref: '#/components/schemas/MonitorResult'
        listenUrl:
          type: string
          description: >-
            This is the URL where the assistant's calls can be listened to in
            real-time. To enable, set `assistant.monitorPlan.listenEnabled` to
            `true`.
        controlUrl:
          type: string
          description: >-
            This is the URL where the assistant's calls can be controlled in
            real-time. To enable, set `assistant.monitorPlan.controlEnabled` to
            `true`.
      title: Monitor
    RecordingConsentType:
      type: object
      properties: {}
      description: This is the type of recording consent.
      title: RecordingConsentType
    RecordingConsent:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/RecordingConsentType'
          description: This is the type of recording consent.
        grantedAt:
          type: string
          format: date-time
          description: |-
            This is the date and time the recording consent was granted.
            If not specified, it means the recording consent was not granted.
      required:
        - type
      title: RecordingConsent
    Compliance:
      type: object
      properties:
        recordingConsent:
          $ref: '#/components/schemas/RecordingConsent'
          description: >-
            This is the recording consent of the call. Configure in
            `assistant.compliancePlan.recordingConsentPlan`.
      title: Compliance
    ConversationNodeType:
      type: string
      enum:
        - conversation
      description: >-
        This is the Conversation node. This can be used to start a conversation
        with the customer.


        The flow is:

        - Workflow starts the conversation node

        - Model is active with the `prompt` and global context.

        - Model will call a tool to exit this node.

        - Workflow will extract variables from the conversation.

        - Workflow continues.
      title: ConversationNodeType
    ConversationNodeModel:
      oneOf:
        - $ref: '#/components/schemas/WorkflowOpenAIModel'
        - $ref: '#/components/schemas/WorkflowAnthropicModel'
        - $ref: '#/components/schemas/WorkflowAnthropicBedrockModel'
        - $ref: '#/components/schemas/WorkflowGoogleModel'
        - $ref: '#/components/schemas/WorkflowCustomModel'
      description: |-
        This is the model for the node.

        This overrides `workflow.model`.
      title: ConversationNodeModel
    ConversationNodeTranscriber:
      oneOf:
        - $ref: '#/components/schemas/AssemblyAITranscriber'
        - $ref: '#/components/schemas/AzureSpeechTranscriber'
        - $ref: '#/components/schemas/CustomTranscriber'
        - $ref: '#/components/schemas/DeepgramTranscriber'
        - $ref: '#/components/schemas/ElevenLabsTranscriber'
        - $ref: '#/components/schemas/GladiaTranscriber'
        - $ref: '#/components/schemas/GoogleTranscriber'
        - $ref: '#/components/schemas/SpeechmaticsTranscriber'
        - $ref: '#/components/schemas/TalkscriberTranscriber'
        - $ref: '#/components/schemas/OpenAITranscriber'
        - $ref: '#/components/schemas/CartesiaTranscriber'
        - $ref: '#/components/schemas/SonioxTranscriber'
      description: |-
        This is the transcriber for the node.

        This overrides `workflow.transcriber`.
      title: ConversationNodeTranscriber
    ConversationNodeVoice:
      oneOf:
        - $ref: '#/components/schemas/AzureVoice'
        - $ref: '#/components/schemas/CartesiaVoice'
        - $ref: '#/components/schemas/CustomVoice'
        - $ref: '#/components/schemas/DeepgramVoice'
        - $ref: '#/components/schemas/ElevenLabsVoice'
        - $ref: '#/components/schemas/HumeVoice'
        - $ref: '#/components/schemas/LMNTVoice'
        - $ref: '#/components/schemas/NeuphonicVoice'
        - $ref: '#/components/schemas/OpenAIVoice'
        - $ref: '#/components/schemas/PlayHTVoice'
        - $ref: '#/components/schemas/WellSaidVoice'
        - $ref: '#/components/schemas/RimeAIVoice'
        - $ref: '#/components/schemas/SmallestAIVoice'
        - $ref: '#/components/schemas/TavusVoice'
        - $ref: '#/components/schemas/VapiVoice'
        - $ref: '#/components/schemas/SesameVoice'
        - $ref: '#/components/schemas/InworldVoice'
        - $ref: '#/components/schemas/MinimaxVoice'
      description: |-
        This is the voice for the node.

        This overrides `workflow.voice`.
      title: ConversationNodeVoice
    ConversationNodeToolsItems:
      oneOf:
        - $ref: '#/components/schemas/CreateApiRequestToolDTO'
        - $ref: '#/components/schemas/CreateBashToolDTO'
        - $ref: '#/components/schemas/CreateCodeToolDTO'
        - $ref: '#/components/schemas/CreateComputerToolDTO'
        - $ref: '#/components/schemas/CreateDtmfToolDTO'
        - $ref: '#/components/schemas/CreateEndCallToolDTO'
        - $ref: '#/components/schemas/CreateFunctionToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
        - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
        - $ref: '#/components/schemas/CreateHandoffToolDTO'
        - $ref: '#/components/schemas/CreateMcpToolDTO'
        - $ref: '#/components/schemas/CreateQueryToolDTO'
        - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
        - $ref: '#/components/schemas/CreateSmsToolDTO'
        - $ref: '#/components/schemas/CreateTextEditorToolDTO'
        - $ref: '#/components/schemas/CreateTransferCallToolDTO'
        - $ref: '#/components/schemas/CreateSipRequestToolDTO'
        - $ref: '#/components/schemas/CreateVoicemailToolDTO'
      title: ConversationNodeToolsItems
    GlobalNodePlan:
      type: object
      properties:
        enabled:
          type: boolean
          default: false
          description: |-
            This is the flag to determine if this node is a global node

            @default false
        enterCondition:
          type: string
          default: ''
          description: >-
            This is the condition that will be checked to determine if the
            global node should be executed.


            @default ''
      title: GlobalNodePlan
    ConversationNodeMetadata:
      type: object
      properties: {}
      description: This is for metadata you want to store on the task.
      title: ConversationNodeMetadata
    ConversationNode:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/ConversationNodeType'
          description: >-
            This is the Conversation node. This can be used to start a
            conversation with the customer.


            The flow is:

            - Workflow starts the conversation node

            - Model is active with the `prompt` and global context.

            - Model will call a tool to exit this node.

            - Workflow will extract variables from the conversation.

            - Workflow continues.
        model:
          $ref: '#/components/schemas/ConversationNodeModel'
          description: |-
            This is the model for the node.

            This overrides `workflow.model`.
        transcriber:
          $ref: '#/components/schemas/ConversationNodeTranscriber'
          description: |-
            This is the transcriber for the node.

            This overrides `workflow.transcriber`.
        voice:
          $ref: '#/components/schemas/ConversationNodeVoice'
          description: |-
            This is the voice for the node.

            This overrides `workflow.voice`.
        tools:
          type: array
          items:
            $ref: '#/components/schemas/ConversationNodeToolsItems'
          description: >-
            These are the tools that the conversation node can use during the
            call. To use existing tools, use `toolIds`.


            Both `tools` and `toolIds` can be used together.
        toolIds:
          type: array
          items:
            type: string
          description: >-
            These are the tools that the conversation node can use during the
            call. To use transient tools, use `tools`.


            Both `tools` and `toolIds` can be used together.
        prompt:
          type: string
        globalNodePlan:
          $ref: '#/components/schemas/GlobalNodePlan'
          description: This is the plan for the global node.
        variableExtractionPlan:
          $ref: '#/components/schemas/VariableExtractionPlan'
          description: >-
            This is the plan that controls the variable extraction from the
            user's responses.


            Usage:

            Use `schema` to specify what you want to extract from the user's
            responses.

            ```json

            {
              "schema": {
                "type": "object",
                "properties": {
                  "user": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string"
                      },
                      "age": {
                        "type": "number"
                      }
                    }
                  }
                }
              }
            }

            ```


            This will be extracted as `{{ user.name }}` and `{{ user.age }}`
            respectively.


            (Optional) Use `aliases` to create new variables.


            ```json

            {
              "aliases": [
                {
                  "key": "userAge",
                  "value": "{{user.age}}"
                },
                {
                  "key": "userName",
                  "value": "{{user.name}}"
                }
              ]
            }

            ```


            This will be extracted as `{{ userAge }}` and `{{ userName }}`
            respectively.


            Note: The `schema` field is required for Conversation nodes if you
            want to extract variables from the user's responses. `aliases` is
            just a convenience.
        name:
          type: string
        isStart:
          type: boolean
          description: This is whether or not the node is the start of the workflow.
        metadata:
          $ref: '#/components/schemas/ConversationNodeMetadata'
          description: This is for metadata you want to store on the task.
      required:
        - type
        - name
      title: ConversationNode
    ToolNodeType:
      type: string
      enum:
        - tool
      description: >-
        This is the Tool node. This can be used to call a tool in your workflow.


        The flow is:

        - Workflow starts the tool node

        - Model is called to extract parameters needed by the tool from the
        conversation history

        - Tool is called with the parameters

        - Server returns a response

        - Workflow continues with the response
      title: ToolNodeType
    ToolNodeTool:
      oneOf:
        - $ref: '#/components/schemas/CreateApiRequestToolDTO'
        - $ref: '#/components/schemas/CreateBashToolDTO'
        - $ref: '#/components/schemas/CreateCodeToolDTO'
        - $ref: '#/components/schemas/CreateComputerToolDTO'
        - $ref: '#/components/schemas/CreateDtmfToolDTO'
        - $ref: '#/components/schemas/CreateEndCallToolDTO'
        - $ref: '#/components/schemas/CreateFunctionToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO'
        - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO'
        - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO'
        - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO'
        - $ref: '#/components/schemas/CreateHandoffToolDTO'
        - $ref: '#/components/schemas/CreateMcpToolDTO'
        - $ref: '#/components/schemas/CreateQueryToolDTO'
        - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO'
        - $ref: '#/components/schemas/CreateSmsToolDTO'
        - $ref: '#/components/schemas/CreateTextEditorToolDTO'
        - $ref: '#/components/schemas/CreateTransferCallToolDTO'
        - $ref: '#/components/schemas/CreateSipRequestToolDTO'
        - $ref: '#/components/schemas/CreateVoicemailToolDTO'
      description: >-
        This is the tool to call. To use an existing tool, send `toolId`
        instead.
      title: ToolNodeTool
    ToolNodeMetadata:
      type: object
      properties: {}
      description: This is for metadata you want to store on the task.
      title: ToolNodeMetadata
    ToolNode:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/ToolNodeType'
          description: >-
            This is the Tool node. This can be used to call a tool in your
            workflow.


            The flow is:

            - Workflow starts the tool node

            - Model is called to extract parameters needed by the tool from the
            conversation history

            - Tool is called with the parameters

            - Server returns a response

            - Workflow continues with the response
        tool:
          $ref: '#/components/schemas/ToolNodeTool'
          description: >-
            This is the tool to call. To use an existing tool, send `toolId`
            instead.
        toolId:
          type: string
          description: >-
            This is the tool to call. To use a transient tool, send `tool`
            instead.
        name:
          type: string
        isStart:
          type: boolean
          description: This is whether or not the node is the start of the workflow.
        metadata:
          $ref: '#/components/schemas/ToolNodeMetadata'
          description: This is for metadata you want to store on the task.
      required:
        - type
        - name
      title: ToolNode
    CreateWorkflowDtoNodesItems:
      oneOf:
        - $ref: '#/components/schemas/ConversationNode'
        - $ref: '#/components/schemas/ToolNode'
      title: CreateWorkflowDtoNodesItems
    CreateWorkflowDtoModel:
      oneOf:
        - $ref: '#/components/schemas/WorkflowOpenAIModel'
        - $ref: '#/components/schemas/WorkflowAnthropicModel'
        - $ref: '#/components/schemas/WorkflowAnthropicBedrockModel'
        - $ref: '#/components/schemas/WorkflowGoogleModel'
        - $ref: '#/components/schemas/WorkflowCustomModel'
      description: |-
        This is the model for the workflow.

        This can be overridden at node level using `nodes[n].model`.
      title: CreateWorkflowDtoModel
    CreateWorkflowDtoTranscriber:
      oneOf:
        - $ref: '#/components/schemas/AssemblyAITranscriber'
        - $ref: '#/components/schemas/AzureSpeechTranscriber'
        - $ref: '#/components/schemas/CustomTranscriber'
        - $ref: '#/components/schemas/DeepgramTranscriber'
        - $ref: '#/components/schemas/ElevenLabsTranscriber'
        - $ref: '#/components/schemas/GladiaTranscriber'
        - $ref: '#/components/schemas/GoogleTranscriber'
        - $ref: '#/components/schemas/SpeechmaticsTranscriber'
        - $ref: '#/components/schemas/TalkscriberTranscriber'
        - $ref: '#/components/schemas/OpenAITranscriber'
        - $ref: '#/components/schemas/CartesiaTranscriber'
        - $ref: '#/components/schemas/SonioxTranscriber'
      description: |-
        This is the transcriber for the workflow.

        This can be overridden at node level using `nodes[n].transcriber`.
      title: CreateWorkflowDtoTranscriber
    CreateWorkflowDtoVoice:
      oneOf:
        - $ref: '#/components/schemas/AzureVoice'
        - $ref: '#/components/schemas/CartesiaVoice'
        - $ref: '#/components/schemas/CustomVoice'
        - $ref: '#/components/schemas/DeepgramVoice'
        - $ref: '#/components/schemas/ElevenLabsVoice'
        - $ref: '#/components/schemas/HumeVoice'
        - $ref: '#/components/schemas/LMNTVoice'
        - $ref: '#/components/schemas/NeuphonicVoice'
        - $ref: '#/components/schemas/OpenAIVoice'
        - $ref: '#/components/schemas/PlayHTVoice'
        - $ref: '#/components/schemas/WellSaidVoice'
        - $ref: '#/components/schemas/RimeAIVoice'
        - $ref: '#/components/schemas/SmallestAIVoice'
        - $ref: '#/components/schemas/TavusVoice'
        - $ref: '#/components/schemas/VapiVoice'
        - $ref: '#/components/schemas/SesameVoice'
        - $ref: '#/components/schemas/InworldVoice'
        - $ref: '#/components/schemas/MinimaxVoice'
      description: |-
        This is the voice for the workflow.

        This can be overridden at node level using `nodes[n].voice`.
      title: CreateWorkflowDtoVoice
    CreateWorkflowDtoBackgroundSound0:
      type: string
      enum:
        - 'off'
        - office
      title: CreateWorkflowDtoBackgroundSound0
    CreateWorkflowDtoBackgroundSound:
      oneOf:
        - $ref: '#/components/schemas/CreateWorkflowDtoBackgroundSound0'
        - type: string
          format: uri
      description: >-
        This is the background sound in the call. Default for phone calls is
        'office' and default for web calls is 'off'.

        You can also provide a custom sound by providing a URL to an audio file.
      title: CreateWorkflowDtoBackgroundSound
    CallHookModelResponseTimeoutOn:
      type: string
      enum:
        - model.response.timeout
      description: This is the event that triggers this hook
      title: CallHookModelResponseTimeoutOn
    CallHookModelResponseTimeoutDoItems:
      oneOf:
        - $ref: '#/components/schemas/SayHookAction'
        - $ref: '#/components/schemas/ToolCallHookAction'
        - $ref: '#/components/schemas/MessageAddHookAction'
      title: CallHookModelResponseTimeoutDoItems
    CallHookModelResponseTimeout:
      type: object
      properties:
        'on':
          $ref: '#/components/schemas/CallHookModelResponseTimeoutOn'
          description: This is the event that triggers this hook
        do:
          type: array
          items:
            $ref: '#/components/schemas/CallHookModelResponseTimeoutDoItems'
          description: This is the set of actions to perform when the hook triggers
      required:
        - 'on'
        - do
      title: CallHookModelResponseTimeout
    CreateWorkflowDtoHooksItems:
      oneOf:
        - $ref: '#/components/schemas/CallHookCallEnding'
        - $ref: '#/components/schemas/CallHookAssistantSpeechInterrupted'
        - $ref: '#/components/schemas/CallHookCustomerSpeechInterrupted'
        - $ref: '#/components/schemas/CallHookCustomerSpeechTimeout'
        - $ref: '#/components/schemas/CallHookModelResponseTimeout'
      title: CreateWorkflowDtoHooksItems
    CreateWorkflowDtoCredentialsItems:
      oneOf:
        - type: object
          properties:
            provider:
              type: string
              enum:
                - 11labs
              description: 'Discriminator value: 11labs'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: 11labs variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - anthropic
              description: 'Discriminator value: anthropic'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: anthropic variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - anthropic-bedrock
              description: 'Discriminator value: anthropic-bedrock'
            region:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAnthropicBedrockRegion
              description: AWS region where Bedrock is configured.
            authenticationPlan:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAnthropicBedrockAuthenticationPlan
              description: >-
                Authentication method - either direct IAM credentials or
                cross-account role assumption.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - region
            - authenticationPlan
          description: anthropic-bedrock variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - anyscale
              description: 'Discriminator value: anyscale'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: anyscale variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - assembly-ai
              description: 'Discriminator value: assembly-ai'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: assembly-ai variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - azure-openai
              description: 'Discriminator value: azure-openai'
            region:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAzureOpenaiRegion
            models:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAzureOpenaiModels
            openAIKey:
              type: string
              description: This is not returned in the API.
            ocpApimSubscriptionKey:
              type: string
              description: This is not returned in the API.
            openAIEndpoint:
              type: string
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - region
            - models
            - openAIKey
            - openAIEndpoint
          description: azure-openai variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - azure
              description: 'Discriminator value: azure'
            service:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAzureService
              description: This is the service being used in Azure.
            region:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingAzureRegion
              description: This is the region of the Azure resource.
            apiKey:
              type: string
              description: This is not returned in the API.
            fallbackIndex:
              type: number
              format: double
              description: >-
                This is the order in which this storage provider is tried during
                upload retries. Lower numbers are tried first in increasing
                order.
            bucketPlan:
              $ref: '#/components/schemas/AzureBlobStorageBucketPlan'
              description: >-
                This is the bucket plan that can be provided to store call
                artifacts in Azure Blob Storage.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - service
          description: azure variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - byo-sip-trunk
              description: 'Discriminator value: byo-sip-trunk'
            gateways:
              type: array
              items:
                $ref: '#/components/schemas/SipTrunkGateway'
              description: This is the list of SIP trunk's gateways.
            outboundAuthenticationPlan:
              $ref: '#/components/schemas/SipTrunkOutboundAuthenticationPlan'
              description: >-
                This can be used to configure the outbound authentication if
                required by the SIP trunk.
            outboundLeadingPlusEnabled:
              type: boolean
              description: >-
                This ensures the outbound origination attempts have a leading
                plus. Defaults to false to match conventional telecom behavior.


                Usage:

                - Vonage/Twilio requires leading plus for all outbound calls.
                Set this to true.


                @default false
            techPrefix:
              type: string
              description: >-
                This can be used to configure the tech prefix on outbound calls.
                This is an advanced property.
            sipDiversionHeader:
              type: string
              description: >-
                This can be used to enable the SIP diversion header for
                authenticating the calling number if the SIP trunk supports it.
                This is an advanced property.
            sbcConfiguration:
              $ref: '#/components/schemas/SbcConfiguration'
              description: >-
                This is an advanced configuration for enterprise deployments.
                This uses the onprem SBC to trunk into the SIP trunk's
                `gateways`, rather than the managed SBC provided by Vapi.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - gateways
          description: byo-sip-trunk variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - cartesia
              description: 'Discriminator value: cartesia'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: cartesia variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - cerebras
              description: 'Discriminator value: cerebras'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: cerebras variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - cloudflare
              description: 'Discriminator value: cloudflare'
            accountId:
              type: string
              description: Cloudflare Account Id.
            apiKey:
              type: string
              description: Cloudflare API Key / Token.
            accountEmail:
              type: string
              description: Cloudflare Account Email.
            fallbackIndex:
              type: number
              format: double
              description: >-
                This is the order in which this storage provider is tried during
                upload retries. Lower numbers are tried first in increasing
                order.
            bucketPlan:
              $ref: '#/components/schemas/CloudflareR2BucketPlan'
              description: >-
                This is the bucket plan that can be provided to store call
                artifacts in R2
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
          description: cloudflare variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - custom-llm
              description: 'Discriminator value: custom-llm'
            apiKey:
              type: string
              description: This is not returned in the API.
            authenticationPlan:
              $ref: '#/components/schemas/OAuth2AuthenticationPlan'
              description: >-
                This is the authentication plan. Currently supports OAuth2 RFC
                6749. To use Bearer authentication, use apiKey
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: custom-llm variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - deepgram
              description: 'Discriminator value: deepgram'
            apiKey:
              type: string
              description: This is not returned in the API.
            apiUrl:
              type: string
              description: >-
                This can be used to point to an onprem Deepgram instance.
                Defaults to api.deepgram.com.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: deepgram variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - deepinfra
              description: 'Discriminator value: deepinfra'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: deepinfra variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - deep-seek
              description: 'Discriminator value: deep-seek'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: deep-seek variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - gcp
              description: 'Discriminator value: gcp'
            fallbackIndex:
              type: number
              format: double
              description: >-
                This is the order in which this storage provider is tried during
                upload retries. Lower numbers are tried first in increasing
                order.
            gcpKey:
              $ref: '#/components/schemas/GcpKey'
              description: >-
                This is the GCP key. This is the JSON that can be generated in
                the Google Cloud Console at
                https://console.cloud.google.com/iam-admin/serviceaccounts/details/<service-account-id>/keys.


                The schema is identical to the JSON that GCP outputs.
            region:
              type: string
              description: This is the region of the GCP resource.
            bucketPlan:
              $ref: '#/components/schemas/BucketPlan'
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - gcpKey
          description: gcp variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - gladia
              description: 'Discriminator value: gladia'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: gladia variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - gohighlevel
              description: 'Discriminator value: gohighlevel'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: gohighlevel variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - google
              description: 'Discriminator value: google'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: google variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - groq
              description: 'Discriminator value: groq'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: groq variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - inflection-ai
              description: 'Discriminator value: inflection-ai'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: inflection-ai variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - langfuse
              description: 'Discriminator value: langfuse'
            publicKey:
              type: string
              description: 'The public key for Langfuse project. Eg: pk-lf-...'
            apiKey:
              type: string
              description: >-
                The secret key for Langfuse project. Eg: sk-lf-... .This is not
                returned in the API.
            apiUrl:
              type: string
              description: >-
                The host URL for Langfuse project. Eg:
                https://cloud.langfuse.com
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - publicKey
            - apiKey
            - apiUrl
          description: langfuse variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - lmnt
              description: 'Discriminator value: lmnt'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: lmnt variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - make
              description: 'Discriminator value: make'
            teamId:
              type: string
              description: Team ID
            region:
              type: string
              description: 'Region of your application. For example: eu1, eu2, us1, us2'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - teamId
            - region
            - apiKey
          description: make variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - openai
              description: 'Discriminator value: openai'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: openai variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - openrouter
              description: 'Discriminator value: openrouter'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: openrouter variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - perplexity-ai
              description: 'Discriminator value: perplexity-ai'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: perplexity-ai variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - playht
              description: 'Discriminator value: playht'
            apiKey:
              type: string
              description: This is not returned in the API.
            userId:
              type: string
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
            - userId
          description: playht variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - rime-ai
              description: 'Discriminator value: rime-ai'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: rime-ai variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - runpod
              description: 'Discriminator value: runpod'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: runpod variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - s3
              description: 'Discriminator value: s3'
            awsAccessKeyId:
              type: string
              description: AWS access key ID.
            awsSecretAccessKey:
              type: string
              description: AWS access key secret. This is not returned in the API.
            region:
              type: string
              description: AWS region in which the S3 bucket is located.
            s3BucketName:
              type: string
              description: AWS S3 bucket name.
            s3PathPrefix:
              type: string
              description: The path prefix for the uploaded recording. Ex. "recordings/"
            fallbackIndex:
              type: number
              format: double
              description: >-
                This is the order in which this storage provider is tried during
                upload retries. Lower numbers are tried first in increasing
                order.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - awsAccessKeyId
            - awsSecretAccessKey
            - region
            - s3BucketName
            - s3PathPrefix
          description: s3 variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - supabase
              description: 'Discriminator value: supabase'
            fallbackIndex:
              type: number
              format: double
              description: >-
                This is the order in which this storage provider is tried during
                upload retries. Lower numbers are tried first in increasing
                order.
            bucketPlan:
              $ref: '#/components/schemas/SupabaseBucketPlan'
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
          description: supabase variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - smallest-ai
              description: 'Discriminator value: smallest-ai'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: smallest-ai variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - tavus
              description: 'Discriminator value: tavus'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: tavus variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - together-ai
              description: 'Discriminator value: together-ai'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: together-ai variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - twilio
              description: 'Discriminator value: twilio'
            authToken:
              type: string
              description: This is not returned in the API.
            apiKey:
              type: string
              description: This is not returned in the API.
            apiSecret:
              type: string
              description: This is not returned in the API.
            accountSid:
              type: string
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - accountSid
          description: twilio variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - vonage
              description: 'Discriminator value: vonage'
            apiSecret:
              type: string
              description: This is not returned in the API.
            apiKey:
              type: string
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiSecret
            - apiKey
          description: vonage variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - webhook
              description: 'Discriminator value: webhook'
            authenticationPlan:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingWebhookAuthenticationPlan
              description: >-
                This is the authentication plan. Supports OAuth2 RFC 6749, HMAC
                signing, and Bearer authentication.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - authenticationPlan
          description: webhook variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - custom-credential
              description: 'Discriminator value: custom-credential'
            authenticationPlan:
              $ref: >-
                #/components/schemas/CreateWorkflowDtoCredentialsItemsDiscriminatorMappingCustomCredentialAuthenticationPlan
              description: >-
                This is the authentication plan. Supports OAuth2 RFC 6749, HMAC
                signing, and Bearer authentication.
            encryptionPlan:
              $ref: '#/components/schemas/PublicKeyEncryptionPlan'
              description: >-
                This is the encryption plan for encrypting sensitive data.
                Currently supports public-key encryption.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - authenticationPlan
          description: custom-credential variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - xai
              description: 'Discriminator value: xai'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: xai variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - neuphonic
              description: 'Discriminator value: neuphonic'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: neuphonic variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - hume
              description: 'Discriminator value: hume'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: hume variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - mistral
              description: 'Discriminator value: mistral'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: mistral variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - speechmatics
              description: 'Discriminator value: speechmatics'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: speechmatics variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - soniox
              description: 'Discriminator value: soniox'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: soniox variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - trieve
              description: 'Discriminator value: trieve'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: trieve variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - google.calendar.oauth2-client
              description: 'Discriminator value: google.calendar.oauth2-client'
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
          description: google.calendar.oauth2-client variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - google.calendar.oauth2-authorization
              description: 'Discriminator value: google.calendar.oauth2-authorization'
            authorizationId:
              type: string
              description: The authorization ID for the OAuth2 authorization
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - authorizationId
          description: google.calendar.oauth2-authorization variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - google.sheets.oauth2-authorization
              description: 'Discriminator value: google.sheets.oauth2-authorization'
            authorizationId:
              type: string
              description: The authorization ID for the OAuth2 authorization
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - authorizationId
          description: google.sheets.oauth2-authorization variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - slack.oauth2-authorization
              description: 'Discriminator value: slack.oauth2-authorization'
            authorizationId:
              type: string
              description: The authorization ID for the OAuth2 authorization
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - authorizationId
          description: slack.oauth2-authorization variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - ghl.oauth2-authorization
              description: 'Discriminator value: ghl.oauth2-authorization'
            authenticationSession:
              $ref: '#/components/schemas/Oauth2AuthenticationSession'
              description: This is the authentication session for the credential.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - authenticationSession
          description: ghl.oauth2-authorization variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - inworld
              description: 'Discriminator value: inworld'
            apiKey:
              type: string
              description: >-
                This is the Inworld Basic (Base64) authentication token. This is
                not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: inworld variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - minimax
              description: 'Discriminator value: minimax'
            apiKey:
              type: string
              description: This is not returned in the API.
            groupId:
              type: string
              description: This is the Minimax Group ID.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
            - groupId
          description: minimax variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - wellsaid
              description: 'Discriminator value: wellsaid'
            apiKey:
              type: string
              description: This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - apiKey
          description: wellsaid variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - email
              description: 'Discriminator value: email'
            email:
              type: string
              description: The recipient email address for alerts
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - email
          description: email variant
        - type: object
          properties:
            provider:
              type: string
              enum:
                - slack-webhook
              description: 'Discriminator value: slack-webhook'
            webhookUrl:
              type: string
              description: >-
                Slack incoming webhook URL. See
                https://api.slack.com/messaging/webhooks for setup instructions.
                This is not returned in the API.
            name:
              type: string
              description: This is the name of credential. This is just for your reference.
          required:
            - provider
            - webhookUrl
          description: slack-webhook variant
      discriminator:
        propertyName: provider
      title: CreateWorkflowDtoCredentialsItems
    CreateWorkflowDtoVoicemailDetection0:
      type: string
      enum:
        - 'off'
      title: CreateWorkflowDtoVoicemailDetection0
    CreateWorkflowDtoVoicemailDetection:
      oneOf:
        - $ref: '#/components/schemas/CreateWorkflowDtoVoicemailDetection0'
        - $ref: '#/components/schemas/GoogleVoicemailDetectionPlan'
        - $ref: '#/components/schemas/OpenAIVoicemailDetectionPlan'
        - $ref: '#/components/schemas/TwilioVoicemailDetectionPlan'
        - $ref: '#/components/schemas/VapiVoicemailDetectionPlan'
      description: This is the voicemail detection plan for the workflow.
      title: CreateWorkflowDtoVoicemailDetection
    AiEdgeConditionType:
      type: string
      enum:
        - ai
      title: AiEdgeConditionType
    AIEdgeCondition:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/AiEdgeConditionType'
        prompt:
          type: string
          description: >-
            This is the prompt for the AI edge condition. It should evaluate to
            a boolean.
      required:
        - type
        - prompt
      title: AIEdgeCondition
    EdgeCondition:
      oneOf:
        - $ref: '#/components/schemas/AIEdgeCondition'
      title: EdgeCondition
    EdgeMetadata:
      type: object
      properties: {}
      description: This is for metadata you want to store on the edge.
      title: EdgeMetadata
    Edge:
      type: object
      properties:
        condition:
          $ref: '#/components/schemas/EdgeCondition'
        from:
          type: string
        to:
          type: string
        metadata:
          $ref: '#/components/schemas/EdgeMetadata'
          description: This is for metadata you want to store on the edge.
      required:
        - from
        - to
      title: Edge
    CreateWorkflowDTO:
      type: object
      properties:
        nodes:
          type: array
          items:
            $ref: '#/components/schemas/CreateWorkflowDtoNodesItems'
        model:
          $ref: '#/components/schemas/CreateWorkflowDtoModel'
          description: |-
            This is the model for the workflow.

            This can be overridden at node level using `nodes[n].model`.
        transcriber:
          $ref: '#/components/schemas/CreateWorkflowDtoTranscriber'
          description: |-
            This is the transcriber for the workflow.

            This can be overridden at node level using `nodes[n].transcriber`.
        voice:
          $ref: '#/components/schemas/CreateWorkflowDtoVoice'
          description: |-
            This is the voice for the workflow.

            This can be overridden at node level using `nodes[n].voice`.
        observabilityPlan:
          $ref: '#/components/schemas/LangfuseObservabilityPlan'
          description: |-
            This is the plan for observability of workflow's calls.

            Currently, only Langfuse is supported.
        backgroundSound:
          $ref: '#/components/schemas/CreateWorkflowDtoBackgroundSound'
          description: >-
            This is the background sound in the call. Default for phone calls is
            'office' and default for web calls is 'off'.

            You can also provide a custom sound by providing a URL to an audio
            file.
        hooks:
          type: array
          items:
            $ref: '#/components/schemas/CreateWorkflowDtoHooksItems'
          description: This is a set of actions that will be performed on certain events.
        credentials:
          type: array
          items:
            $ref: '#/components/schemas/CreateWorkflowDtoCredentialsItems'
          description: >-
            These are dynamic credentials that will be used for the workflow
            calls. By default, all the credentials are available for use in the
            call but you can supplement an additional credentials using this.
            Dynamic credentials override existing credentials.
        voicemailDetection:
          $ref: '#/components/schemas/CreateWorkflowDtoVoicemailDetection'
          description: This is the voicemail detection plan for the workflow.
        maxDurationSeconds:
          type: number
          format: double
          description: >-
            This is the maximum duration of the call in seconds.


            After this duration, the call will automatically end.


            Default is 1800 (30 minutes), max is 43200 (12 hours), and min is 10
            seconds.
        name:
          type: string
        edges:
          type: array
          items:
            $ref: '#/components/schemas/Edge'
        globalPrompt:
          type: string
        server:
          $ref: '#/components/schemas/Server'
          description: >-
            This is where Vapi will send webhooks. You can find all webhooks
            available along with their shape in ServerMessage schema.


            The order of precedence is:


            1. tool.server

            2. workflow.server / assistant.server

            3. phoneNumber.server

            4. org.server
        compliancePlan:
          $ref: '#/components/schemas/CompliancePlan'
          description: >-
            This is the compliance plan for the workflow. It allows you to
            configure HIPAA and other compliance settings.
        analysisPlan:
          $ref: '#/components/schemas/AnalysisPlan'
          description: >-
            This is the plan for analysis of workflow's calls. Stored in
            `call.analysis`.
        artifactPlan:
          $ref: '#/components/schemas/ArtifactPlan'
          description: >-
            This is the plan for artifacts generated during workflow's calls.
            Stored in `call.artifact`.
        startSpeakingPlan:
          $ref: '#/components/schemas/StartSpeakingPlan'
          description: >-
            This is the plan for when the workflow nodes should start talking.


            You should configure this if you're running into these issues:

            - The assistant is too slow to start talking after the customer is
            done speaking.

            - The assistant is too fast to start talking after the customer is
            done speaking.

            - The assistant is so fast that it's actually interrupting the
            customer.
        stopSpeakingPlan:
          $ref: '#/components/schemas/StopSpeakingPlan'
          description: >-
            This is the plan for when workflow nodes should stop talking on
            customer interruption.


            You should configure this if you're running into these issues:

            - The assistant is too slow to recognize customer's interruption.

            - The assistant is too fast to recognize customer's interruption.

            - The assistant is getting interrupted by phrases that are just
            acknowledgments.

            - The assistant is getting interrupted by background noises.

            - The assistant is not properly stopping -- it starts talking right
            after getting interrupted.
        monitorPlan:
          $ref: '#/components/schemas/MonitorPlan'
          description: >-
            This is the plan for real-time monitoring of the workflow's calls.


            Usage:

            - To enable live listening of the workflow's calls, set
            `monitorPlan.listenEnabled` to `true`.

            - To enable live control of the workflow's calls, set
            `monitorPlan.controlEnabled` to `true`.
        backgroundSpeechDenoisingPlan:
          $ref: '#/components/schemas/BackgroundSpeechDenoisingPlan'
          description: >-
            This enables filtering of noise and background speech while the user
            is talking.


            Features:

            - Smart denoising using Krisp

            - Fourier denoising


            Both can be used together. Order of precedence:

            - Smart denoising

            - Fourier denoising
        credentialIds:
          type: array
          items:
            type: string
          description: >-
            These are the credentials that will be used for the workflow calls.
            By default, all the credentials are available for use in the call
            but you can provide a subset using this.
        keypadInputPlan:
          $ref: '#/components/schemas/KeypadInputPlan'
          description: This is the plan for keypad input handling during workflow calls.
        voicemailMessage:
          type: string
          description: >-
            This is the message that the assistant will say if the call is
            forwarded to voicemail.


            If unspecified, it will hang up.
      required:
        - nodes
        - name
        - edges
      title: CreateWorkflowDTO
    WorkflowOverridesVariableValues:
      type: object
      properties: {}
      description: >-
        These are values that will be used to replace the template variables in
        the workflow messages and other text-based fields.

        This uses LiquidJS syntax.
        https://liquidjs.com/tutorials/intro-to-liquid.html


        So for example, `{{ name }}` will be replaced with the value of `name`
        in `variableValues`.

        `{{"now" | date: "%b %d, %Y, %I:%M %p", "America/New_York"}}` will be
        replaced with the current date and time in New York.
         Some VAPI reserved defaults:
         - *customer* - the customer object
      title: WorkflowOverridesVariableValues
    WorkflowOverrides:
      type: object
      properties:
        variableValues:
          $ref: '#/components/schemas/WorkflowOverridesVariableValues'
          description: >-
            These are values that will be used to replace the template variables
            in the workflow messages and other text-based fields.

            This uses LiquidJS syntax.
            https://liquidjs.com/tutorials/intro-to-liquid.html


            So for example, `{{ name }}` will be replaced with the value of
            `name` in `variableValues`.

            `{{"now" | date: "%b %d, %Y, %I:%M %p", "America/New_York"}}` will
            be replaced with the current date and time in New York.
             Some VAPI reserved defaults:
             - *customer* - the customer object
      title: WorkflowOverrides
    ImportTwilioPhoneNumberDtoFallbackDestination:
      oneOf:
        - $ref: '#/components/schemas/TransferDestinationNumber'
        - $ref: '#/components/schemas/TransferDestinationSip'
      description: >-
        This is the fallback destination an inbound call will be transferred to
        if:

        1. `assistantId` is not set

        2. `squadId` is not set

        3. and, `assistant-request` message to the `serverUrl` fails


        If this is not set and above conditions are met, the inbound call is
        hung up with an error message.
      title: ImportTwilioPhoneNumberDtoFallbackDestination
    ImportTwilioPhoneNumberDtoHooksItems:
      oneOf:
        - $ref: '#/components/schemas/PhoneNumberHookCallRinging'
        - $ref: '#/components/schemas/PhoneNumberHookCallEnding'
      title: ImportTwilioPhoneNumberDtoHooksItems
    ImportTwilioPhoneNumberDTO:
      type: object
      properties:
        fallbackDestination:
          $ref: '#/components/schemas/ImportTwilioPhoneNumberDtoFallbackDestination'
          description: >-
            This is the fallback destination an inbound call will be transferred
            to if:

            1. `assistantId` is not set

            2. `squadId` is not set

            3. and, `assistant-request` message to the `serverUrl` fails


            If this is not set and above conditions are met, the inbound call is
            hung up with an error message.
        hooks:
          type: array
          items:
            $ref: '#/components/schemas/ImportTwilioPhoneNumberDtoHooksItems'
          description: >-
            This is the hooks that will be used for incoming calls to this phone
            number.
        smsEnabled:
          type: boolean
          default: true
          description: >-
            Controls whether Vapi sets the messaging webhook URL on the Twilio
            number during import.


            If set to `false`, Vapi will not update the Twilio messaging URL,
            leaving it as is.

            If `true` or omitted (default), Vapi will configure both the voice
            and messaging URLs.


            @default true
        twilioPhoneNumber:
          type: string
          description: These are the digits of the phone number you own on your Twilio.
        twilioAccountSid:
          type: string
          description: >-
            This is your Twilio Account SID that will be used to handle this
            phone number.
        twilioAuthToken:
          type: string
          description: >-
            This is the Twilio Auth Token that will be used to handle this phone
            number.
        twilioApiKey:
          type: string
          description: >-
            This is the Twilio API Key that will be used to handle this phone
            number. If AuthToken is provided, this will be ignored.
        twilioApiSecret:
          type: string
          description: >-
            This is the Twilio API Secret that will be used to handle this phone
            number. If AuthToken is provided, this will be ignored.
        name:
          type: string
          description: >-
            This is the name of the phone number. This is just for your own
            reference.
        assistantId:
          type: string
          description: >-
            This is the assistant that will be used for incoming calls to this
            phone number.


            If neither `assistantId`, `squadId` nor `workflowId` is set,
            `assistant-request` will be sent to your Server URL. Check
            `ServerMessage` and `ServerMessageResponse` for the shape of the
            message and response that is expected.
        workflowId:
          type: string
          description: >-
            This is the workflow that will be used for incoming calls to this
            phone number.


            If neither `assistantId`, `squadId`, nor `workflowId` is set,
            `assistant-request` will be sent to your Server URL. Check
            `ServerMessage` and `ServerMessageResponse` for the shape of the
            message and response that is expected.
        squadId:
          type: string
          description: >-
            This is the squad that will be used for incoming calls to this phone
            number.


            If neither `assistantId`, `squadId`, nor `workflowId` is set,
            `assistant-request` will be sent to your Server URL. Check
            `ServerMessage` and `ServerMessageResponse` for the shape of the
            message and response that is expected.
        server:
          $ref: '#/components/schemas/Server'
          description: >-
            This is where Vapi will send webhooks. You can find all webhooks
            available along with their shape in ServerMessage schema.


            The order of precedence is:


            1. assistant.server

            2. phoneNumber.server

            3. org.server
      required:
        - twilioPhoneNumber
        - twilioAccountSid
      title: ImportTwilioPhoneNumberDTO
    SchedulePlan:
      type: object
      properties:
        earliestAt:
          type: string
          format: date-time
          description: >-
            This is the ISO 8601 date-time string of the earliest time the call
            can be scheduled.
        latestAt:
          type: string
          format: date-time
          description: >-
            This is the ISO 8601 date-time string of the latest time the call
            can be scheduled.
      required:
        - earliestAt
      title: SchedulePlan
    CallTransport:
      type: object
      properties: {}
      description: This is the transport of the call.
      title: CallTransport
    SubscriptionLimits:
      type: object
      properties:
        concurrencyBlocked:
          type: boolean
          default: false
          description: True if this call was blocked by the Call Concurrency limit
        concurrencyLimit:
          type: number
          format: double
          description: Account Call Concurrency limit
        remainingConcurrentCalls:
          type: number
          format: double
          description: >-
            Incremental number of concurrent calls that will be allowed,
            including this call
      title: SubscriptionLimits
    Call:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/CallType'
          description: This is the type of call.
        costs:
          type: array
          items:
            $ref: '#/components/schemas/CallCostsItems'
          description: These are the costs of individual components of the call in USD.
        messages:
          type: array
          items:
            $ref: '#/components/schemas/CallMessagesItems'
        phoneCallProvider:
          $ref: '#/components/schemas/CallPhoneCallProvider'
          description: |-
            This is the provider of the call.

            Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type.
        phoneCallTransport:
          $ref: '#/components/schemas/CallPhoneCallTransport'
          description: |-
            This is the transport of the phone call.

            Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type.
        status:
          $ref: '#/components/schemas/CallStatus'
          description: This is the status of the call.
        endedReason:
          $ref: '#/components/schemas/CallEndedReason'
          description: This is the explanation for how the call ended.
        endedMessage:
          type: string
          description: >-
            This is the message that adds more context to the ended reason. It
            can be used to provide potential error messages or warnings.
        destination:
          $ref: '#/components/schemas/CallDestination'
          description: >-
            This is the destination where the call ended up being transferred
            to. If the call was not transferred, this will be empty.
        id:
          type: string
          description: This is the unique identifier for the call.
        orgId:
          type: string
          description: This is the unique identifier for the org that this call belongs to.
        createdAt:
          type: string
          format: date-time
          description: This is the ISO 8601 date-time string of when the call was created.
        updatedAt:
          type: string
          format: date-time
          description: >-
            This is the ISO 8601 date-time string of when the call was last
            updated.
        startedAt:
          type: string
          format: date-time
          description: This is the ISO 8601 date-time string of when the call was started.
        endedAt:
          type: string
          format: date-time
          description: This is the ISO 8601 date-time string of when the call was ended.
        cost:
          type: number
          format: double
          description: This is the cost of the call in USD.
        costBreakdown:
          $ref: '#/components/schemas/CostBreakdown'
          description: This is the cost of the call in USD.
        artifactPlan:
          $ref: '#/components/schemas/ArtifactPlan'
          description: >-
            This is a copy of assistant artifact plan. This isn't actually
            stored on the call but rather just returned in POST /call/web to
            enable artifact creation client side.
        analysis:
          $ref: '#/components/schemas/Analysis'
          description: >-
            This is the analysis of the call. Configure in
            `assistant.analysisPlan`.
        monitor:
          $ref: '#/components/schemas/Monitor'
          description: >-
            This is to real-time monitor the call. Configure in
            `assistant.monitorPlan`.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: >-
            These are the artifacts created from the call. Configure in
            `assistant.artifactPlan`.
        compliance:
          $ref: '#/components/schemas/Compliance'
          description: >-
            This is the compliance of the call. Configure in
            `assistant.compliancePlan`.
        phoneCallProviderId:
          type: string
          description: >-
            The ID of the call as provided by the phone number service. callSid
            in Twilio. conversationUuid in Vonage. callControlId in Telnyx.


            Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type.
        campaignId:
          type: string
          description: This is the campaign ID that the call belongs to.
        assistantId:
          type: string
          description: >-
            This is the assistant ID that will be used for the call. To use a
            transient assistant, use `assistant` instead.


            To start a call with:

            - Assistant, use `assistantId` or `assistant`

            - Squad, use `squadId` or `squad`

            - Workflow, use `workflowId` or `workflow`
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: >-
            This is the assistant that will be used for the call. To use an
            existing assistant, use `assistantId` instead.


            To start a call with:

            - Assistant, use `assistant`

            - Squad, use `squad`

            - Workflow, use `workflow`
        assistantOverrides:
          $ref: '#/components/schemas/AssistantOverrides'
          description: >-
            These are the overrides for the `assistant` or `assistantId`'s
            settings and template variables.
        squadId:
          type: string
          description: >-
            This is the squad that will be used for the call. To use a transient
            squad, use `squad` instead.


            To start a call with:

            - Assistant, use `assistant` or `assistantId`

            - Squad, use `squad` or `squadId`

            - Workflow, use `workflow` or `workflowId`
        squad:
          $ref: '#/components/schemas/CreateSquadDTO'
          description: >-
            This is a squad that will be used for the call. To use an existing
            squad, use `squadId` instead.


            To start a call with:

            - Assistant, use `assistant` or `assistantId`

            - Squad, use `squad` or `squadId`

            - Workflow, use `workflow` or `workflowId`
        squadOverrides:
          $ref: '#/components/schemas/AssistantOverrides'
          description: >-
            These are the overrides for the `squad` or `squadId`'s member
            settings and template variables.

            This will apply to all members of the squad.
        workflowId:
          type: string
          description: >-
            This is the workflow that will be used for the call. To use a
            transient workflow, use `workflow` instead.


            To start a call with:

            - Assistant, use `assistant` or `assistantId`

            - Squad, use `squad` or `squadId`

            - Workflow, use `workflow` or `workflowId`
        workflow:
          $ref: '#/components/schemas/CreateWorkflowDTO'
          description: >-
            This is a workflow that will be used for the call. To use an
            existing workflow, use `workflowId` instead.


            To start a call with:

            - Assistant, use `assistant` or `assistantId`

            - Squad, use `squad` or `squadId`

            - Workflow, use `workflow` or `workflowId`
        workflowOverrides:
          $ref: '#/components/schemas/WorkflowOverrides'
          description: >-
            These are the overrides for the `workflow` or `workflowId`'s
            settings and template variables.
        phoneNumberId:
          type: string
          description: >-
            This is the phone number that will be used for the call. To use a
            transient number, use `phoneNumber` instead.


            Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type.
        phoneNumber:
          $ref: '#/components/schemas/ImportTwilioPhoneNumberDTO'
          description: >-
            This is the phone number that will be used for the call. To use an
            existing number, use `phoneNumberId` instead.


            Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type.
        customerId:
          type: string
          description: >-
            This is the customer that will be called. To call a transient
            customer , use `customer` instead.


            Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: >-
            This is the customer that will be called. To call an existing
            customer, use `customerId` instead.


            Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type.
        name:
          type: string
          description: This is the name of the call. This is just for your own reference.
        schedulePlan:
          $ref: '#/components/schemas/SchedulePlan'
          description: This is the schedule plan of the call.
        transport:
          $ref: '#/components/schemas/CallTransport'
          description: This is the transport of the call.
        subscriptionLimits:
          $ref: '#/components/schemas/SubscriptionLimits'
          description: >-
            These are the subscription limits for the org at the time of the
            call. Includes concurrency limit information.
      required:
        - id
        - orgId
        - createdAt
        - updatedAt
      title: Call
    ChatInputOneOf1Items:
      oneOf:
        - $ref: '#/components/schemas/SystemMessage'
        - $ref: '#/components/schemas/UserMessage'
        - $ref: '#/components/schemas/AssistantMessage'
        - $ref: '#/components/schemas/ToolMessage'
        - $ref: '#/components/schemas/DeveloperMessage'
      title: ChatInputOneOf1Items
    ChatInput1:
      type: array
      items:
        $ref: '#/components/schemas/ChatInputOneOf1Items'
      title: ChatInput1
    ChatInput:
      oneOf:
        - type: string
        - $ref: '#/components/schemas/ChatInput1'
      description: |-
        This is the input text for the chat.
        Can be a string or an array of chat messages.
      title: ChatInput
    ChatMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/SystemMessage'
        - $ref: '#/components/schemas/UserMessage'
        - $ref: '#/components/schemas/AssistantMessage'
        - $ref: '#/components/schemas/ToolMessage'
        - $ref: '#/components/schemas/DeveloperMessage'
      title: ChatMessagesItems
    ChatOutputItems:
      oneOf:
        - $ref: '#/components/schemas/SystemMessage'
        - $ref: '#/components/schemas/UserMessage'
        - $ref: '#/components/schemas/AssistantMessage'
        - $ref: '#/components/schemas/ToolMessage'
        - $ref: '#/components/schemas/DeveloperMessage'
      title: ChatOutputItems
    ChatCostType:
      type: string
      enum:
        - chat
      description: This is the type of cost, always 'chat' for this class.
      title: ChatCostType
    ChatCost:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/ChatCostType'
          description: This is the type of cost, always 'chat' for this class.
        cost:
          type: number
          format: double
          description: This is the cost of the component in USD.
      required:
        - type
        - cost
      title: ChatCost
    ChatCostsItems:
      oneOf:
        - $ref: '#/components/schemas/ModelCost'
        - $ref: '#/components/schemas/ChatCost'
      title: ChatCostsItems
    Chat:
      type: object
      properties:
        assistantId:
          type: string
          description: >-
            This is the assistant that will be used for the chat. To use an
            existing assistant, use `assistantId` instead.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: >-
            This is the assistant that will be used for the chat. To use an
            existing assistant, use `assistantId` instead.
        assistantOverrides:
          $ref: '#/components/schemas/AssistantOverrides'
          description: >-
            These are the variable values that will be used to replace template
            variables in the assistant messages.

            Only variable substitution is supported in chat contexts - other
            assistant properties cannot be overridden.
        squadId:
          type: string
          description: >-
            This is the squad that will be used for the chat. To use a transient
            squad, use `squad` instead.
        squad:
          $ref: '#/components/schemas/CreateSquadDTO'
          description: >-
            This is the squad that will be used for the chat. To use an existing
            squad, use `squadId` instead.
        name:
          type: string
          description: This is the name of the chat. This is just for your own reference.
        sessionId:
          type: string
          description: |-
            This is the ID of the session that will be used for the chat.
            Mutually exclusive with previousChatId.
        input:
          $ref: '#/components/schemas/ChatInput'
          description: |-
            This is the input text for the chat.
            Can be a string or an array of chat messages.
        stream:
          type: boolean
          default: false
          description: >-
            This is a flag that determines whether the response should be
            streamed.

            When true, the response will be sent as chunks of text.
        previousChatId:
          type: string
          description: >-
            This is the ID of the chat that will be used as context for the new
            chat.

            The messages from the previous chat will be used as context.

            Mutually exclusive with sessionId.
        id:
          type: string
          description: This is the unique identifier for the chat.
        orgId:
          type: string
          description: This is the unique identifier for the org that this chat belongs to.
        messages:
          type: array
          items:
            $ref: '#/components/schemas/ChatMessagesItems'
          description: |-
            This is an array of messages used as context for the chat.
            Used to provide message history for multi-turn conversations.
        output:
          type: array
          items:
            $ref: '#/components/schemas/ChatOutputItems'
          description: >-
            This is the output messages generated by the system in response to
            the input.
        createdAt:
          type: string
          format: date-time
          description: This is the ISO 8601 date-time string of when the chat was created.
        updatedAt:
          type: string
          format: date-time
          description: >-
            This is the ISO 8601 date-time string of when the chat was last
            updated.
        costs:
          type: array
          items:
            $ref: '#/components/schemas/ChatCostsItems'
          description: These are the costs of individual components of the chat in USD.
        cost:
          type: number
          format: double
          description: This is the cost of the chat in USD.
      required:
        - id
        - orgId
        - createdAt
        - updatedAt
      title: Chat
    ServerMessageAssistantRequest:
      type: object
      properties:
        phoneNumber:
          $ref: '#/components/schemas/ServerMessageAssistantRequestPhoneNumber'
          description: This is the phone number that the message is associated with.
        type:
          $ref: '#/components/schemas/ServerMessageAssistantRequestType'
          description: >-
            This is the type of the message. "assistant-request" is sent to
            fetch assistant configuration for an incoming call.
        timestamp:
          type: number
          format: double
          description: This is the timestamp of the message.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: |-
            This is a live version of the `call.artifact`.

            This matches what is stored on `call.artifact` after the call.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: This is the assistant that the message is associated with.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer that the message is associated with.
        call:
          $ref: '#/components/schemas/Call'
          description: This is the call that the message is associated with.
        chat:
          $ref: '#/components/schemas/Chat'
          description: This is the chat object.
      required:
        - type
      title: ServerMessageAssistantRequest
    ServerMessageConversationUpdatePhoneNumber:
      oneOf:
        - $ref: '#/components/schemas/CreateByoPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO'
      description: This is the phone number that the message is associated with.
      title: ServerMessageConversationUpdatePhoneNumber
    ServerMessageConversationUpdateType:
      type: string
      enum:
        - conversation-update
      description: >-
        This is the type of the message. "conversation-update" is sent when an
        update is committed to the conversation history.
      title: ServerMessageConversationUpdateType
    ServerMessageConversationUpdateMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/UserMessage'
        - $ref: '#/components/schemas/SystemMessage'
        - $ref: '#/components/schemas/BotMessage'
        - $ref: '#/components/schemas/ToolCallMessage'
        - $ref: '#/components/schemas/ToolCallResultMessage'
      title: ServerMessageConversationUpdateMessagesItems
    ServerMessageConversationUpdate:
      type: object
      properties:
        phoneNumber:
          $ref: '#/components/schemas/ServerMessageConversationUpdatePhoneNumber'
          description: This is the phone number that the message is associated with.
        type:
          $ref: '#/components/schemas/ServerMessageConversationUpdateType'
          description: >-
            This is the type of the message. "conversation-update" is sent when
            an update is committed to the conversation history.
        messages:
          type: array
          items:
            $ref: '#/components/schemas/ServerMessageConversationUpdateMessagesItems'
          description: >-
            This is the most up-to-date conversation history at the time the
            message is sent.
        messagesOpenAIFormatted:
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
          description: >-
            This is the most up-to-date conversation history at the time the
            message is sent, formatted for OpenAI.
        timestamp:
          type: number
          format: double
          description: This is the timestamp of the message.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: |-
            This is a live version of the `call.artifact`.

            This matches what is stored on `call.artifact` after the call.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: This is the assistant that the message is associated with.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer that the message is associated with.
        call:
          $ref: '#/components/schemas/Call'
          description: This is the call that the message is associated with.
        chat:
          $ref: '#/components/schemas/Chat'
          description: This is the chat object.
      required:
        - type
        - messagesOpenAIFormatted
      title: ServerMessageConversationUpdate
    ServerMessageEndOfCallReportPhoneNumber:
      oneOf:
        - $ref: '#/components/schemas/CreateByoPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO'
      description: This is the phone number that the message is associated with.
      title: ServerMessageEndOfCallReportPhoneNumber
    ServerMessageEndOfCallReportType:
      type: string
      enum:
        - end-of-call-report
      description: >-
        This is the type of the message. "end-of-call-report" is sent when the
        call ends and post-processing is complete.
      title: ServerMessageEndOfCallReportType
    ServerMessageEndOfCallReportEndedReason:
      type: string
      enum:
        - call-start-error-neither-assistant-nor-server-set
        - assistant-request-failed
        - assistant-request-returned-error
        - assistant-request-returned-unspeakable-error
        - assistant-request-returned-invalid-assistant
        - assistant-request-returned-no-assistant
        - assistant-request-returned-forwarding-phone-number
        - scheduled-call-deleted
        - call.start.error-vapifault-get-org
        - call.start.error-vapifault-get-subscription
        - call.start.error-get-assistant
        - call.start.error-get-phone-number
        - call.start.error-get-customer
        - call.start.error-get-resources-validation
        - call.start.error-vapi-number-international
        - call.start.error-vapi-number-outbound-daily-limit
        - call.start.error-get-transport
        - call.start.error-subscription-wallet-does-not-exist
        - call.start.error-fraud-check-failed
        - call.start.error-subscription-frozen
        - call.start.error-subscription-insufficient-credits
        - call.start.error-subscription-upgrade-failed
        - call.start.error-subscription-concurrency-limit-reached
        - call.start.error-enterprise-feature-not-available-recording-consent
        - assistant-not-valid
        - call.start.error-vapifault-database-error
        - assistant-not-found
        - pipeline-error-openai-voice-failed
        - pipeline-error-cartesia-voice-failed
        - pipeline-error-deepgram-voice-failed
        - pipeline-error-eleven-labs-voice-failed
        - pipeline-error-playht-voice-failed
        - pipeline-error-lmnt-voice-failed
        - pipeline-error-azure-voice-failed
        - pipeline-error-rime-ai-voice-failed
        - pipeline-error-smallest-ai-voice-failed
        - pipeline-error-vapi-voice-failed
        - pipeline-error-neuphonic-voice-failed
        - pipeline-error-hume-voice-failed
        - pipeline-error-sesame-voice-failed
        - pipeline-error-inworld-voice-failed
        - pipeline-error-minimax-voice-failed
        - pipeline-error-wellsaid-voice-failed
        - pipeline-error-tavus-video-failed
        - call.in-progress.error-vapifault-openai-voice-failed
        - call.in-progress.error-vapifault-cartesia-voice-failed
        - call.in-progress.error-vapifault-deepgram-voice-failed
        - call.in-progress.error-vapifault-eleven-labs-voice-failed
        - call.in-progress.error-vapifault-playht-voice-failed
        - call.in-progress.error-vapifault-lmnt-voice-failed
        - call.in-progress.error-vapifault-azure-voice-failed
        - call.in-progress.error-vapifault-rime-ai-voice-failed
        - call.in-progress.error-vapifault-smallest-ai-voice-failed
        - call.in-progress.error-vapifault-vapi-voice-failed
        - call.in-progress.error-vapifault-neuphonic-voice-failed
        - call.in-progress.error-vapifault-hume-voice-failed
        - call.in-progress.error-vapifault-sesame-voice-failed
        - call.in-progress.error-vapifault-inworld-voice-failed
        - call.in-progress.error-vapifault-minimax-voice-failed
        - call.in-progress.error-vapifault-wellsaid-voice-failed
        - call.in-progress.error-vapifault-tavus-video-failed
        - pipeline-error-vapi-llm-failed
        - pipeline-error-vapi-400-bad-request-validation-failed
        - pipeline-error-vapi-401-unauthorized
        - pipeline-error-vapi-403-model-access-denied
        - pipeline-error-vapi-429-exceeded-quota
        - pipeline-error-vapi-500-server-error
        - pipeline-error-vapi-503-server-overloaded-error
        - call.in-progress.error-providerfault-vapi-llm-failed
        - >-
          call.in-progress.error-vapifault-vapi-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-vapi-401-unauthorized
        - call.in-progress.error-vapifault-vapi-403-model-access-denied
        - call.in-progress.error-vapifault-vapi-429-exceeded-quota
        - call.in-progress.error-providerfault-vapi-500-server-error
        - call.in-progress.error-providerfault-vapi-503-server-overloaded-error
        - pipeline-error-deepgram-transcriber-failed
        - pipeline-error-deepgram-transcriber-api-key-missing
        - call.in-progress.error-vapifault-deepgram-transcriber-failed
        - pipeline-error-gladia-transcriber-failed
        - call.in-progress.error-vapifault-gladia-transcriber-failed
        - pipeline-error-speechmatics-transcriber-failed
        - call.in-progress.error-vapifault-speechmatics-transcriber-failed
        - pipeline-error-assembly-ai-transcriber-failed
        - pipeline-error-assembly-ai-returning-400-insufficent-funds
        - pipeline-error-assembly-ai-returning-400-paid-only-feature
        - pipeline-error-assembly-ai-returning-401-invalid-credentials
        - pipeline-error-assembly-ai-returning-500-invalid-schema
        - pipeline-error-assembly-ai-returning-500-word-boost-parsing-failed
        - call.in-progress.error-vapifault-assembly-ai-transcriber-failed
        - >-
          call.in-progress.error-vapifault-assembly-ai-returning-400-insufficent-funds
        - >-
          call.in-progress.error-vapifault-assembly-ai-returning-400-paid-only-feature
        - >-
          call.in-progress.error-vapifault-assembly-ai-returning-401-invalid-credentials
        - >-
          call.in-progress.error-vapifault-assembly-ai-returning-500-invalid-schema
        - >-
          call.in-progress.error-vapifault-assembly-ai-returning-500-word-boost-parsing-failed
        - pipeline-error-talkscriber-transcriber-failed
        - call.in-progress.error-vapifault-talkscriber-transcriber-failed
        - pipeline-error-azure-speech-transcriber-failed
        - call.in-progress.error-vapifault-azure-speech-transcriber-failed
        - pipeline-error-eleven-labs-transcriber-failed
        - call.in-progress.error-vapifault-eleven-labs-transcriber-failed
        - pipeline-error-google-transcriber-failed
        - call.in-progress.error-vapifault-google-transcriber-failed
        - pipeline-error-openai-transcriber-failed
        - call.in-progress.error-vapifault-openai-transcriber-failed
        - pipeline-error-soniox-transcriber-auth-failed
        - pipeline-error-soniox-transcriber-rate-limited
        - pipeline-error-soniox-transcriber-invalid-config
        - pipeline-error-soniox-transcriber-server-error
        - pipeline-error-soniox-transcriber-failed
        - call.in-progress.error-vapifault-soniox-transcriber-auth-failed
        - call.in-progress.error-vapifault-soniox-transcriber-rate-limited
        - call.in-progress.error-vapifault-soniox-transcriber-invalid-config
        - call.in-progress.error-vapifault-soniox-transcriber-server-error
        - call.in-progress.error-vapifault-soniox-transcriber-failed
        - call.in-progress.error-pipeline-no-available-llm-model
        - worker-shutdown
        - vonage-disconnected
        - vonage-failed-to-connect-call
        - vonage-completed
        - phone-call-provider-bypass-enabled-but-no-call-received
        - call.in-progress.error-providerfault-transport-never-connected
        - call.in-progress.error-vapifault-worker-not-available
        - call.in-progress.error-vapifault-transport-never-connected
        - >-
          call.in-progress.error-vapifault-transport-connected-but-call-not-active
        - >-
          call.in-progress.error-vapifault-call-started-but-connection-to-transport-missing
        - call.in-progress.error-vapifault-worker-died
        - call.in-progress.twilio-completed-call
        - call.in-progress.sip-completed-call
        - call.in-progress.error-sip-inbound-call-failed-to-connect
        - >-
          call.in-progress.error-providerfault-outbound-sip-503-service-unavailable
        - call.in-progress.error-sip-outbound-call-failed-to-connect
        - call.ringing.error-sip-inbound-call-failed-to-connect
        - call.in-progress.error-providerfault-openai-llm-failed
        - call.in-progress.error-providerfault-azure-openai-llm-failed
        - call.in-progress.error-providerfault-groq-llm-failed
        - call.in-progress.error-providerfault-google-llm-failed
        - call.in-progress.error-providerfault-xai-llm-failed
        - call.in-progress.error-providerfault-mistral-llm-failed
        - call.in-progress.error-providerfault-minimax-llm-failed
        - call.in-progress.error-providerfault-inflection-ai-llm-failed
        - call.in-progress.error-providerfault-cerebras-llm-failed
        - call.in-progress.error-providerfault-deep-seek-llm-failed
        - call.in-progress.error-providerfault-baseten-llm-failed
        - call.in-progress.error-vapifault-chat-pipeline-failed-to-start
        - pipeline-error-openai-400-bad-request-validation-failed
        - pipeline-error-openai-401-unauthorized
        - pipeline-error-openai-401-incorrect-api-key
        - pipeline-error-openai-401-account-not-in-organization
        - pipeline-error-openai-403-model-access-denied
        - pipeline-error-openai-429-exceeded-quota
        - pipeline-error-openai-429-rate-limit-reached
        - pipeline-error-openai-500-server-error
        - pipeline-error-openai-503-server-overloaded-error
        - pipeline-error-openai-llm-failed
        - >-
          call.in-progress.error-vapifault-openai-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-openai-401-unauthorized
        - call.in-progress.error-vapifault-openai-401-incorrect-api-key
        - >-
          call.in-progress.error-vapifault-openai-401-account-not-in-organization
        - call.in-progress.error-vapifault-openai-403-model-access-denied
        - call.in-progress.error-vapifault-openai-429-exceeded-quota
        - call.in-progress.error-vapifault-openai-429-rate-limit-reached
        - call.in-progress.error-providerfault-openai-500-server-error
        - >-
          call.in-progress.error-providerfault-openai-503-server-overloaded-error
        - pipeline-error-azure-openai-400-bad-request-validation-failed
        - pipeline-error-azure-openai-401-unauthorized
        - pipeline-error-azure-openai-403-model-access-denied
        - pipeline-error-azure-openai-429-exceeded-quota
        - pipeline-error-azure-openai-500-server-error
        - pipeline-error-azure-openai-503-server-overloaded-error
        - pipeline-error-azure-openai-llm-failed
        - >-
          call.in-progress.error-vapifault-azure-openai-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-azure-openai-401-unauthorized
        - call.in-progress.error-vapifault-azure-openai-403-model-access-denied
        - call.in-progress.error-vapifault-azure-openai-429-exceeded-quota
        - call.in-progress.error-providerfault-azure-openai-500-server-error
        - >-
          call.in-progress.error-providerfault-azure-openai-503-server-overloaded-error
        - pipeline-error-google-400-bad-request-validation-failed
        - pipeline-error-google-401-unauthorized
        - pipeline-error-google-403-model-access-denied
        - pipeline-error-google-429-exceeded-quota
        - pipeline-error-google-500-server-error
        - pipeline-error-google-503-server-overloaded-error
        - pipeline-error-google-llm-failed
        - >-
          call.in-progress.error-vapifault-google-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-google-401-unauthorized
        - call.in-progress.error-vapifault-google-403-model-access-denied
        - call.in-progress.error-vapifault-google-429-exceeded-quota
        - call.in-progress.error-providerfault-google-500-server-error
        - >-
          call.in-progress.error-providerfault-google-503-server-overloaded-error
        - pipeline-error-xai-400-bad-request-validation-failed
        - pipeline-error-xai-401-unauthorized
        - pipeline-error-xai-403-model-access-denied
        - pipeline-error-xai-429-exceeded-quota
        - pipeline-error-xai-500-server-error
        - pipeline-error-xai-503-server-overloaded-error
        - pipeline-error-xai-llm-failed
        - call.in-progress.error-vapifault-xai-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-xai-401-unauthorized
        - call.in-progress.error-vapifault-xai-403-model-access-denied
        - call.in-progress.error-vapifault-xai-429-exceeded-quota
        - call.in-progress.error-providerfault-xai-500-server-error
        - call.in-progress.error-providerfault-xai-503-server-overloaded-error
        - pipeline-error-baseten-400-bad-request-validation-failed
        - pipeline-error-baseten-401-unauthorized
        - pipeline-error-baseten-403-model-access-denied
        - pipeline-error-baseten-429-exceeded-quota
        - pipeline-error-baseten-500-server-error
        - pipeline-error-baseten-503-server-overloaded-error
        - pipeline-error-baseten-llm-failed
        - >-
          call.in-progress.error-vapifault-baseten-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-baseten-401-unauthorized
        - call.in-progress.error-vapifault-baseten-403-model-access-denied
        - call.in-progress.error-vapifault-baseten-429-exceeded-quota
        - call.in-progress.error-providerfault-baseten-500-server-error
        - >-
          call.in-progress.error-providerfault-baseten-503-server-overloaded-error
        - pipeline-error-mistral-400-bad-request-validation-failed
        - pipeline-error-mistral-401-unauthorized
        - pipeline-error-mistral-403-model-access-denied
        - pipeline-error-mistral-429-exceeded-quota
        - pipeline-error-mistral-500-server-error
        - pipeline-error-mistral-503-server-overloaded-error
        - pipeline-error-mistral-llm-failed
        - >-
          call.in-progress.error-vapifault-mistral-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-mistral-401-unauthorized
        - call.in-progress.error-vapifault-mistral-403-model-access-denied
        - call.in-progress.error-vapifault-mistral-429-exceeded-quota
        - call.in-progress.error-providerfault-mistral-500-server-error
        - >-
          call.in-progress.error-providerfault-mistral-503-server-overloaded-error
        - pipeline-error-minimax-400-bad-request-validation-failed
        - pipeline-error-minimax-401-unauthorized
        - pipeline-error-minimax-403-model-access-denied
        - pipeline-error-minimax-429-exceeded-quota
        - pipeline-error-minimax-500-server-error
        - pipeline-error-minimax-503-server-overloaded-error
        - pipeline-error-minimax-llm-failed
        - >-
          call.in-progress.error-vapifault-minimax-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-minimax-401-unauthorized
        - call.in-progress.error-vapifault-minimax-403-model-access-denied
        - call.in-progress.error-vapifault-minimax-429-exceeded-quota
        - call.in-progress.error-providerfault-minimax-500-server-error
        - >-
          call.in-progress.error-providerfault-minimax-503-server-overloaded-error
        - pipeline-error-inflection-ai-400-bad-request-validation-failed
        - pipeline-error-inflection-ai-401-unauthorized
        - pipeline-error-inflection-ai-403-model-access-denied
        - pipeline-error-inflection-ai-429-exceeded-quota
        - pipeline-error-inflection-ai-500-server-error
        - pipeline-error-inflection-ai-503-server-overloaded-error
        - pipeline-error-inflection-ai-llm-failed
        - >-
          call.in-progress.error-vapifault-inflection-ai-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-inflection-ai-401-unauthorized
        - call.in-progress.error-vapifault-inflection-ai-403-model-access-denied
        - call.in-progress.error-vapifault-inflection-ai-429-exceeded-quota
        - call.in-progress.error-providerfault-inflection-ai-500-server-error
        - >-
          call.in-progress.error-providerfault-inflection-ai-503-server-overloaded-error
        - pipeline-error-deep-seek-400-bad-request-validation-failed
        - pipeline-error-deep-seek-401-unauthorized
        - pipeline-error-deep-seek-403-model-access-denied
        - pipeline-error-deep-seek-429-exceeded-quota
        - pipeline-error-deep-seek-500-server-error
        - pipeline-error-deep-seek-503-server-overloaded-error
        - pipeline-error-deep-seek-llm-failed
        - >-
          call.in-progress.error-vapifault-deep-seek-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-deep-seek-401-unauthorized
        - call.in-progress.error-vapifault-deep-seek-403-model-access-denied
        - call.in-progress.error-vapifault-deep-seek-429-exceeded-quota
        - call.in-progress.error-providerfault-deep-seek-500-server-error
        - >-
          call.in-progress.error-providerfault-deep-seek-503-server-overloaded-error
        - pipeline-error-groq-400-bad-request-validation-failed
        - pipeline-error-groq-401-unauthorized
        - pipeline-error-groq-403-model-access-denied
        - pipeline-error-groq-429-exceeded-quota
        - pipeline-error-groq-500-server-error
        - pipeline-error-groq-503-server-overloaded-error
        - pipeline-error-groq-llm-failed
        - >-
          call.in-progress.error-vapifault-groq-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-groq-401-unauthorized
        - call.in-progress.error-vapifault-groq-403-model-access-denied
        - call.in-progress.error-vapifault-groq-429-exceeded-quota
        - call.in-progress.error-providerfault-groq-500-server-error
        - call.in-progress.error-providerfault-groq-503-server-overloaded-error
        - pipeline-error-cerebras-400-bad-request-validation-failed
        - pipeline-error-cerebras-401-unauthorized
        - pipeline-error-cerebras-403-model-access-denied
        - pipeline-error-cerebras-429-exceeded-quota
        - pipeline-error-cerebras-500-server-error
        - pipeline-error-cerebras-503-server-overloaded-error
        - pipeline-error-cerebras-llm-failed
        - >-
          call.in-progress.error-vapifault-cerebras-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-cerebras-401-unauthorized
        - call.in-progress.error-vapifault-cerebras-403-model-access-denied
        - call.in-progress.error-vapifault-cerebras-429-exceeded-quota
        - call.in-progress.error-providerfault-cerebras-500-server-error
        - >-
          call.in-progress.error-providerfault-cerebras-503-server-overloaded-error
        - pipeline-error-anthropic-400-bad-request-validation-failed
        - pipeline-error-anthropic-401-unauthorized
        - pipeline-error-anthropic-403-model-access-denied
        - pipeline-error-anthropic-429-exceeded-quota
        - pipeline-error-anthropic-500-server-error
        - pipeline-error-anthropic-503-server-overloaded-error
        - pipeline-error-anthropic-llm-failed
        - call.in-progress.error-providerfault-anthropic-llm-failed
        - >-
          call.in-progress.error-vapifault-anthropic-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-anthropic-401-unauthorized
        - call.in-progress.error-vapifault-anthropic-403-model-access-denied
        - call.in-progress.error-vapifault-anthropic-429-exceeded-quota
        - call.in-progress.error-providerfault-anthropic-500-server-error
        - >-
          call.in-progress.error-providerfault-anthropic-503-server-overloaded-error
        - pipeline-error-anthropic-bedrock-400-bad-request-validation-failed
        - pipeline-error-anthropic-bedrock-401-unauthorized
        - pipeline-error-anthropic-bedrock-403-model-access-denied
        - pipeline-error-anthropic-bedrock-429-exceeded-quota
        - pipeline-error-anthropic-bedrock-500-server-error
        - pipeline-error-anthropic-bedrock-503-server-overloaded-error
        - pipeline-error-anthropic-bedrock-llm-failed
        - call.in-progress.error-providerfault-anthropic-bedrock-llm-failed
        - >-
          call.in-progress.error-vapifault-anthropic-bedrock-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-anthropic-bedrock-401-unauthorized
        - >-
          call.in-progress.error-vapifault-anthropic-bedrock-403-model-access-denied
        - call.in-progress.error-vapifault-anthropic-bedrock-429-exceeded-quota
        - >-
          call.in-progress.error-providerfault-anthropic-bedrock-500-server-error
        - >-
          call.in-progress.error-providerfault-anthropic-bedrock-503-server-overloaded-error
        - pipeline-error-anthropic-vertex-400-bad-request-validation-failed
        - pipeline-error-anthropic-vertex-401-unauthorized
        - pipeline-error-anthropic-vertex-403-model-access-denied
        - pipeline-error-anthropic-vertex-429-exceeded-quota
        - pipeline-error-anthropic-vertex-500-server-error
        - pipeline-error-anthropic-vertex-503-server-overloaded-error
        - pipeline-error-anthropic-vertex-llm-failed
        - call.in-progress.error-providerfault-anthropic-vertex-llm-failed
        - >-
          call.in-progress.error-vapifault-anthropic-vertex-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-anthropic-vertex-401-unauthorized
        - >-
          call.in-progress.error-vapifault-anthropic-vertex-403-model-access-denied
        - call.in-progress.error-vapifault-anthropic-vertex-429-exceeded-quota
        - call.in-progress.error-providerfault-anthropic-vertex-500-server-error
        - >-
          call.in-progress.error-providerfault-anthropic-vertex-503-server-overloaded-error
        - pipeline-error-together-ai-400-bad-request-validation-failed
        - pipeline-error-together-ai-401-unauthorized
        - pipeline-error-together-ai-403-model-access-denied
        - pipeline-error-together-ai-429-exceeded-quota
        - pipeline-error-together-ai-500-server-error
        - pipeline-error-together-ai-503-server-overloaded-error
        - pipeline-error-together-ai-llm-failed
        - call.in-progress.error-providerfault-together-ai-llm-failed
        - >-
          call.in-progress.error-vapifault-together-ai-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-together-ai-401-unauthorized
        - call.in-progress.error-vapifault-together-ai-403-model-access-denied
        - call.in-progress.error-vapifault-together-ai-429-exceeded-quota
        - call.in-progress.error-providerfault-together-ai-500-server-error
        - >-
          call.in-progress.error-providerfault-together-ai-503-server-overloaded-error
        - pipeline-error-anyscale-400-bad-request-validation-failed
        - pipeline-error-anyscale-401-unauthorized
        - pipeline-error-anyscale-403-model-access-denied
        - pipeline-error-anyscale-429-exceeded-quota
        - pipeline-error-anyscale-500-server-error
        - pipeline-error-anyscale-503-server-overloaded-error
        - pipeline-error-anyscale-llm-failed
        - call.in-progress.error-providerfault-anyscale-llm-failed
        - >-
          call.in-progress.error-vapifault-anyscale-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-anyscale-401-unauthorized
        - call.in-progress.error-vapifault-anyscale-403-model-access-denied
        - call.in-progress.error-vapifault-anyscale-429-exceeded-quota
        - call.in-progress.error-providerfault-anyscale-500-server-error
        - >-
          call.in-progress.error-providerfault-anyscale-503-server-overloaded-error
        - pipeline-error-openrouter-400-bad-request-validation-failed
        - pipeline-error-openrouter-401-unauthorized
        - pipeline-error-openrouter-403-model-access-denied
        - pipeline-error-openrouter-429-exceeded-quota
        - pipeline-error-openrouter-500-server-error
        - pipeline-error-openrouter-503-server-overloaded-error
        - pipeline-error-openrouter-llm-failed
        - call.in-progress.error-providerfault-openrouter-llm-failed
        - >-
          call.in-progress.error-vapifault-openrouter-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-openrouter-401-unauthorized
        - call.in-progress.error-vapifault-openrouter-403-model-access-denied
        - call.in-progress.error-vapifault-openrouter-429-exceeded-quota
        - call.in-progress.error-providerfault-openrouter-500-server-error
        - >-
          call.in-progress.error-providerfault-openrouter-503-server-overloaded-error
        - pipeline-error-perplexity-ai-400-bad-request-validation-failed
        - pipeline-error-perplexity-ai-401-unauthorized
        - pipeline-error-perplexity-ai-403-model-access-denied
        - pipeline-error-perplexity-ai-429-exceeded-quota
        - pipeline-error-perplexity-ai-500-server-error
        - pipeline-error-perplexity-ai-503-server-overloaded-error
        - pipeline-error-perplexity-ai-llm-failed
        - call.in-progress.error-providerfault-perplexity-ai-llm-failed
        - >-
          call.in-progress.error-vapifault-perplexity-ai-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-perplexity-ai-401-unauthorized
        - call.in-progress.error-vapifault-perplexity-ai-403-model-access-denied
        - call.in-progress.error-vapifault-perplexity-ai-429-exceeded-quota
        - call.in-progress.error-providerfault-perplexity-ai-500-server-error
        - >-
          call.in-progress.error-providerfault-perplexity-ai-503-server-overloaded-error
        - pipeline-error-deepinfra-400-bad-request-validation-failed
        - pipeline-error-deepinfra-401-unauthorized
        - pipeline-error-deepinfra-403-model-access-denied
        - pipeline-error-deepinfra-429-exceeded-quota
        - pipeline-error-deepinfra-500-server-error
        - pipeline-error-deepinfra-503-server-overloaded-error
        - pipeline-error-deepinfra-llm-failed
        - call.in-progress.error-providerfault-deepinfra-llm-failed
        - >-
          call.in-progress.error-vapifault-deepinfra-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-deepinfra-401-unauthorized
        - call.in-progress.error-vapifault-deepinfra-403-model-access-denied
        - call.in-progress.error-vapifault-deepinfra-429-exceeded-quota
        - call.in-progress.error-providerfault-deepinfra-500-server-error
        - >-
          call.in-progress.error-providerfault-deepinfra-503-server-overloaded-error
        - pipeline-error-runpod-400-bad-request-validation-failed
        - pipeline-error-runpod-401-unauthorized
        - pipeline-error-runpod-403-model-access-denied
        - pipeline-error-runpod-429-exceeded-quota
        - pipeline-error-runpod-500-server-error
        - pipeline-error-runpod-503-server-overloaded-error
        - pipeline-error-runpod-llm-failed
        - call.in-progress.error-providerfault-runpod-llm-failed
        - >-
          call.in-progress.error-vapifault-runpod-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-runpod-401-unauthorized
        - call.in-progress.error-vapifault-runpod-403-model-access-denied
        - call.in-progress.error-vapifault-runpod-429-exceeded-quota
        - call.in-progress.error-providerfault-runpod-500-server-error
        - >-
          call.in-progress.error-providerfault-runpod-503-server-overloaded-error
        - pipeline-error-custom-llm-400-bad-request-validation-failed
        - pipeline-error-custom-llm-401-unauthorized
        - pipeline-error-custom-llm-403-model-access-denied
        - pipeline-error-custom-llm-429-exceeded-quota
        - pipeline-error-custom-llm-500-server-error
        - pipeline-error-custom-llm-503-server-overloaded-error
        - pipeline-error-custom-llm-llm-failed
        - call.in-progress.error-providerfault-custom-llm-llm-failed
        - >-
          call.in-progress.error-vapifault-custom-llm-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-custom-llm-401-unauthorized
        - call.in-progress.error-vapifault-custom-llm-403-model-access-denied
        - call.in-progress.error-vapifault-custom-llm-429-exceeded-quota
        - call.in-progress.error-providerfault-custom-llm-500-server-error
        - >-
          call.in-progress.error-providerfault-custom-llm-503-server-overloaded-error
        - call.in-progress.error-pipeline-ws-model-connection-failed
        - pipeline-error-custom-voice-failed
        - pipeline-error-cartesia-socket-hang-up
        - pipeline-error-cartesia-requested-payment
        - pipeline-error-cartesia-500-server-error
        - pipeline-error-cartesia-502-server-error
        - pipeline-error-cartesia-503-server-error
        - pipeline-error-cartesia-522-server-error
        - call.in-progress.error-vapifault-cartesia-socket-hang-up
        - call.in-progress.error-vapifault-cartesia-requested-payment
        - call.in-progress.error-providerfault-cartesia-500-server-error
        - call.in-progress.error-providerfault-cartesia-503-server-error
        - call.in-progress.error-providerfault-cartesia-522-server-error
        - pipeline-error-eleven-labs-voice-not-found
        - pipeline-error-eleven-labs-quota-exceeded
        - pipeline-error-eleven-labs-unauthorized-access
        - pipeline-error-eleven-labs-unauthorized-to-access-model
        - pipeline-error-eleven-labs-professional-voices-only-for-creator-plus
        - pipeline-error-eleven-labs-blocked-free-plan-and-requested-upgrade
        - >-
          pipeline-error-eleven-labs-blocked-concurrent-requests-and-requested-upgrade
        - >-
          pipeline-error-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade
        - pipeline-error-eleven-labs-system-busy-and-requested-upgrade
        - pipeline-error-eleven-labs-voice-not-fine-tuned
        - pipeline-error-eleven-labs-invalid-api-key
        - pipeline-error-eleven-labs-invalid-voice-samples
        - pipeline-error-eleven-labs-voice-disabled-by-owner
        - pipeline-error-eleven-labs-vapi-voice-disabled-by-owner
        - pipeline-error-eleven-labs-blocked-account-in-probation
        - pipeline-error-eleven-labs-blocked-content-against-their-policy
        - pipeline-error-eleven-labs-missing-samples-for-voice-clone
        - pipeline-error-eleven-labs-voice-not-fine-tuned-and-cannot-be-used
        - pipeline-error-eleven-labs-voice-not-allowed-for-free-users
        - pipeline-error-eleven-labs-max-character-limit-exceeded
        - >-
          pipeline-error-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification
        - pipeline-error-eleven-labs-500-server-error
        - pipeline-error-eleven-labs-503-server-error
        - call.in-progress.error-vapifault-eleven-labs-voice-not-found
        - call.in-progress.error-vapifault-eleven-labs-quota-exceeded
        - call.in-progress.error-vapifault-eleven-labs-unauthorized-access
        - >-
          call.in-progress.error-vapifault-eleven-labs-unauthorized-to-access-model
        - >-
          call.in-progress.error-vapifault-eleven-labs-professional-voices-only-for-creator-plus
        - >-
          call.in-progress.error-vapifault-eleven-labs-blocked-free-plan-and-requested-upgrade
        - >-
          call.in-progress.error-vapifault-eleven-labs-blocked-concurrent-requests-and-requested-upgrade
        - >-
          call.in-progress.error-vapifault-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade
        - >-
          call.in-progress.error-vapifault-eleven-labs-system-busy-and-requested-upgrade
        - call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned
        - call.in-progress.error-vapifault-eleven-labs-invalid-api-key
        - call.in-progress.error-vapifault-eleven-labs-invalid-voice-samples
        - call.in-progress.error-vapifault-eleven-labs-voice-disabled-by-owner
        - >-
          call.in-progress.error-vapifault-eleven-labs-blocked-account-in-probation
        - >-
          call.in-progress.error-vapifault-eleven-labs-blocked-content-against-their-policy
        - >-
          call.in-progress.error-vapifault-eleven-labs-missing-samples-for-voice-clone
        - >-
          call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned-and-cannot-be-used
        - >-
          call.in-progress.error-vapifault-eleven-labs-voice-not-allowed-for-free-users
        - >-
          call.in-progress.error-vapifault-eleven-labs-max-character-limit-exceeded
        - >-
          call.in-progress.error-vapifault-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification
        - >-
          call.in-progress.error-providerfault-eleven-labs-system-busy-and-requested-upgrade
        - call.in-progress.error-providerfault-eleven-labs-500-server-error
        - call.in-progress.error-providerfault-eleven-labs-503-server-error
        - pipeline-error-playht-request-timed-out
        - pipeline-error-playht-invalid-voice
        - pipeline-error-playht-unexpected-error
        - pipeline-error-playht-out-of-credits
        - pipeline-error-playht-invalid-emotion
        - pipeline-error-playht-voice-must-be-a-valid-voice-manifest-uri
        - pipeline-error-playht-401-unauthorized
        - pipeline-error-playht-403-forbidden-out-of-characters
        - pipeline-error-playht-403-forbidden-api-access-not-available
        - pipeline-error-playht-429-exceeded-quota
        - pipeline-error-playht-502-gateway-error
        - pipeline-error-playht-504-gateway-error
        - call.in-progress.error-vapifault-playht-request-timed-out
        - call.in-progress.error-vapifault-playht-invalid-voice
        - call.in-progress.error-vapifault-playht-unexpected-error
        - call.in-progress.error-vapifault-playht-out-of-credits
        - call.in-progress.error-vapifault-playht-invalid-emotion
        - >-
          call.in-progress.error-vapifault-playht-voice-must-be-a-valid-voice-manifest-uri
        - call.in-progress.error-vapifault-playht-401-unauthorized
        - >-
          call.in-progress.error-vapifault-playht-403-forbidden-out-of-characters
        - >-
          call.in-progress.error-vapifault-playht-403-forbidden-api-access-not-available
        - call.in-progress.error-vapifault-playht-429-exceeded-quota
        - call.in-progress.error-providerfault-playht-502-gateway-error
        - call.in-progress.error-providerfault-playht-504-gateway-error
        - pipeline-error-custom-transcriber-failed
        - call.in-progress.error-vapifault-custom-transcriber-failed
        - pipeline-error-eleven-labs-transcriber-failed
        - call.in-progress.error-vapifault-eleven-labs-transcriber-failed
        - >-
          pipeline-error-deepgram-returning-400-no-such-model-language-tier-combination
        - pipeline-error-deepgram-returning-401-invalid-credentials
        - pipeline-error-deepgram-returning-403-model-access-denied
        - pipeline-error-deepgram-returning-404-not-found
        - pipeline-error-deepgram-returning-500-invalid-json
        - pipeline-error-deepgram-returning-502-network-error
        - pipeline-error-deepgram-returning-502-bad-gateway-ehostunreach
        - pipeline-error-deepgram-returning-econnreset
        - >-
          call.in-progress.error-vapifault-deepgram-returning-400-no-such-model-language-tier-combination
        - >-
          call.in-progress.error-vapifault-deepgram-returning-401-invalid-credentials
        - call.in-progress.error-vapifault-deepgram-returning-404-not-found
        - >-
          call.in-progress.error-vapifault-deepgram-returning-403-model-access-denied
        - >-
          call.in-progress.error-providerfault-deepgram-returning-500-invalid-json
        - >-
          call.in-progress.error-providerfault-deepgram-returning-502-network-error
        - >-
          call.in-progress.error-providerfault-deepgram-returning-502-bad-gateway-ehostunreach
        - pipeline-error-google-transcriber-failed
        - call.in-progress.error-vapifault-google-transcriber-failed
        - pipeline-error-openai-transcriber-failed
        - call.in-progress.error-vapifault-openai-transcriber-failed
        - pipeline-error-soniox-transcriber-auth-failed
        - pipeline-error-soniox-transcriber-rate-limited
        - pipeline-error-soniox-transcriber-invalid-config
        - pipeline-error-soniox-transcriber-server-error
        - pipeline-error-soniox-transcriber-failed
        - call.in-progress.error-vapifault-soniox-transcriber-auth-failed
        - call.in-progress.error-vapifault-soniox-transcriber-rate-limited
        - call.in-progress.error-vapifault-soniox-transcriber-invalid-config
        - call.in-progress.error-vapifault-soniox-transcriber-server-error
        - call.in-progress.error-vapifault-soniox-transcriber-failed
        - call.in-progress.error-warm-transfer-max-duration
        - call.in-progress.error-warm-transfer-assistant-cancelled
        - call.in-progress.error-warm-transfer-silence-timeout
        - call.in-progress.error-warm-transfer-microphone-timeout
        - assistant-ended-call
        - assistant-said-end-call-phrase
        - assistant-ended-call-with-hangup-task
        - assistant-ended-call-after-message-spoken
        - assistant-forwarded-call
        - assistant-join-timed-out
        - call.in-progress.error-assistant-did-not-receive-customer-audio
        - call.in-progress.error-transfer-failed
        - customer-busy
        - customer-ended-call
        - customer-ended-call-before-warm-transfer
        - customer-ended-call-after-warm-transfer-attempt
        - customer-ended-call-during-transfer
        - customer-did-not-answer
        - customer-did-not-give-microphone-permission
        - exceeded-max-duration
        - manually-canceled
        - phone-call-provider-closed-websocket
        - call.forwarding.operator-busy
        - silence-timed-out
        - call.in-progress.error-sip-inbound-call-failed-to-connect
        - call.in-progress.error-providerfault-outbound-sip-403-forbidden
        - >-
          call.in-progress.error-providerfault-outbound-sip-407-proxy-authentication-required
        - call.in-progress.error-providerfault-outbound-sip-408-request-timeout
        - >-
          call.in-progress.error-providerfault-outbound-sip-503-service-unavailable
        - >-
          call.in-progress.error-providerfault-outbound-sip-480-temporarily-unavailable
        - call.in-progress.error-sip-outbound-call-failed-to-connect
        - call.ringing.hook-executed-say
        - call.ringing.hook-executed-transfer
        - call.ending.hook-executed-say
        - call.ending.hook-executed-transfer
        - call.ringing.sip-inbound-caller-hungup-before-call-connect
        - call.ringing.error-sip-inbound-call-failed-to-connect
        - twilio-failed-to-connect-call
        - twilio-reported-customer-misdialed
        - vonage-rejected
        - voicemail
        - call-deleted
      description: >-
        This is the reason the call ended. This can also be found at
        `call.endedReason` on GET /call/:id.
      title: ServerMessageEndOfCallReportEndedReason
    ServerMessageEndOfCallReportCostsItems:
      oneOf:
        - $ref: '#/components/schemas/TransportCost'
        - $ref: '#/components/schemas/TranscriberCost'
        - $ref: '#/components/schemas/ModelCost'
        - $ref: '#/components/schemas/VoiceCost'
        - $ref: '#/components/schemas/VapiCost'
        - $ref: '#/components/schemas/VoicemailDetectionCost'
        - $ref: '#/components/schemas/AnalysisCost'
        - $ref: '#/components/schemas/KnowledgeBaseCost'
      title: ServerMessageEndOfCallReportCostsItems
    ServerMessageEndOfCallReportDestination:
      oneOf:
        - $ref: '#/components/schemas/TransferDestinationNumber'
        - $ref: '#/components/schemas/TransferDestinationSip'
      description: >-
        This is the destination the call was transferred to, if the call was
        forwarded.

        This can also be found at `call.destination` on GET /call/:id.
      title: ServerMessageEndOfCallReportDestination
    ServerMessageEndOfCallReport:
      type: object
      properties:
        phoneNumber:
          $ref: '#/components/schemas/ServerMessageEndOfCallReportPhoneNumber'
          description: This is the phone number that the message is associated with.
        type:
          $ref: '#/components/schemas/ServerMessageEndOfCallReportType'
          description: >-
            This is the type of the message. "end-of-call-report" is sent when
            the call ends and post-processing is complete.
        endedReason:
          $ref: '#/components/schemas/ServerMessageEndOfCallReportEndedReason'
          description: >-
            This is the reason the call ended. This can also be found at
            `call.endedReason` on GET /call/:id.
        cost:
          type: number
          format: double
          description: >-
            This is the cost of the call in USD. This can also be found at
            `call.cost` on GET /call/:id.
        costs:
          type: array
          items:
            $ref: '#/components/schemas/ServerMessageEndOfCallReportCostsItems'
          description: >-
            These are the costs of individual components of the call in USD.
            This can also be found at `call.costs` on GET /call/:id.
        destination:
          $ref: '#/components/schemas/ServerMessageEndOfCallReportDestination'
          description: >-
            This is the destination the call was transferred to, if the call was
            forwarded.

            This can also be found at `call.destination` on GET /call/:id.
        timestamp:
          type: number
          format: double
          description: This is the timestamp of the message.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: >-
            These are the artifacts from the call. This can also be found at
            `call.artifact` on GET /call/:id.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: This is the assistant that the message is associated with.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer that the message is associated with.
        call:
          $ref: '#/components/schemas/Call'
          description: This is the call that the message is associated with.
        chat:
          $ref: '#/components/schemas/Chat'
          description: This is the chat object.
        analysis:
          $ref: '#/components/schemas/Analysis'
          description: >-
            This is the analysis of the call. This can also be found at
            `call.analysis` on GET /call/:id.
        startedAt:
          type: string
          format: date-time
          description: >-
            This is the ISO 8601 date-time string of when the call started. This
            can also be found at `call.startedAt` on GET /call/:id.
        endedAt:
          type: string
          format: date-time
          description: >-
            This is the ISO 8601 date-time string of when the call ended. This
            can also be found at `call.endedAt` on GET /call/:id.
        compliance:
          $ref: '#/components/schemas/Compliance'
          description: >-
            This is the compliance result of the call. This can also be found at
            `call.compliance` on GET /call/:id.
      required:
        - type
        - endedReason
        - artifact
        - analysis
      title: ServerMessageEndOfCallReport
    ServerMessageHandoffDestinationRequestPhoneNumber:
      oneOf:
        - $ref: '#/components/schemas/CreateByoPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO'
      description: This is the phone number that the message is associated with.
      title: ServerMessageHandoffDestinationRequestPhoneNumber
    ServerMessageHandoffDestinationRequestType:
      type: string
      enum:
        - handoff-destination-request
      description: >-
        This is the type of the message. "handoff-destination-request" is sent
        when the model is requesting handoff but destination is unknown.
      title: ServerMessageHandoffDestinationRequestType
    ServerMessageHandoffDestinationRequestParameters:
      type: object
      properties: {}
      description: This is the parameters of the handoff destination request.
      title: ServerMessageHandoffDestinationRequestParameters
    ServerMessageHandoffDestinationRequest:
      type: object
      properties:
        phoneNumber:
          $ref: >-
            #/components/schemas/ServerMessageHandoffDestinationRequestPhoneNumber
          description: This is the phone number that the message is associated with.
        type:
          $ref: '#/components/schemas/ServerMessageHandoffDestinationRequestType'
          description: >-
            This is the type of the message. "handoff-destination-request" is
            sent when the model is requesting handoff but destination is
            unknown.
        timestamp:
          type: number
          format: double
          description: This is the timestamp of the message.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: |-
            This is a live version of the `call.artifact`.

            This matches what is stored on `call.artifact` after the call.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: This is the assistant that the message is associated with.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer that the message is associated with.
        call:
          $ref: '#/components/schemas/Call'
          description: This is the call that the message is associated with.
        chat:
          $ref: '#/components/schemas/Chat'
          description: This is the chat object.
        parameters:
          $ref: >-
            #/components/schemas/ServerMessageHandoffDestinationRequestParameters
          description: This is the parameters of the handoff destination request.
      required:
        - type
        - parameters
      title: ServerMessageHandoffDestinationRequest
    ServerMessageHangPhoneNumber:
      oneOf:
        - $ref: '#/components/schemas/CreateByoPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO'
      description: This is the phone number that the message is associated with.
      title: ServerMessageHangPhoneNumber
    ServerMessageHangType:
      type: string
      enum:
        - hang
      description: >-
        This is the type of the message. "hang" is sent when the assistant is
        hanging due to a delay. The delay can be caused by many factors, such
        as:

        - the model is too slow to respond

        - the voice is too slow to respond

        - the tool call is still waiting for a response from your server

        - etc.
      title: ServerMessageHangType
    ServerMessageHang:
      type: object
      properties:
        phoneNumber:
          $ref: '#/components/schemas/ServerMessageHangPhoneNumber'
          description: This is the phone number that the message is associated with.
        type:
          $ref: '#/components/schemas/ServerMessageHangType'
          description: >-
            This is the type of the message. "hang" is sent when the assistant
            is hanging due to a delay. The delay can be caused by many factors,
            such as:

            - the model is too slow to respond

            - the voice is too slow to respond

            - the tool call is still waiting for a response from your server

            - etc.
        timestamp:
          type: number
          format: double
          description: This is the timestamp of the message.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: |-
            This is a live version of the `call.artifact`.

            This matches what is stored on `call.artifact` after the call.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: This is the assistant that the message is associated with.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer that the message is associated with.
        call:
          $ref: '#/components/schemas/Call'
          description: This is the call that the message is associated with.
        chat:
          $ref: '#/components/schemas/Chat'
          description: This is the chat object.
      required:
        - type
      title: ServerMessageHang
    ServerMessageKnowledgeBaseRequestPhoneNumber:
      oneOf:
        - $ref: '#/components/schemas/CreateByoPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO'
      description: This is the phone number that the message is associated with.
      title: ServerMessageKnowledgeBaseRequestPhoneNumber
    ServerMessageKnowledgeBaseRequestType:
      type: string
      enum:
        - knowledge-base-request
      description: >-
        This is the type of the message. "knowledge-base-request" is sent to
        request knowledge base documents. To enable, use
        `assistant.knowledgeBase.provider=custom-knowledge-base`.
      title: ServerMessageKnowledgeBaseRequestType
    ServerMessageKnowledgeBaseRequestMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/UserMessage'
        - $ref: '#/components/schemas/SystemMessage'
        - $ref: '#/components/schemas/BotMessage'
        - $ref: '#/components/schemas/ToolCallMessage'
        - $ref: '#/components/schemas/ToolCallResultMessage'
      title: ServerMessageKnowledgeBaseRequestMessagesItems
    ServerMessageKnowledgeBaseRequest:
      type: object
      properties:
        phoneNumber:
          $ref: '#/components/schemas/ServerMessageKnowledgeBaseRequestPhoneNumber'
          description: This is the phone number that the message is associated with.
        type:
          $ref: '#/components/schemas/ServerMessageKnowledgeBaseRequestType'
          description: >-
            This is the type of the message. "knowledge-base-request" is sent to
            request knowledge base documents. To enable, use
            `assistant.knowledgeBase.provider=custom-knowledge-base`.
        messages:
          type: array
          items:
            $ref: >-
              #/components/schemas/ServerMessageKnowledgeBaseRequestMessagesItems
          description: >-
            These are the messages that are going to be sent to the `model`
            right after the `knowledge-base-request` webhook completes.
        messagesOpenAIFormatted:
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
          description: This is just `messages` formatted for OpenAI.
        timestamp:
          type: number
          format: double
          description: This is the timestamp of the message.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: |-
            This is a live version of the `call.artifact`.

            This matches what is stored on `call.artifact` after the call.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: This is the assistant that the message is associated with.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer that the message is associated with.
        call:
          $ref: '#/components/schemas/Call'
          description: This is the call that the message is associated with.
        chat:
          $ref: '#/components/schemas/Chat'
          description: This is the chat object.
      required:
        - type
        - messagesOpenAIFormatted
      title: ServerMessageKnowledgeBaseRequest
    ServerMessageModelOutputPhoneNumber:
      oneOf:
        - $ref: '#/components/schemas/CreateByoPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO'
      description: This is the phone number that the message is associated with.
      title: ServerMessageModelOutputPhoneNumber
    ServerMessageModelOutputType:
      type: string
      enum:
        - model-output
      description: >-
        This is the type of the message. "model-output" is sent as the model
        outputs tokens.
      title: ServerMessageModelOutputType
    ServerMessageModelOutputOutput:
      type: object
      properties: {}
      description: This is the output of the model. It can be a token or tool call.
      title: ServerMessageModelOutputOutput
    ServerMessageModelOutput:
      type: object
      properties:
        phoneNumber:
          $ref: '#/components/schemas/ServerMessageModelOutputPhoneNumber'
          description: This is the phone number that the message is associated with.
        type:
          $ref: '#/components/schemas/ServerMessageModelOutputType'
          description: >-
            This is the type of the message. "model-output" is sent as the model
            outputs tokens.
        turnId:
          type: string
          description: >-
            This is the unique identifier for the current LLM turn. All tokens
            from the same

            LLM response share the same turnId. Use this to group tokens and
            discard on interruption.
        timestamp:
          type: number
          format: double
          description: This is the timestamp of the message.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: |-
            This is a live version of the `call.artifact`.

            This matches what is stored on `call.artifact` after the call.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: This is the assistant that the message is associated with.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer that the message is associated with.
        call:
          $ref: '#/components/schemas/Call'
          description: This is the call that the message is associated with.
        chat:
          $ref: '#/components/schemas/Chat'
          description: This is the chat object.
        output:
          $ref: '#/components/schemas/ServerMessageModelOutputOutput'
          description: This is the output of the model. It can be a token or tool call.
      required:
        - type
        - output
      title: ServerMessageModelOutput
    ServerMessagePhoneCallControlPhoneNumber:
      oneOf:
        - $ref: '#/components/schemas/CreateByoPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO'
      description: This is the phone number that the message is associated with.
      title: ServerMessagePhoneCallControlPhoneNumber
    ServerMessagePhoneCallControlType:
      type: string
      enum:
        - phone-call-control
      description: >-
        This is the type of the message. "phone-call-control" is an advanced
        type of message.


        When it is requested in `assistant.serverMessages`, the hangup and
        forwarding responsibilities are delegated to your server. Vapi will no
        longer do the actual transfer and hangup.
      title: ServerMessagePhoneCallControlType
    ServerMessagePhoneCallControlRequest:
      type: string
      enum:
        - forward
        - hang-up
      description: This is the request to control the phone call.
      title: ServerMessagePhoneCallControlRequest
    ServerMessagePhoneCallControlDestination:
      oneOf:
        - $ref: '#/components/schemas/TransferDestinationNumber'
        - $ref: '#/components/schemas/TransferDestinationSip'
      description: >-
        This is the destination to forward the call to if the request is
        "forward".
      title: ServerMessagePhoneCallControlDestination
    ServerMessagePhoneCallControl:
      type: object
      properties:
        phoneNumber:
          $ref: '#/components/schemas/ServerMessagePhoneCallControlPhoneNumber'
          description: This is the phone number that the message is associated with.
        type:
          $ref: '#/components/schemas/ServerMessagePhoneCallControlType'
          description: >-
            This is the type of the message. "phone-call-control" is an advanced
            type of message.


            When it is requested in `assistant.serverMessages`, the hangup and
            forwarding responsibilities are delegated to your server. Vapi will
            no longer do the actual transfer and hangup.
        request:
          $ref: '#/components/schemas/ServerMessagePhoneCallControlRequest'
          description: This is the request to control the phone call.
        destination:
          $ref: '#/components/schemas/ServerMessagePhoneCallControlDestination'
          description: >-
            This is the destination to forward the call to if the request is
            "forward".
        timestamp:
          type: number
          format: double
          description: This is the timestamp of the message.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: |-
            This is a live version of the `call.artifact`.

            This matches what is stored on `call.artifact` after the call.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: This is the assistant that the message is associated with.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer that the message is associated with.
        call:
          $ref: '#/components/schemas/Call'
          description: This is the call that the message is associated with.
        chat:
          $ref: '#/components/schemas/Chat'
          description: This is the chat object.
      required:
        - type
        - request
      title: ServerMessagePhoneCallControl
    ServerMessageSpeechUpdatePhoneNumber:
      oneOf:
        - $ref: '#/components/schemas/CreateByoPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO'
      description: This is the phone number that the message is associated with.
      title: ServerMessageSpeechUpdatePhoneNumber
    ServerMessageSpeechUpdateType:
      type: string
      enum:
        - speech-update
      description: >-
        This is the type of the message. "speech-update" is sent whenever
        assistant or user start or stop speaking.
      title: ServerMessageSpeechUpdateType
    ServerMessageSpeechUpdateStatus:
      type: string
      enum:
        - started
        - stopped
      description: This is the status of the speech update.
      title: ServerMessageSpeechUpdateStatus
    ServerMessageSpeechUpdateRole:
      type: string
      enum:
        - assistant
        - user
      description: This is the role which the speech update is for.
      title: ServerMessageSpeechUpdateRole
    ServerMessageSpeechUpdate:
      type: object
      properties:
        phoneNumber:
          $ref: '#/components/schemas/ServerMessageSpeechUpdatePhoneNumber'
          description: This is the phone number that the message is associated with.
        type:
          $ref: '#/components/schemas/ServerMessageSpeechUpdateType'
          description: >-
            This is the type of the message. "speech-update" is sent whenever
            assistant or user start or stop speaking.
        status:
          $ref: '#/components/schemas/ServerMessageSpeechUpdateStatus'
          description: This is the status of the speech update.
        role:
          $ref: '#/components/schemas/ServerMessageSpeechUpdateRole'
          description: This is the role which the speech update is for.
        turn:
          type: number
          format: double
          description: This is the turn number of the speech update (0-indexed).
        timestamp:
          type: number
          format: double
          description: This is the timestamp of the message.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: |-
            This is a live version of the `call.artifact`.

            This matches what is stored on `call.artifact` after the call.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: This is the assistant that the message is associated with.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer that the message is associated with.
        call:
          $ref: '#/components/schemas/Call'
          description: This is the call that the message is associated with.
        chat:
          $ref: '#/components/schemas/Chat'
          description: This is the chat object.
      required:
        - type
        - status
        - role
      title: ServerMessageSpeechUpdate
    ServerMessageStatusUpdatePhoneNumber:
      oneOf:
        - $ref: '#/components/schemas/CreateByoPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO'
      description: This is the phone number that the message is associated with.
      title: ServerMessageStatusUpdatePhoneNumber
    ServerMessageStatusUpdateType:
      type: string
      enum:
        - status-update
      description: >-
        This is the type of the message. "status-update" is sent whenever the
        `call.status` changes.
      title: ServerMessageStatusUpdateType
    ServerMessageStatusUpdateStatus:
      type: string
      enum:
        - scheduled
        - queued
        - ringing
        - in-progress
        - forwarding
        - ended
        - not-found
        - deletion-failed
      description: This is the status of the call.
      title: ServerMessageStatusUpdateStatus
    ServerMessageStatusUpdateEndedReason:
      type: string
      enum:
        - call-start-error-neither-assistant-nor-server-set
        - assistant-request-failed
        - assistant-request-returned-error
        - assistant-request-returned-unspeakable-error
        - assistant-request-returned-invalid-assistant
        - assistant-request-returned-no-assistant
        - assistant-request-returned-forwarding-phone-number
        - scheduled-call-deleted
        - call.start.error-vapifault-get-org
        - call.start.error-vapifault-get-subscription
        - call.start.error-get-assistant
        - call.start.error-get-phone-number
        - call.start.error-get-customer
        - call.start.error-get-resources-validation
        - call.start.error-vapi-number-international
        - call.start.error-vapi-number-outbound-daily-limit
        - call.start.error-get-transport
        - call.start.error-subscription-wallet-does-not-exist
        - call.start.error-fraud-check-failed
        - call.start.error-subscription-frozen
        - call.start.error-subscription-insufficient-credits
        - call.start.error-subscription-upgrade-failed
        - call.start.error-subscription-concurrency-limit-reached
        - call.start.error-enterprise-feature-not-available-recording-consent
        - assistant-not-valid
        - call.start.error-vapifault-database-error
        - assistant-not-found
        - pipeline-error-openai-voice-failed
        - pipeline-error-cartesia-voice-failed
        - pipeline-error-deepgram-voice-failed
        - pipeline-error-eleven-labs-voice-failed
        - pipeline-error-playht-voice-failed
        - pipeline-error-lmnt-voice-failed
        - pipeline-error-azure-voice-failed
        - pipeline-error-rime-ai-voice-failed
        - pipeline-error-smallest-ai-voice-failed
        - pipeline-error-vapi-voice-failed
        - pipeline-error-neuphonic-voice-failed
        - pipeline-error-hume-voice-failed
        - pipeline-error-sesame-voice-failed
        - pipeline-error-inworld-voice-failed
        - pipeline-error-minimax-voice-failed
        - pipeline-error-wellsaid-voice-failed
        - pipeline-error-tavus-video-failed
        - call.in-progress.error-vapifault-openai-voice-failed
        - call.in-progress.error-vapifault-cartesia-voice-failed
        - call.in-progress.error-vapifault-deepgram-voice-failed
        - call.in-progress.error-vapifault-eleven-labs-voice-failed
        - call.in-progress.error-vapifault-playht-voice-failed
        - call.in-progress.error-vapifault-lmnt-voice-failed
        - call.in-progress.error-vapifault-azure-voice-failed
        - call.in-progress.error-vapifault-rime-ai-voice-failed
        - call.in-progress.error-vapifault-smallest-ai-voice-failed
        - call.in-progress.error-vapifault-vapi-voice-failed
        - call.in-progress.error-vapifault-neuphonic-voice-failed
        - call.in-progress.error-vapifault-hume-voice-failed
        - call.in-progress.error-vapifault-sesame-voice-failed
        - call.in-progress.error-vapifault-inworld-voice-failed
        - call.in-progress.error-vapifault-minimax-voice-failed
        - call.in-progress.error-vapifault-wellsaid-voice-failed
        - call.in-progress.error-vapifault-tavus-video-failed
        - pipeline-error-vapi-llm-failed
        - pipeline-error-vapi-400-bad-request-validation-failed
        - pipeline-error-vapi-401-unauthorized
        - pipeline-error-vapi-403-model-access-denied
        - pipeline-error-vapi-429-exceeded-quota
        - pipeline-error-vapi-500-server-error
        - pipeline-error-vapi-503-server-overloaded-error
        - call.in-progress.error-providerfault-vapi-llm-failed
        - >-
          call.in-progress.error-vapifault-vapi-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-vapi-401-unauthorized
        - call.in-progress.error-vapifault-vapi-403-model-access-denied
        - call.in-progress.error-vapifault-vapi-429-exceeded-quota
        - call.in-progress.error-providerfault-vapi-500-server-error
        - call.in-progress.error-providerfault-vapi-503-server-overloaded-error
        - pipeline-error-deepgram-transcriber-failed
        - pipeline-error-deepgram-transcriber-api-key-missing
        - call.in-progress.error-vapifault-deepgram-transcriber-failed
        - pipeline-error-gladia-transcriber-failed
        - call.in-progress.error-vapifault-gladia-transcriber-failed
        - pipeline-error-speechmatics-transcriber-failed
        - call.in-progress.error-vapifault-speechmatics-transcriber-failed
        - pipeline-error-assembly-ai-transcriber-failed
        - pipeline-error-assembly-ai-returning-400-insufficent-funds
        - pipeline-error-assembly-ai-returning-400-paid-only-feature
        - pipeline-error-assembly-ai-returning-401-invalid-credentials
        - pipeline-error-assembly-ai-returning-500-invalid-schema
        - pipeline-error-assembly-ai-returning-500-word-boost-parsing-failed
        - call.in-progress.error-vapifault-assembly-ai-transcriber-failed
        - >-
          call.in-progress.error-vapifault-assembly-ai-returning-400-insufficent-funds
        - >-
          call.in-progress.error-vapifault-assembly-ai-returning-400-paid-only-feature
        - >-
          call.in-progress.error-vapifault-assembly-ai-returning-401-invalid-credentials
        - >-
          call.in-progress.error-vapifault-assembly-ai-returning-500-invalid-schema
        - >-
          call.in-progress.error-vapifault-assembly-ai-returning-500-word-boost-parsing-failed
        - pipeline-error-talkscriber-transcriber-failed
        - call.in-progress.error-vapifault-talkscriber-transcriber-failed
        - pipeline-error-azure-speech-transcriber-failed
        - call.in-progress.error-vapifault-azure-speech-transcriber-failed
        - pipeline-error-eleven-labs-transcriber-failed
        - call.in-progress.error-vapifault-eleven-labs-transcriber-failed
        - pipeline-error-google-transcriber-failed
        - call.in-progress.error-vapifault-google-transcriber-failed
        - pipeline-error-openai-transcriber-failed
        - call.in-progress.error-vapifault-openai-transcriber-failed
        - pipeline-error-soniox-transcriber-auth-failed
        - pipeline-error-soniox-transcriber-rate-limited
        - pipeline-error-soniox-transcriber-invalid-config
        - pipeline-error-soniox-transcriber-server-error
        - pipeline-error-soniox-transcriber-failed
        - call.in-progress.error-vapifault-soniox-transcriber-auth-failed
        - call.in-progress.error-vapifault-soniox-transcriber-rate-limited
        - call.in-progress.error-vapifault-soniox-transcriber-invalid-config
        - call.in-progress.error-vapifault-soniox-transcriber-server-error
        - call.in-progress.error-vapifault-soniox-transcriber-failed
        - call.in-progress.error-pipeline-no-available-llm-model
        - worker-shutdown
        - vonage-disconnected
        - vonage-failed-to-connect-call
        - vonage-completed
        - phone-call-provider-bypass-enabled-but-no-call-received
        - call.in-progress.error-providerfault-transport-never-connected
        - call.in-progress.error-vapifault-worker-not-available
        - call.in-progress.error-vapifault-transport-never-connected
        - >-
          call.in-progress.error-vapifault-transport-connected-but-call-not-active
        - >-
          call.in-progress.error-vapifault-call-started-but-connection-to-transport-missing
        - call.in-progress.error-vapifault-worker-died
        - call.in-progress.twilio-completed-call
        - call.in-progress.sip-completed-call
        - call.in-progress.error-sip-inbound-call-failed-to-connect
        - >-
          call.in-progress.error-providerfault-outbound-sip-503-service-unavailable
        - call.in-progress.error-sip-outbound-call-failed-to-connect
        - call.ringing.error-sip-inbound-call-failed-to-connect
        - call.in-progress.error-providerfault-openai-llm-failed
        - call.in-progress.error-providerfault-azure-openai-llm-failed
        - call.in-progress.error-providerfault-groq-llm-failed
        - call.in-progress.error-providerfault-google-llm-failed
        - call.in-progress.error-providerfault-xai-llm-failed
        - call.in-progress.error-providerfault-mistral-llm-failed
        - call.in-progress.error-providerfault-minimax-llm-failed
        - call.in-progress.error-providerfault-inflection-ai-llm-failed
        - call.in-progress.error-providerfault-cerebras-llm-failed
        - call.in-progress.error-providerfault-deep-seek-llm-failed
        - call.in-progress.error-providerfault-baseten-llm-failed
        - call.in-progress.error-vapifault-chat-pipeline-failed-to-start
        - pipeline-error-openai-400-bad-request-validation-failed
        - pipeline-error-openai-401-unauthorized
        - pipeline-error-openai-401-incorrect-api-key
        - pipeline-error-openai-401-account-not-in-organization
        - pipeline-error-openai-403-model-access-denied
        - pipeline-error-openai-429-exceeded-quota
        - pipeline-error-openai-429-rate-limit-reached
        - pipeline-error-openai-500-server-error
        - pipeline-error-openai-503-server-overloaded-error
        - pipeline-error-openai-llm-failed
        - >-
          call.in-progress.error-vapifault-openai-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-openai-401-unauthorized
        - call.in-progress.error-vapifault-openai-401-incorrect-api-key
        - >-
          call.in-progress.error-vapifault-openai-401-account-not-in-organization
        - call.in-progress.error-vapifault-openai-403-model-access-denied
        - call.in-progress.error-vapifault-openai-429-exceeded-quota
        - call.in-progress.error-vapifault-openai-429-rate-limit-reached
        - call.in-progress.error-providerfault-openai-500-server-error
        - >-
          call.in-progress.error-providerfault-openai-503-server-overloaded-error
        - pipeline-error-azure-openai-400-bad-request-validation-failed
        - pipeline-error-azure-openai-401-unauthorized
        - pipeline-error-azure-openai-403-model-access-denied
        - pipeline-error-azure-openai-429-exceeded-quota
        - pipeline-error-azure-openai-500-server-error
        - pipeline-error-azure-openai-503-server-overloaded-error
        - pipeline-error-azure-openai-llm-failed
        - >-
          call.in-progress.error-vapifault-azure-openai-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-azure-openai-401-unauthorized
        - call.in-progress.error-vapifault-azure-openai-403-model-access-denied
        - call.in-progress.error-vapifault-azure-openai-429-exceeded-quota
        - call.in-progress.error-providerfault-azure-openai-500-server-error
        - >-
          call.in-progress.error-providerfault-azure-openai-503-server-overloaded-error
        - pipeline-error-google-400-bad-request-validation-failed
        - pipeline-error-google-401-unauthorized
        - pipeline-error-google-403-model-access-denied
        - pipeline-error-google-429-exceeded-quota
        - pipeline-error-google-500-server-error
        - pipeline-error-google-503-server-overloaded-error
        - pipeline-error-google-llm-failed
        - >-
          call.in-progress.error-vapifault-google-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-google-401-unauthorized
        - call.in-progress.error-vapifault-google-403-model-access-denied
        - call.in-progress.error-vapifault-google-429-exceeded-quota
        - call.in-progress.error-providerfault-google-500-server-error
        - >-
          call.in-progress.error-providerfault-google-503-server-overloaded-error
        - pipeline-error-xai-400-bad-request-validation-failed
        - pipeline-error-xai-401-unauthorized
        - pipeline-error-xai-403-model-access-denied
        - pipeline-error-xai-429-exceeded-quota
        - pipeline-error-xai-500-server-error
        - pipeline-error-xai-503-server-overloaded-error
        - pipeline-error-xai-llm-failed
        - call.in-progress.error-vapifault-xai-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-xai-401-unauthorized
        - call.in-progress.error-vapifault-xai-403-model-access-denied
        - call.in-progress.error-vapifault-xai-429-exceeded-quota
        - call.in-progress.error-providerfault-xai-500-server-error
        - call.in-progress.error-providerfault-xai-503-server-overloaded-error
        - pipeline-error-baseten-400-bad-request-validation-failed
        - pipeline-error-baseten-401-unauthorized
        - pipeline-error-baseten-403-model-access-denied
        - pipeline-error-baseten-429-exceeded-quota
        - pipeline-error-baseten-500-server-error
        - pipeline-error-baseten-503-server-overloaded-error
        - pipeline-error-baseten-llm-failed
        - >-
          call.in-progress.error-vapifault-baseten-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-baseten-401-unauthorized
        - call.in-progress.error-vapifault-baseten-403-model-access-denied
        - call.in-progress.error-vapifault-baseten-429-exceeded-quota
        - call.in-progress.error-providerfault-baseten-500-server-error
        - >-
          call.in-progress.error-providerfault-baseten-503-server-overloaded-error
        - pipeline-error-mistral-400-bad-request-validation-failed
        - pipeline-error-mistral-401-unauthorized
        - pipeline-error-mistral-403-model-access-denied
        - pipeline-error-mistral-429-exceeded-quota
        - pipeline-error-mistral-500-server-error
        - pipeline-error-mistral-503-server-overloaded-error
        - pipeline-error-mistral-llm-failed
        - >-
          call.in-progress.error-vapifault-mistral-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-mistral-401-unauthorized
        - call.in-progress.error-vapifault-mistral-403-model-access-denied
        - call.in-progress.error-vapifault-mistral-429-exceeded-quota
        - call.in-progress.error-providerfault-mistral-500-server-error
        - >-
          call.in-progress.error-providerfault-mistral-503-server-overloaded-error
        - pipeline-error-minimax-400-bad-request-validation-failed
        - pipeline-error-minimax-401-unauthorized
        - pipeline-error-minimax-403-model-access-denied
        - pipeline-error-minimax-429-exceeded-quota
        - pipeline-error-minimax-500-server-error
        - pipeline-error-minimax-503-server-overloaded-error
        - pipeline-error-minimax-llm-failed
        - >-
          call.in-progress.error-vapifault-minimax-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-minimax-401-unauthorized
        - call.in-progress.error-vapifault-minimax-403-model-access-denied
        - call.in-progress.error-vapifault-minimax-429-exceeded-quota
        - call.in-progress.error-providerfault-minimax-500-server-error
        - >-
          call.in-progress.error-providerfault-minimax-503-server-overloaded-error
        - pipeline-error-inflection-ai-400-bad-request-validation-failed
        - pipeline-error-inflection-ai-401-unauthorized
        - pipeline-error-inflection-ai-403-model-access-denied
        - pipeline-error-inflection-ai-429-exceeded-quota
        - pipeline-error-inflection-ai-500-server-error
        - pipeline-error-inflection-ai-503-server-overloaded-error
        - pipeline-error-inflection-ai-llm-failed
        - >-
          call.in-progress.error-vapifault-inflection-ai-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-inflection-ai-401-unauthorized
        - call.in-progress.error-vapifault-inflection-ai-403-model-access-denied
        - call.in-progress.error-vapifault-inflection-ai-429-exceeded-quota
        - call.in-progress.error-providerfault-inflection-ai-500-server-error
        - >-
          call.in-progress.error-providerfault-inflection-ai-503-server-overloaded-error
        - pipeline-error-deep-seek-400-bad-request-validation-failed
        - pipeline-error-deep-seek-401-unauthorized
        - pipeline-error-deep-seek-403-model-access-denied
        - pipeline-error-deep-seek-429-exceeded-quota
        - pipeline-error-deep-seek-500-server-error
        - pipeline-error-deep-seek-503-server-overloaded-error
        - pipeline-error-deep-seek-llm-failed
        - >-
          call.in-progress.error-vapifault-deep-seek-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-deep-seek-401-unauthorized
        - call.in-progress.error-vapifault-deep-seek-403-model-access-denied
        - call.in-progress.error-vapifault-deep-seek-429-exceeded-quota
        - call.in-progress.error-providerfault-deep-seek-500-server-error
        - >-
          call.in-progress.error-providerfault-deep-seek-503-server-overloaded-error
        - pipeline-error-groq-400-bad-request-validation-failed
        - pipeline-error-groq-401-unauthorized
        - pipeline-error-groq-403-model-access-denied
        - pipeline-error-groq-429-exceeded-quota
        - pipeline-error-groq-500-server-error
        - pipeline-error-groq-503-server-overloaded-error
        - pipeline-error-groq-llm-failed
        - >-
          call.in-progress.error-vapifault-groq-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-groq-401-unauthorized
        - call.in-progress.error-vapifault-groq-403-model-access-denied
        - call.in-progress.error-vapifault-groq-429-exceeded-quota
        - call.in-progress.error-providerfault-groq-500-server-error
        - call.in-progress.error-providerfault-groq-503-server-overloaded-error
        - pipeline-error-cerebras-400-bad-request-validation-failed
        - pipeline-error-cerebras-401-unauthorized
        - pipeline-error-cerebras-403-model-access-denied
        - pipeline-error-cerebras-429-exceeded-quota
        - pipeline-error-cerebras-500-server-error
        - pipeline-error-cerebras-503-server-overloaded-error
        - pipeline-error-cerebras-llm-failed
        - >-
          call.in-progress.error-vapifault-cerebras-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-cerebras-401-unauthorized
        - call.in-progress.error-vapifault-cerebras-403-model-access-denied
        - call.in-progress.error-vapifault-cerebras-429-exceeded-quota
        - call.in-progress.error-providerfault-cerebras-500-server-error
        - >-
          call.in-progress.error-providerfault-cerebras-503-server-overloaded-error
        - pipeline-error-anthropic-400-bad-request-validation-failed
        - pipeline-error-anthropic-401-unauthorized
        - pipeline-error-anthropic-403-model-access-denied
        - pipeline-error-anthropic-429-exceeded-quota
        - pipeline-error-anthropic-500-server-error
        - pipeline-error-anthropic-503-server-overloaded-error
        - pipeline-error-anthropic-llm-failed
        - call.in-progress.error-providerfault-anthropic-llm-failed
        - >-
          call.in-progress.error-vapifault-anthropic-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-anthropic-401-unauthorized
        - call.in-progress.error-vapifault-anthropic-403-model-access-denied
        - call.in-progress.error-vapifault-anthropic-429-exceeded-quota
        - call.in-progress.error-providerfault-anthropic-500-server-error
        - >-
          call.in-progress.error-providerfault-anthropic-503-server-overloaded-error
        - pipeline-error-anthropic-bedrock-400-bad-request-validation-failed
        - pipeline-error-anthropic-bedrock-401-unauthorized
        - pipeline-error-anthropic-bedrock-403-model-access-denied
        - pipeline-error-anthropic-bedrock-429-exceeded-quota
        - pipeline-error-anthropic-bedrock-500-server-error
        - pipeline-error-anthropic-bedrock-503-server-overloaded-error
        - pipeline-error-anthropic-bedrock-llm-failed
        - call.in-progress.error-providerfault-anthropic-bedrock-llm-failed
        - >-
          call.in-progress.error-vapifault-anthropic-bedrock-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-anthropic-bedrock-401-unauthorized
        - >-
          call.in-progress.error-vapifault-anthropic-bedrock-403-model-access-denied
        - call.in-progress.error-vapifault-anthropic-bedrock-429-exceeded-quota
        - >-
          call.in-progress.error-providerfault-anthropic-bedrock-500-server-error
        - >-
          call.in-progress.error-providerfault-anthropic-bedrock-503-server-overloaded-error
        - pipeline-error-anthropic-vertex-400-bad-request-validation-failed
        - pipeline-error-anthropic-vertex-401-unauthorized
        - pipeline-error-anthropic-vertex-403-model-access-denied
        - pipeline-error-anthropic-vertex-429-exceeded-quota
        - pipeline-error-anthropic-vertex-500-server-error
        - pipeline-error-anthropic-vertex-503-server-overloaded-error
        - pipeline-error-anthropic-vertex-llm-failed
        - call.in-progress.error-providerfault-anthropic-vertex-llm-failed
        - >-
          call.in-progress.error-vapifault-anthropic-vertex-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-anthropic-vertex-401-unauthorized
        - >-
          call.in-progress.error-vapifault-anthropic-vertex-403-model-access-denied
        - call.in-progress.error-vapifault-anthropic-vertex-429-exceeded-quota
        - call.in-progress.error-providerfault-anthropic-vertex-500-server-error
        - >-
          call.in-progress.error-providerfault-anthropic-vertex-503-server-overloaded-error
        - pipeline-error-together-ai-400-bad-request-validation-failed
        - pipeline-error-together-ai-401-unauthorized
        - pipeline-error-together-ai-403-model-access-denied
        - pipeline-error-together-ai-429-exceeded-quota
        - pipeline-error-together-ai-500-server-error
        - pipeline-error-together-ai-503-server-overloaded-error
        - pipeline-error-together-ai-llm-failed
        - call.in-progress.error-providerfault-together-ai-llm-failed
        - >-
          call.in-progress.error-vapifault-together-ai-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-together-ai-401-unauthorized
        - call.in-progress.error-vapifault-together-ai-403-model-access-denied
        - call.in-progress.error-vapifault-together-ai-429-exceeded-quota
        - call.in-progress.error-providerfault-together-ai-500-server-error
        - >-
          call.in-progress.error-providerfault-together-ai-503-server-overloaded-error
        - pipeline-error-anyscale-400-bad-request-validation-failed
        - pipeline-error-anyscale-401-unauthorized
        - pipeline-error-anyscale-403-model-access-denied
        - pipeline-error-anyscale-429-exceeded-quota
        - pipeline-error-anyscale-500-server-error
        - pipeline-error-anyscale-503-server-overloaded-error
        - pipeline-error-anyscale-llm-failed
        - call.in-progress.error-providerfault-anyscale-llm-failed
        - >-
          call.in-progress.error-vapifault-anyscale-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-anyscale-401-unauthorized
        - call.in-progress.error-vapifault-anyscale-403-model-access-denied
        - call.in-progress.error-vapifault-anyscale-429-exceeded-quota
        - call.in-progress.error-providerfault-anyscale-500-server-error
        - >-
          call.in-progress.error-providerfault-anyscale-503-server-overloaded-error
        - pipeline-error-openrouter-400-bad-request-validation-failed
        - pipeline-error-openrouter-401-unauthorized
        - pipeline-error-openrouter-403-model-access-denied
        - pipeline-error-openrouter-429-exceeded-quota
        - pipeline-error-openrouter-500-server-error
        - pipeline-error-openrouter-503-server-overloaded-error
        - pipeline-error-openrouter-llm-failed
        - call.in-progress.error-providerfault-openrouter-llm-failed
        - >-
          call.in-progress.error-vapifault-openrouter-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-openrouter-401-unauthorized
        - call.in-progress.error-vapifault-openrouter-403-model-access-denied
        - call.in-progress.error-vapifault-openrouter-429-exceeded-quota
        - call.in-progress.error-providerfault-openrouter-500-server-error
        - >-
          call.in-progress.error-providerfault-openrouter-503-server-overloaded-error
        - pipeline-error-perplexity-ai-400-bad-request-validation-failed
        - pipeline-error-perplexity-ai-401-unauthorized
        - pipeline-error-perplexity-ai-403-model-access-denied
        - pipeline-error-perplexity-ai-429-exceeded-quota
        - pipeline-error-perplexity-ai-500-server-error
        - pipeline-error-perplexity-ai-503-server-overloaded-error
        - pipeline-error-perplexity-ai-llm-failed
        - call.in-progress.error-providerfault-perplexity-ai-llm-failed
        - >-
          call.in-progress.error-vapifault-perplexity-ai-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-perplexity-ai-401-unauthorized
        - call.in-progress.error-vapifault-perplexity-ai-403-model-access-denied
        - call.in-progress.error-vapifault-perplexity-ai-429-exceeded-quota
        - call.in-progress.error-providerfault-perplexity-ai-500-server-error
        - >-
          call.in-progress.error-providerfault-perplexity-ai-503-server-overloaded-error
        - pipeline-error-deepinfra-400-bad-request-validation-failed
        - pipeline-error-deepinfra-401-unauthorized
        - pipeline-error-deepinfra-403-model-access-denied
        - pipeline-error-deepinfra-429-exceeded-quota
        - pipeline-error-deepinfra-500-server-error
        - pipeline-error-deepinfra-503-server-overloaded-error
        - pipeline-error-deepinfra-llm-failed
        - call.in-progress.error-providerfault-deepinfra-llm-failed
        - >-
          call.in-progress.error-vapifault-deepinfra-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-deepinfra-401-unauthorized
        - call.in-progress.error-vapifault-deepinfra-403-model-access-denied
        - call.in-progress.error-vapifault-deepinfra-429-exceeded-quota
        - call.in-progress.error-providerfault-deepinfra-500-server-error
        - >-
          call.in-progress.error-providerfault-deepinfra-503-server-overloaded-error
        - pipeline-error-runpod-400-bad-request-validation-failed
        - pipeline-error-runpod-401-unauthorized
        - pipeline-error-runpod-403-model-access-denied
        - pipeline-error-runpod-429-exceeded-quota
        - pipeline-error-runpod-500-server-error
        - pipeline-error-runpod-503-server-overloaded-error
        - pipeline-error-runpod-llm-failed
        - call.in-progress.error-providerfault-runpod-llm-failed
        - >-
          call.in-progress.error-vapifault-runpod-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-runpod-401-unauthorized
        - call.in-progress.error-vapifault-runpod-403-model-access-denied
        - call.in-progress.error-vapifault-runpod-429-exceeded-quota
        - call.in-progress.error-providerfault-runpod-500-server-error
        - >-
          call.in-progress.error-providerfault-runpod-503-server-overloaded-error
        - pipeline-error-custom-llm-400-bad-request-validation-failed
        - pipeline-error-custom-llm-401-unauthorized
        - pipeline-error-custom-llm-403-model-access-denied
        - pipeline-error-custom-llm-429-exceeded-quota
        - pipeline-error-custom-llm-500-server-error
        - pipeline-error-custom-llm-503-server-overloaded-error
        - pipeline-error-custom-llm-llm-failed
        - call.in-progress.error-providerfault-custom-llm-llm-failed
        - >-
          call.in-progress.error-vapifault-custom-llm-400-bad-request-validation-failed
        - call.in-progress.error-vapifault-custom-llm-401-unauthorized
        - call.in-progress.error-vapifault-custom-llm-403-model-access-denied
        - call.in-progress.error-vapifault-custom-llm-429-exceeded-quota
        - call.in-progress.error-providerfault-custom-llm-500-server-error
        - >-
          call.in-progress.error-providerfault-custom-llm-503-server-overloaded-error
        - call.in-progress.error-pipeline-ws-model-connection-failed
        - pipeline-error-custom-voice-failed
        - pipeline-error-cartesia-socket-hang-up
        - pipeline-error-cartesia-requested-payment
        - pipeline-error-cartesia-500-server-error
        - pipeline-error-cartesia-502-server-error
        - pipeline-error-cartesia-503-server-error
        - pipeline-error-cartesia-522-server-error
        - call.in-progress.error-vapifault-cartesia-socket-hang-up
        - call.in-progress.error-vapifault-cartesia-requested-payment
        - call.in-progress.error-providerfault-cartesia-500-server-error
        - call.in-progress.error-providerfault-cartesia-503-server-error
        - call.in-progress.error-providerfault-cartesia-522-server-error
        - pipeline-error-eleven-labs-voice-not-found
        - pipeline-error-eleven-labs-quota-exceeded
        - pipeline-error-eleven-labs-unauthorized-access
        - pipeline-error-eleven-labs-unauthorized-to-access-model
        - pipeline-error-eleven-labs-professional-voices-only-for-creator-plus
        - pipeline-error-eleven-labs-blocked-free-plan-and-requested-upgrade
        - >-
          pipeline-error-eleven-labs-blocked-concurrent-requests-and-requested-upgrade
        - >-
          pipeline-error-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade
        - pipeline-error-eleven-labs-system-busy-and-requested-upgrade
        - pipeline-error-eleven-labs-voice-not-fine-tuned
        - pipeline-error-eleven-labs-invalid-api-key
        - pipeline-error-eleven-labs-invalid-voice-samples
        - pipeline-error-eleven-labs-voice-disabled-by-owner
        - pipeline-error-eleven-labs-vapi-voice-disabled-by-owner
        - pipeline-error-eleven-labs-blocked-account-in-probation
        - pipeline-error-eleven-labs-blocked-content-against-their-policy
        - pipeline-error-eleven-labs-missing-samples-for-voice-clone
        - pipeline-error-eleven-labs-voice-not-fine-tuned-and-cannot-be-used
        - pipeline-error-eleven-labs-voice-not-allowed-for-free-users
        - pipeline-error-eleven-labs-max-character-limit-exceeded
        - >-
          pipeline-error-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification
        - pipeline-error-eleven-labs-500-server-error
        - pipeline-error-eleven-labs-503-server-error
        - call.in-progress.error-vapifault-eleven-labs-voice-not-found
        - call.in-progress.error-vapifault-eleven-labs-quota-exceeded
        - call.in-progress.error-vapifault-eleven-labs-unauthorized-access
        - >-
          call.in-progress.error-vapifault-eleven-labs-unauthorized-to-access-model
        - >-
          call.in-progress.error-vapifault-eleven-labs-professional-voices-only-for-creator-plus
        - >-
          call.in-progress.error-vapifault-eleven-labs-blocked-free-plan-and-requested-upgrade
        - >-
          call.in-progress.error-vapifault-eleven-labs-blocked-concurrent-requests-and-requested-upgrade
        - >-
          call.in-progress.error-vapifault-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade
        - >-
          call.in-progress.error-vapifault-eleven-labs-system-busy-and-requested-upgrade
        - call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned
        - call.in-progress.error-vapifault-eleven-labs-invalid-api-key
        - call.in-progress.error-vapifault-eleven-labs-invalid-voice-samples
        - call.in-progress.error-vapifault-eleven-labs-voice-disabled-by-owner
        - >-
          call.in-progress.error-vapifault-eleven-labs-blocked-account-in-probation
        - >-
          call.in-progress.error-vapifault-eleven-labs-blocked-content-against-their-policy
        - >-
          call.in-progress.error-vapifault-eleven-labs-missing-samples-for-voice-clone
        - >-
          call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned-and-cannot-be-used
        - >-
          call.in-progress.error-vapifault-eleven-labs-voice-not-allowed-for-free-users
        - >-
          call.in-progress.error-vapifault-eleven-labs-max-character-limit-exceeded
        - >-
          call.in-progress.error-vapifault-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification
        - >-
          call.in-progress.error-providerfault-eleven-labs-system-busy-and-requested-upgrade
        - call.in-progress.error-providerfault-eleven-labs-500-server-error
        - call.in-progress.error-providerfault-eleven-labs-503-server-error
        - pipeline-error-playht-request-timed-out
        - pipeline-error-playht-invalid-voice
        - pipeline-error-playht-unexpected-error
        - pipeline-error-playht-out-of-credits
        - pipeline-error-playht-invalid-emotion
        - pipeline-error-playht-voice-must-be-a-valid-voice-manifest-uri
        - pipeline-error-playht-401-unauthorized
        - pipeline-error-playht-403-forbidden-out-of-characters
        - pipeline-error-playht-403-forbidden-api-access-not-available
        - pipeline-error-playht-429-exceeded-quota
        - pipeline-error-playht-502-gateway-error
        - pipeline-error-playht-504-gateway-error
        - call.in-progress.error-vapifault-playht-request-timed-out
        - call.in-progress.error-vapifault-playht-invalid-voice
        - call.in-progress.error-vapifault-playht-unexpected-error
        - call.in-progress.error-vapifault-playht-out-of-credits
        - call.in-progress.error-vapifault-playht-invalid-emotion
        - >-
          call.in-progress.error-vapifault-playht-voice-must-be-a-valid-voice-manifest-uri
        - call.in-progress.error-vapifault-playht-401-unauthorized
        - >-
          call.in-progress.error-vapifault-playht-403-forbidden-out-of-characters
        - >-
          call.in-progress.error-vapifault-playht-403-forbidden-api-access-not-available
        - call.in-progress.error-vapifault-playht-429-exceeded-quota
        - call.in-progress.error-providerfault-playht-502-gateway-error
        - call.in-progress.error-providerfault-playht-504-gateway-error
        - pipeline-error-custom-transcriber-failed
        - call.in-progress.error-vapifault-custom-transcriber-failed
        - pipeline-error-eleven-labs-transcriber-failed
        - call.in-progress.error-vapifault-eleven-labs-transcriber-failed
        - >-
          pipeline-error-deepgram-returning-400-no-such-model-language-tier-combination
        - pipeline-error-deepgram-returning-401-invalid-credentials
        - pipeline-error-deepgram-returning-403-model-access-denied
        - pipeline-error-deepgram-returning-404-not-found
        - pipeline-error-deepgram-returning-500-invalid-json
        - pipeline-error-deepgram-returning-502-network-error
        - pipeline-error-deepgram-returning-502-bad-gateway-ehostunreach
        - pipeline-error-deepgram-returning-econnreset
        - >-
          call.in-progress.error-vapifault-deepgram-returning-400-no-such-model-language-tier-combination
        - >-
          call.in-progress.error-vapifault-deepgram-returning-401-invalid-credentials
        - call.in-progress.error-vapifault-deepgram-returning-404-not-found
        - >-
          call.in-progress.error-vapifault-deepgram-returning-403-model-access-denied
        - >-
          call.in-progress.error-providerfault-deepgram-returning-500-invalid-json
        - >-
          call.in-progress.error-providerfault-deepgram-returning-502-network-error
        - >-
          call.in-progress.error-providerfault-deepgram-returning-502-bad-gateway-ehostunreach
        - pipeline-error-google-transcriber-failed
        - call.in-progress.error-vapifault-google-transcriber-failed
        - pipeline-error-openai-transcriber-failed
        - call.in-progress.error-vapifault-openai-transcriber-failed
        - pipeline-error-soniox-transcriber-auth-failed
        - pipeline-error-soniox-transcriber-rate-limited
        - pipeline-error-soniox-transcriber-invalid-config
        - pipeline-error-soniox-transcriber-server-error
        - pipeline-error-soniox-transcriber-failed
        - call.in-progress.error-vapifault-soniox-transcriber-auth-failed
        - call.in-progress.error-vapifault-soniox-transcriber-rate-limited
        - call.in-progress.error-vapifault-soniox-transcriber-invalid-config
        - call.in-progress.error-vapifault-soniox-transcriber-server-error
        - call.in-progress.error-vapifault-soniox-transcriber-failed
        - call.in-progress.error-warm-transfer-max-duration
        - call.in-progress.error-warm-transfer-assistant-cancelled
        - call.in-progress.error-warm-transfer-silence-timeout
        - call.in-progress.error-warm-transfer-microphone-timeout
        - assistant-ended-call
        - assistant-said-end-call-phrase
        - assistant-ended-call-with-hangup-task
        - assistant-ended-call-after-message-spoken
        - assistant-forwarded-call
        - assistant-join-timed-out
        - call.in-progress.error-assistant-did-not-receive-customer-audio
        - call.in-progress.error-transfer-failed
        - customer-busy
        - customer-ended-call
        - customer-ended-call-before-warm-transfer
        - customer-ended-call-after-warm-transfer-attempt
        - customer-ended-call-during-transfer
        - customer-did-not-answer
        - customer-did-not-give-microphone-permission
        - exceeded-max-duration
        - manually-canceled
        - phone-call-provider-closed-websocket
        - call.forwarding.operator-busy
        - silence-timed-out
        - call.in-progress.error-sip-inbound-call-failed-to-connect
        - call.in-progress.error-providerfault-outbound-sip-403-forbidden
        - >-
          call.in-progress.error-providerfault-outbound-sip-407-proxy-authentication-required
        - call.in-progress.error-providerfault-outbound-sip-408-request-timeout
        - >-
          call.in-progress.error-providerfault-outbound-sip-503-service-unavailable
        - >-
          call.in-progress.error-providerfault-outbound-sip-480-temporarily-unavailable
        - call.in-progress.error-sip-outbound-call-failed-to-connect
        - call.ringing.hook-executed-say
        - call.ringing.hook-executed-transfer
        - call.ending.hook-executed-say
        - call.ending.hook-executed-transfer
        - call.ringing.sip-inbound-caller-hungup-before-call-connect
        - call.ringing.error-sip-inbound-call-failed-to-connect
        - twilio-failed-to-connect-call
        - twilio-reported-customer-misdialed
        - vonage-rejected
        - voicemail
        - call-deleted
      description: >-
        This is the reason the call ended. This is only sent if the status is
        "ended".
      title: ServerMessageStatusUpdateEndedReason
    ServerMessageStatusUpdateMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/UserMessage'
        - $ref: '#/components/schemas/SystemMessage'
        - $ref: '#/components/schemas/BotMessage'
        - $ref: '#/components/schemas/ToolCallMessage'
        - $ref: '#/components/schemas/ToolCallResultMessage'
      title: ServerMessageStatusUpdateMessagesItems
    ServerMessageStatusUpdateDestination:
      oneOf:
        - $ref: '#/components/schemas/TransferDestinationNumber'
        - $ref: '#/components/schemas/TransferDestinationSip'
      description: >-
        This is the destination the call is being transferred to. This is only
        sent if the status is "forwarding".
      title: ServerMessageStatusUpdateDestination
    ServerMessageStatusUpdateInboundPhoneCallDebuggingArtifacts:
      type: object
      properties: {}
      description: >-
        This is the inbound phone call debugging artifacts. This is only sent if
        the status is "ended" and there was an error accepting the inbound phone
        call.


        This will include any errors related to the "assistant-request" if one
        was made.
      title: ServerMessageStatusUpdateInboundPhoneCallDebuggingArtifacts
    ServerMessageStatusUpdate:
      type: object
      properties:
        phoneNumber:
          $ref: '#/components/schemas/ServerMessageStatusUpdatePhoneNumber'
          description: This is the phone number that the message is associated with.
        type:
          $ref: '#/components/schemas/ServerMessageStatusUpdateType'
          description: >-
            This is the type of the message. "status-update" is sent whenever
            the `call.status` changes.
        status:
          $ref: '#/components/schemas/ServerMessageStatusUpdateStatus'
          description: This is the status of the call.
        endedReason:
          $ref: '#/components/schemas/ServerMessageStatusUpdateEndedReason'
          description: >-
            This is the reason the call ended. This is only sent if the status
            is "ended".
        messages:
          type: array
          items:
            $ref: '#/components/schemas/ServerMessageStatusUpdateMessagesItems'
          description: >-
            These are the conversation messages of the call. This is only sent
            if the status is "forwarding".
        messagesOpenAIFormatted:
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
          description: >-
            These are the conversation messages of the call. This is only sent
            if the status is "forwarding".
        destination:
          $ref: '#/components/schemas/ServerMessageStatusUpdateDestination'
          description: >-
            This is the destination the call is being transferred to. This is
            only sent if the status is "forwarding".
        timestamp:
          type: number
          format: double
          description: This is the timestamp of the message.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: |-
            This is a live version of the `call.artifact`.

            This matches what is stored on `call.artifact` after the call.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: This is the assistant that the message is associated with.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer that the message is associated with.
        call:
          $ref: '#/components/schemas/Call'
          description: This is the call that the message is associated with.
        chat:
          $ref: '#/components/schemas/Chat'
          description: This is the chat object.
        transcript:
          type: string
          description: >-
            This is the transcript of the call. This is only sent if the status
            is "forwarding".
        summary:
          type: string
          description: >-
            This is the summary of the call. This is only sent if the status is
            "forwarding".
        inboundPhoneCallDebuggingArtifacts:
          $ref: >-
            #/components/schemas/ServerMessageStatusUpdateInboundPhoneCallDebuggingArtifacts
          description: >-
            This is the inbound phone call debugging artifacts. This is only
            sent if the status is "ended" and there was an error accepting the
            inbound phone call.


            This will include any errors related to the "assistant-request" if
            one was made.
      required:
        - type
        - status
      title: ServerMessageStatusUpdate
    ServerMessageToolCallsPhoneNumber:
      oneOf:
        - $ref: '#/components/schemas/CreateByoPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO'
      description: This is the phone number that the message is associated with.
      title: ServerMessageToolCallsPhoneNumber
    ServerMessageToolCallsType:
      type: string
      enum:
        - tool-calls
      description: This is the type of the message. "tool-calls" is sent to call a tool.
      title: ServerMessageToolCallsType
    FunctionToolWithToolCallMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: FunctionToolWithToolCallMessagesItems
    FunctionToolWithToolCallType:
      type: string
      enum:
        - function
      description: The type of tool. "function" for Function tool.
      title: FunctionToolWithToolCallType
    FunctionToolWithToolCall:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/FunctionToolWithToolCallMessagesItems'
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/FunctionToolWithToolCallType'
          description: The type of tool. "function" for Function tool.
        async:
          type: boolean
          description: |-
            This determines if the tool is async.

              If async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.

              If sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.

              Defaults to synchronous (`false`).
        server:
          $ref: '#/components/schemas/Server'
          description: |2-

              This is the server where a `tool-calls` webhook will be sent.

              Notes:
              - Webhook is sent to this server when a tool call is made.
              - Webhook contains the call, assistant, and phone number objects.
              - Webhook contains the variables set on the assistant.
              - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
              - Webhook expects a response with tool call result.
        variableExtractionPlan:
          $ref: '#/components/schemas/VariableExtractionPlan'
          description: Plan to extract variables from the tool response
        parameters:
          type: array
          items:
            $ref: '#/components/schemas/ToolParameter'
          description: >-
            Static key-value pairs merged into the request body. Values support
            Liquid templates.
        toolCall:
          $ref: '#/components/schemas/ToolCall'
        function:
          $ref: '#/components/schemas/OpenAIFunction'
          description: This is the function definition of the tool.
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
        - toolCall
      title: FunctionToolWithToolCall
    GhlToolWithToolCallMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: GhlToolWithToolCallMessagesItems
    GhlToolWithToolCallType:
      type: string
      enum:
        - ghl
      description: The type of tool. "ghl" for GHL tool.
      title: GhlToolWithToolCallType
    GhlToolMetadata:
      type: object
      properties:
        workflowId:
          type: string
        locationId:
          type: string
      title: GhlToolMetadata
    GhlToolWithToolCall:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/GhlToolWithToolCallMessagesItems'
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/GhlToolWithToolCallType'
          description: The type of tool. "ghl" for GHL tool.
        toolCall:
          $ref: '#/components/schemas/ToolCall'
        metadata:
          $ref: '#/components/schemas/GhlToolMetadata'
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
        - toolCall
        - metadata
      title: GhlToolWithToolCall
    MakeToolWithToolCallMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: MakeToolWithToolCallMessagesItems
    MakeToolWithToolCallType:
      type: string
      enum:
        - make
      description: The type of tool. "make" for Make tool.
      title: MakeToolWithToolCallType
    MakeToolMetadata:
      type: object
      properties:
        scenarioId:
          type: number
          format: double
        triggerHookId:
          type: number
          format: double
      title: MakeToolMetadata
    MakeToolWithToolCall:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/MakeToolWithToolCallMessagesItems'
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/MakeToolWithToolCallType'
          description: The type of tool. "make" for Make tool.
        toolCall:
          $ref: '#/components/schemas/ToolCall'
        metadata:
          $ref: '#/components/schemas/MakeToolMetadata'
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
        - toolCall
        - metadata
      title: MakeToolWithToolCall
    BashToolWithToolCallMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: BashToolWithToolCallMessagesItems
    BashToolWithToolCallType:
      type: string
      enum:
        - bash
      description: The type of tool. "bash" for Bash tool.
      title: BashToolWithToolCallType
    BashToolWithToolCallSubType:
      type: string
      enum:
        - bash_20241022
      description: The sub type of tool.
      title: BashToolWithToolCallSubType
    BashToolWithToolCallName:
      type: string
      enum:
        - bash
      default: bash
      description: The name of the tool, fixed to 'bash'
      title: BashToolWithToolCallName
    BashToolWithToolCall:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/BashToolWithToolCallMessagesItems'
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/BashToolWithToolCallType'
          description: The type of tool. "bash" for Bash tool.
        subType:
          $ref: '#/components/schemas/BashToolWithToolCallSubType'
          description: The sub type of tool.
        server:
          $ref: '#/components/schemas/Server'
          description: |2-

              This is the server where a `tool-calls` webhook will be sent.

              Notes:
              - Webhook is sent to this server when a tool call is made.
              - Webhook contains the call, assistant, and phone number objects.
              - Webhook contains the variables set on the assistant.
              - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
              - Webhook expects a response with tool call result.
        toolCall:
          $ref: '#/components/schemas/ToolCall'
        name:
          $ref: '#/components/schemas/BashToolWithToolCallName'
          description: The name of the tool, fixed to 'bash'
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
        - subType
        - toolCall
        - name
      title: BashToolWithToolCall
    ComputerToolWithToolCallMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: ComputerToolWithToolCallMessagesItems
    ComputerToolWithToolCallType:
      type: string
      enum:
        - computer
      description: The type of tool. "computer" for Computer tool.
      title: ComputerToolWithToolCallType
    ComputerToolWithToolCallSubType:
      type: string
      enum:
        - computer_20241022
      description: The sub type of tool.
      title: ComputerToolWithToolCallSubType
    ComputerToolWithToolCallName:
      type: string
      enum:
        - computer
      default: computer
      description: The name of the tool, fixed to 'computer'
      title: ComputerToolWithToolCallName
    ComputerToolWithToolCall:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/ComputerToolWithToolCallMessagesItems'
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/ComputerToolWithToolCallType'
          description: The type of tool. "computer" for Computer tool.
        subType:
          $ref: '#/components/schemas/ComputerToolWithToolCallSubType'
          description: The sub type of tool.
        server:
          $ref: '#/components/schemas/Server'
          description: |2-

              This is the server where a `tool-calls` webhook will be sent.

              Notes:
              - Webhook is sent to this server when a tool call is made.
              - Webhook contains the call, assistant, and phone number objects.
              - Webhook contains the variables set on the assistant.
              - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
              - Webhook expects a response with tool call result.
        toolCall:
          $ref: '#/components/schemas/ToolCall'
        name:
          $ref: '#/components/schemas/ComputerToolWithToolCallName'
          description: The name of the tool, fixed to 'computer'
        displayWidthPx:
          type: number
          format: double
          description: The display width in pixels
        displayHeightPx:
          type: number
          format: double
          description: The display height in pixels
        displayNumber:
          type: number
          format: double
          description: Optional display number
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
        - subType
        - toolCall
        - name
        - displayWidthPx
        - displayHeightPx
      title: ComputerToolWithToolCall
    TextEditorToolWithToolCallMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: TextEditorToolWithToolCallMessagesItems
    TextEditorToolWithToolCallType:
      type: string
      enum:
        - textEditor
      description: The type of tool. "textEditor" for Text Editor tool.
      title: TextEditorToolWithToolCallType
    TextEditorToolWithToolCallSubType:
      type: string
      enum:
        - text_editor_20241022
      description: The sub type of tool.
      title: TextEditorToolWithToolCallSubType
    TextEditorToolWithToolCallName:
      type: string
      enum:
        - str_replace_editor
      default: str_replace_editor
      description: The name of the tool, fixed to 'str_replace_editor'
      title: TextEditorToolWithToolCallName
    TextEditorToolWithToolCall:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/TextEditorToolWithToolCallMessagesItems'
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/TextEditorToolWithToolCallType'
          description: The type of tool. "textEditor" for Text Editor tool.
        subType:
          $ref: '#/components/schemas/TextEditorToolWithToolCallSubType'
          description: The sub type of tool.
        server:
          $ref: '#/components/schemas/Server'
          description: |2-

              This is the server where a `tool-calls` webhook will be sent.

              Notes:
              - Webhook is sent to this server when a tool call is made.
              - Webhook contains the call, assistant, and phone number objects.
              - Webhook contains the variables set on the assistant.
              - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.
              - Webhook expects a response with tool call result.
        toolCall:
          $ref: '#/components/schemas/ToolCall'
        name:
          $ref: '#/components/schemas/TextEditorToolWithToolCallName'
          description: The name of the tool, fixed to 'str_replace_editor'
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
        - subType
        - toolCall
        - name
      title: TextEditorToolWithToolCall
    GoogleCalendarCreateEventToolWithToolCallMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      title: GoogleCalendarCreateEventToolWithToolCallMessagesItems
    GoogleCalendarCreateEventToolWithToolCallType:
      type: string
      enum:
        - google.calendar.event.create
      description: >-
        The type of tool. "google.calendar.event.create" for Google Calendar
        Create Event tool.
      title: GoogleCalendarCreateEventToolWithToolCallType
    GoogleCalendarCreateEventToolWithToolCall:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: >-
              #/components/schemas/GoogleCalendarCreateEventToolWithToolCallMessagesItems
          description: >-
            These are the messages that will be spoken to the user as the tool
            is running.


            For some tools, this is auto-filled based on special fields like
            `tool.destinations`. For others like the function tool, these can be
            custom configured.
        type:
          $ref: '#/components/schemas/GoogleCalendarCreateEventToolWithToolCallType'
          description: >-
            The type of tool. "google.calendar.event.create" for Google Calendar
            Create Event tool.
        toolCall:
          $ref: '#/components/schemas/ToolCall'
        rejectionPlan:
          $ref: '#/components/schemas/ToolRejectionPlan'
          description: >-
            This is the plan to reject a tool call based on the conversation
            state.


            // Example 1: Reject endCall if user didn't say goodbye

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b',
                target: { position: -1, role: 'user' },
                negate: true  // Reject if pattern does NOT match
              }]
            }

            ```


            // Example 2: Reject transfer if user is actually asking a question

            ```json

            {
              conditions: [{
                type: 'regex',
                regex: '\\?',
                target: { position: -1, role: 'user' }
              }]
            }

            ```


            // Example 3: Reject transfer if user didn't mention transfer
            recently

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 5 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' %}

            {% assign mentioned = false %}

            {% for msg in userMessages %}
              {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}
                {% assign mentioned = true %}
                {% break %}
              {% endif %}
            {% endfor %}

            {% if mentioned %}
              false
            {% else %}
              true
            {% endif %}`
              }]
            }

            ```


            // Example 4: Reject endCall if the bot is looping and trying to
            exit

            ```json

            {
              conditions: [{
                type: 'liquid',
                liquid: `{% assign recentMessages = messages | last: 6 %}
            {% assign userMessages = recentMessages | where: 'role', 'user' |
            reverse %}

            {% if userMessages.size < 3 %}
              false
            {% else %}
              {% assign msg1 = userMessages[0].content | downcase %}
              {% assign msg2 = userMessages[1].content | downcase %}
              {% assign msg3 = userMessages[2].content | downcase %}
              {% comment %} Check for repetitive messages {% endcomment %}
              {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}
                true
              {% comment %} Check for common loop phrases {% endcomment %}
              {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}
                true
              {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}
                true
              {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}
                true
              {% else %}
                false
              {% endif %}
            {% endif %}`
              }]
            }

            ```
      required:
        - type
        - toolCall
      title: GoogleCalendarCreateEventToolWithToolCall
    ServerMessageToolCallsToolWithToolCallListItems:
      oneOf:
        - $ref: '#/components/schemas/FunctionToolWithToolCall'
        - $ref: '#/components/schemas/GhlToolWithToolCall'
        - $ref: '#/components/schemas/MakeToolWithToolCall'
        - $ref: '#/components/schemas/BashToolWithToolCall'
        - $ref: '#/components/schemas/ComputerToolWithToolCall'
        - $ref: '#/components/schemas/TextEditorToolWithToolCall'
        - $ref: '#/components/schemas/GoogleCalendarCreateEventToolWithToolCall'
      title: ServerMessageToolCallsToolWithToolCallListItems
    ServerMessageToolCalls:
      type: object
      properties:
        phoneNumber:
          $ref: '#/components/schemas/ServerMessageToolCallsPhoneNumber'
          description: This is the phone number that the message is associated with.
        type:
          $ref: '#/components/schemas/ServerMessageToolCallsType'
          description: >-
            This is the type of the message. "tool-calls" is sent to call a
            tool.
        toolWithToolCallList:
          type: array
          items:
            $ref: >-
              #/components/schemas/ServerMessageToolCallsToolWithToolCallListItems
          description: >-
            This is the list of tools calls that the model is requesting along
            with the original tool configuration.
        timestamp:
          type: number
          format: double
          description: This is the timestamp of the message.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: |-
            This is a live version of the `call.artifact`.

            This matches what is stored on `call.artifact` after the call.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: This is the assistant that the message is associated with.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer that the message is associated with.
        call:
          $ref: '#/components/schemas/Call'
          description: This is the call that the message is associated with.
        chat:
          $ref: '#/components/schemas/Chat'
          description: This is the chat object.
        toolCallList:
          type: array
          items:
            $ref: '#/components/schemas/ToolCall'
          description: This is the list of tool calls that the model is requesting.
      required:
        - toolWithToolCallList
        - toolCallList
      title: ServerMessageToolCalls
    ServerMessageTransferDestinationRequestPhoneNumber:
      oneOf:
        - $ref: '#/components/schemas/CreateByoPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO'
      description: This is the phone number that the message is associated with.
      title: ServerMessageTransferDestinationRequestPhoneNumber
    ServerMessageTransferDestinationRequestType:
      type: string
      enum:
        - transfer-destination-request
      description: >-
        This is the type of the message. "transfer-destination-request" is sent
        when the model is requesting transfer but destination is unknown.
      title: ServerMessageTransferDestinationRequestType
    ServerMessageTransferDestinationRequest:
      type: object
      properties:
        phoneNumber:
          $ref: >-
            #/components/schemas/ServerMessageTransferDestinationRequestPhoneNumber
          description: This is the phone number that the message is associated with.
        type:
          $ref: '#/components/schemas/ServerMessageTransferDestinationRequestType'
          description: >-
            This is the type of the message. "transfer-destination-request" is
            sent when the model is requesting transfer but destination is
            unknown.
        timestamp:
          type: number
          format: double
          description: This is the timestamp of the message.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: |-
            This is a live version of the `call.artifact`.

            This matches what is stored on `call.artifact` after the call.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: This is the assistant that the message is associated with.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer that the message is associated with.
        call:
          $ref: '#/components/schemas/Call'
          description: This is the call that the message is associated with.
        chat:
          $ref: '#/components/schemas/Chat'
          description: This is the chat object.
      required:
        - type
      title: ServerMessageTransferDestinationRequest
    ServerMessageTransferUpdatePhoneNumber:
      oneOf:
        - $ref: '#/components/schemas/CreateByoPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO'
      description: This is the phone number that the message is associated with.
      title: ServerMessageTransferUpdatePhoneNumber
    ServerMessageTransferUpdateType:
      type: string
      enum:
        - transfer-update
      description: >-
        This is the type of the message. "transfer-update" is sent whenever a
        transfer happens.
      title: ServerMessageTransferUpdateType
    ServerMessageTransferUpdateDestination:
      oneOf:
        - $ref: '#/components/schemas/TransferDestinationAssistant'
        - $ref: '#/components/schemas/TransferDestinationNumber'
        - $ref: '#/components/schemas/TransferDestinationSip'
      description: This is the destination of the transfer.
      title: ServerMessageTransferUpdateDestination
    ServerMessageTransferUpdateToStepRecord:
      type: object
      properties: {}
      description: This is the step that the conversation moved to.
      title: ServerMessageTransferUpdateToStepRecord
    ServerMessageTransferUpdateFromStepRecord:
      type: object
      properties: {}
      description: This is the step that the conversation moved from. =
      title: ServerMessageTransferUpdateFromStepRecord
    ServerMessageTransferUpdate:
      type: object
      properties:
        phoneNumber:
          $ref: '#/components/schemas/ServerMessageTransferUpdatePhoneNumber'
          description: This is the phone number that the message is associated with.
        type:
          $ref: '#/components/schemas/ServerMessageTransferUpdateType'
          description: >-
            This is the type of the message. "transfer-update" is sent whenever
            a transfer happens.
        destination:
          $ref: '#/components/schemas/ServerMessageTransferUpdateDestination'
          description: This is the destination of the transfer.
        timestamp:
          type: number
          format: double
          description: This is the timestamp of the message.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: |-
            This is a live version of the `call.artifact`.

            This matches what is stored on `call.artifact` after the call.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: This is the assistant that the message is associated with.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer that the message is associated with.
        call:
          $ref: '#/components/schemas/Call'
          description: This is the call that the message is associated with.
        chat:
          $ref: '#/components/schemas/Chat'
          description: This is the chat object.
        toAssistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: >-
            This is the assistant that the call is being transferred to. This is
            only sent if `destination.type` is "assistant".
        fromAssistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: >-
            This is the assistant that the call is being transferred from. This
            is only sent if `destination.type` is "assistant".
        toStepRecord:
          $ref: '#/components/schemas/ServerMessageTransferUpdateToStepRecord'
          description: This is the step that the conversation moved to.
        fromStepRecord:
          $ref: '#/components/schemas/ServerMessageTransferUpdateFromStepRecord'
          description: This is the step that the conversation moved from. =
      required:
        - type
      title: ServerMessageTransferUpdate
    ServerMessageTranscriptPhoneNumber:
      oneOf:
        - $ref: '#/components/schemas/CreateByoPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO'
      description: This is the phone number that the message is associated with.
      title: ServerMessageTranscriptPhoneNumber
    ServerMessageTranscriptType:
      type: string
      enum:
        - transcript
        - transcript[transcriptType="final"]
      description: >-
        This is the type of the message. "transcript" is sent as transcriber
        outputs partial or final transcript.
      title: ServerMessageTranscriptType
    ServerMessageTranscriptRole:
      type: string
      enum:
        - assistant
        - user
      description: This is the role for which the transcript is for.
      title: ServerMessageTranscriptRole
    ServerMessageTranscriptTranscriptType:
      type: string
      enum:
        - partial
        - final
      description: This is the type of the transcript.
      title: ServerMessageTranscriptTranscriptType
    ServerMessageTranscript:
      type: object
      properties:
        phoneNumber:
          $ref: '#/components/schemas/ServerMessageTranscriptPhoneNumber'
          description: This is the phone number that the message is associated with.
        type:
          $ref: '#/components/schemas/ServerMessageTranscriptType'
          description: >-
            This is the type of the message. "transcript" is sent as transcriber
            outputs partial or final transcript.
        timestamp:
          type: number
          format: double
          description: This is the timestamp of the message.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: |-
            This is a live version of the `call.artifact`.

            This matches what is stored on `call.artifact` after the call.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: This is the assistant that the message is associated with.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer that the message is associated with.
        call:
          $ref: '#/components/schemas/Call'
          description: This is the call that the message is associated with.
        chat:
          $ref: '#/components/schemas/Chat'
          description: This is the chat object.
        role:
          $ref: '#/components/schemas/ServerMessageTranscriptRole'
          description: This is the role for which the transcript is for.
        transcriptType:
          $ref: '#/components/schemas/ServerMessageTranscriptTranscriptType'
          description: This is the type of the transcript.
        transcript:
          type: string
          description: This is the transcript content.
        isFiltered:
          type: boolean
          description: Indicates if the transcript was filtered for security reasons.
        detectedThreats:
          type: array
          items:
            type: string
          description: List of detected security threats if the transcript was filtered.
        originalTranscript:
          type: string
          description: >-
            The original transcript before filtering (only included if content
            was filtered).
      required:
        - type
        - role
        - transcriptType
        - transcript
      title: ServerMessageTranscript
    ServerMessageUserInterruptedPhoneNumber:
      oneOf:
        - $ref: '#/components/schemas/CreateByoPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO'
      description: This is the phone number that the message is associated with.
      title: ServerMessageUserInterruptedPhoneNumber
    ServerMessageUserInterruptedType:
      type: string
      enum:
        - user-interrupted
      description: >-
        This is the type of the message. "user-interrupted" is sent when the
        user interrupts the assistant.
      title: ServerMessageUserInterruptedType
    ServerMessageUserInterrupted:
      type: object
      properties:
        phoneNumber:
          $ref: '#/components/schemas/ServerMessageUserInterruptedPhoneNumber'
          description: This is the phone number that the message is associated with.
        type:
          $ref: '#/components/schemas/ServerMessageUserInterruptedType'
          description: >-
            This is the type of the message. "user-interrupted" is sent when the
            user interrupts the assistant.
        turnId:
          type: string
          description: >-
            This is the turnId of the LLM response that was interrupted. Matches
            the turnId

            on model-output messages so clients can discard the interrupted
            turn's tokens.
        timestamp:
          type: number
          format: double
          description: This is the timestamp of the message.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: |-
            This is a live version of the `call.artifact`.

            This matches what is stored on `call.artifact` after the call.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: This is the assistant that the message is associated with.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer that the message is associated with.
        call:
          $ref: '#/components/schemas/Call'
          description: This is the call that the message is associated with.
        chat:
          $ref: '#/components/schemas/Chat'
          description: This is the chat object.
      required:
        - type
      title: ServerMessageUserInterrupted
    ServerMessageLanguageChangeDetectedPhoneNumber:
      oneOf:
        - $ref: '#/components/schemas/CreateByoPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO'
      description: This is the phone number that the message is associated with.
      title: ServerMessageLanguageChangeDetectedPhoneNumber
    ServerMessageLanguageChangeDetectedType:
      type: string
      enum:
        - language-change-detected
      description: >-
        This is the type of the message. "language-change-detected" is sent when
        the transcriber is automatically switched based on the detected
        language.
      title: ServerMessageLanguageChangeDetectedType
    ServerMessageLanguageChangeDetected:
      type: object
      properties:
        phoneNumber:
          $ref: '#/components/schemas/ServerMessageLanguageChangeDetectedPhoneNumber'
          description: This is the phone number that the message is associated with.
        type:
          $ref: '#/components/schemas/ServerMessageLanguageChangeDetectedType'
          description: >-
            This is the type of the message. "language-change-detected" is sent
            when the transcriber is automatically switched based on the detected
            language.
        timestamp:
          type: number
          format: double
          description: This is the timestamp of the message.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: |-
            This is a live version of the `call.artifact`.

            This matches what is stored on `call.artifact` after the call.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: This is the assistant that the message is associated with.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer that the message is associated with.
        call:
          $ref: '#/components/schemas/Call'
          description: This is the call that the message is associated with.
        chat:
          $ref: '#/components/schemas/Chat'
          description: This is the chat object.
        language:
          type: string
          description: This is the language the transcriber is switched to.
      required:
        - type
        - language
      title: ServerMessageLanguageChangeDetected
    ServerMessageVoiceInputPhoneNumber:
      oneOf:
        - $ref: '#/components/schemas/CreateByoPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO'
      description: This is the phone number that the message is associated with.
      title: ServerMessageVoiceInputPhoneNumber
    ServerMessageVoiceInputType:
      type: string
      enum:
        - voice-input
      description: >-
        This is the type of the message. "voice-input" is sent when a generation
        is requested from voice provider.
      title: ServerMessageVoiceInputType
    ServerMessageVoiceInput:
      type: object
      properties:
        phoneNumber:
          $ref: '#/components/schemas/ServerMessageVoiceInputPhoneNumber'
          description: This is the phone number that the message is associated with.
        type:
          $ref: '#/components/schemas/ServerMessageVoiceInputType'
          description: >-
            This is the type of the message. "voice-input" is sent when a
            generation is requested from voice provider.
        timestamp:
          type: number
          format: double
          description: This is the timestamp of the message.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: |-
            This is a live version of the `call.artifact`.

            This matches what is stored on `call.artifact` after the call.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: This is the assistant that the message is associated with.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer that the message is associated with.
        call:
          $ref: '#/components/schemas/Call'
          description: This is the call that the message is associated with.
        chat:
          $ref: '#/components/schemas/Chat'
          description: This is the chat object.
        input:
          type: string
          description: This is the voice input content
      required:
        - type
        - input
      title: ServerMessageVoiceInput
    ServerMessageAssistantSpeechPhoneNumber:
      oneOf:
        - $ref: '#/components/schemas/CreateByoPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO'
      description: This is the phone number that the message is associated with.
      title: ServerMessageAssistantSpeechPhoneNumber
    ServerMessageAssistantSpeechType:
      type: string
      enum:
        - assistant.speechStarted
      description: >-
        This is the type of the message. "assistant-speech" is sent as assistant
        audio is being played.
      title: ServerMessageAssistantSpeechType
    ServerMessageAssistantSpeechSource:
      type: string
      enum:
        - model
        - force-say
        - custom-voice
      description: Indicates how the text was sourced.
      title: ServerMessageAssistantSpeechSource
    ServerMessageAssistantSpeechTiming:
      type: object
      description: |-
        Optional timing metadata. Shape depends on `timing.type`:

        - `word-alignment` (ElevenLabs): per-character timing at playback
          cadence. words[] includes space entries. Best consumed by tracking
          a running character count: join timing.words, add to a char cursor,
          and highlight text up to that position. No interpolation needed.

        - `word-progress` (Minimax with voice.subtitleType: 'word'): cursor-
          based word count per TTS segment. Use wordsSpoken as the anchor,
          interpolate forward using segmentDurationMs or timing.words until
          the next event arrives.

        When absent, the event is a text-only fallback for providers without
        word-level timing (e.g. Cartesia, Deepgram, Azure). Text emits once
        per TTS chunk when audio is playing. Optionally interpolate a word
        cursor at ~3.5 words/sec between events for approximate tracking.
      title: ServerMessageAssistantSpeechTiming
    ServerMessageAssistantSpeech:
      type: object
      properties:
        phoneNumber:
          $ref: '#/components/schemas/ServerMessageAssistantSpeechPhoneNumber'
          description: This is the phone number that the message is associated with.
        type:
          $ref: '#/components/schemas/ServerMessageAssistantSpeechType'
          description: >-
            This is the type of the message. "assistant-speech" is sent as
            assistant audio is being played.
        text:
          type: string
          description: >-
            The full assistant text for the current turn. This is the complete
            text,

            not an incremental delta — consumers should use `timing` metadata
            (e.g.

            `wordsSpoken`) to determine which portion has been spoken so far.
        turn:
          type: number
          format: double
          description: This is the turn number of the assistant speech event (0-indexed).
        source:
          $ref: '#/components/schemas/ServerMessageAssistantSpeechSource'
          description: Indicates how the text was sourced.
        timing:
          $ref: '#/components/schemas/ServerMessageAssistantSpeechTiming'
          description: |-
            Optional timing metadata. Shape depends on `timing.type`:

            - `word-alignment` (ElevenLabs): per-character timing at playback
              cadence. words[] includes space entries. Best consumed by tracking
              a running character count: join timing.words, add to a char cursor,
              and highlight text up to that position. No interpolation needed.

            - `word-progress` (Minimax with voice.subtitleType: 'word'): cursor-
              based word count per TTS segment. Use wordsSpoken as the anchor,
              interpolate forward using segmentDurationMs or timing.words until
              the next event arrives.

            When absent, the event is a text-only fallback for providers without
            word-level timing (e.g. Cartesia, Deepgram, Azure). Text emits once
            per TTS chunk when audio is playing. Optionally interpolate a word
            cursor at ~3.5 words/sec between events for approximate tracking.
        timestamp:
          type: number
          format: double
          description: This is the timestamp of the message.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: |-
            This is a live version of the `call.artifact`.

            This matches what is stored on `call.artifact` after the call.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: This is the assistant that the message is associated with.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer that the message is associated with.
        call:
          $ref: '#/components/schemas/Call'
          description: This is the call that the message is associated with.
        chat:
          $ref: '#/components/schemas/Chat'
          description: This is the chat object.
      required:
        - type
        - text
      title: ServerMessageAssistantSpeech
    ServerMessageVoiceRequestPhoneNumber:
      oneOf:
        - $ref: '#/components/schemas/CreateByoPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO'
      description: This is the phone number that the message is associated with.
      title: ServerMessageVoiceRequestPhoneNumber
    ServerMessageVoiceRequestType:
      type: string
      enum:
        - voice-request
      description: >-
        This is the type of the message. "voice-request" is sent when using
        `assistant.voice={ "type": "custom-voice" }`.


        Here is what the request will look like:


        POST https://{assistant.voice.server.url}

        Content-Type: application/json


        {
          "messsage": {
            "type": "voice-request",
            "text": "Hello, world!",
            "sampleRate": 24000,
            ...other metadata about the call...
          }
        }


        The expected response is 1-channel 16-bit raw PCM audio at the sample
        rate specified in the request. Here is how the response will be piped to
        the transport:

        ```

        response.on('data', (chunk: Buffer) => {
          outputStream.write(chunk);
        });

        ```
      title: ServerMessageVoiceRequestType
    ServerMessageVoiceRequest:
      type: object
      properties:
        phoneNumber:
          $ref: '#/components/schemas/ServerMessageVoiceRequestPhoneNumber'
          description: This is the phone number that the message is associated with.
        type:
          $ref: '#/components/schemas/ServerMessageVoiceRequestType'
          description: >-
            This is the type of the message. "voice-request" is sent when using
            `assistant.voice={ "type": "custom-voice" }`.


            Here is what the request will look like:


            POST https://{assistant.voice.server.url}

            Content-Type: application/json


            {
              "messsage": {
                "type": "voice-request",
                "text": "Hello, world!",
                "sampleRate": 24000,
                ...other metadata about the call...
              }
            }


            The expected response is 1-channel 16-bit raw PCM audio at the
            sample rate specified in the request. Here is how the response will
            be piped to the transport:

            ```

            response.on('data', (chunk: Buffer) => {
              outputStream.write(chunk);
            });

            ```
        timestamp:
          type: number
          format: double
          description: This is the timestamp of the message.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: |-
            This is a live version of the `call.artifact`.

            This matches what is stored on `call.artifact` after the call.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: This is the assistant that the message is associated with.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer that the message is associated with.
        call:
          $ref: '#/components/schemas/Call'
          description: This is the call that the message is associated with.
        chat:
          $ref: '#/components/schemas/Chat'
          description: This is the chat object.
        text:
          type: string
          description: This is the text to be synthesized.
        sampleRate:
          type: number
          format: double
          description: This is the sample rate to be synthesized.
      required:
        - type
        - text
        - sampleRate
      title: ServerMessageVoiceRequest
    ServerMessageCallEndpointingRequestPhoneNumber:
      oneOf:
        - $ref: '#/components/schemas/CreateByoPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO'
      description: This is the phone number that the message is associated with.
      title: ServerMessageCallEndpointingRequestPhoneNumber
    ServerMessageCallEndpointingRequestType:
      type: string
      enum:
        - call.endpointing.request
      description: >-
        This is the type of the message. "call.endpointing.request" is sent when
        using `assistant.startSpeakingPlan.smartEndpointingPlan={ "provider":
        "custom-endpointing-model" }`.


        Here is what the request will look like:


        POST
        https://{assistant.startSpeakingPlan.smartEndpointingPlan.server.url}

        Content-Type: application/json


        {
          "message": {
            "type": "call.endpointing.request",
            "messages": [
              {
                "role": "user",
                "message": "Hello, how are you?",
                "time": 1234567890,
                "secondsFromStart": 0
              }
            ],
            ...other metadata about the call...
          }
        }


        The expected response:

        {
          "timeoutSeconds": 0.5
        }
      title: ServerMessageCallEndpointingRequestType
    ServerMessageCallEndpointingRequestMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/UserMessage'
        - $ref: '#/components/schemas/SystemMessage'
        - $ref: '#/components/schemas/BotMessage'
        - $ref: '#/components/schemas/ToolCallMessage'
        - $ref: '#/components/schemas/ToolCallResultMessage'
      title: ServerMessageCallEndpointingRequestMessagesItems
    ServerMessageCallEndpointingRequest:
      type: object
      properties:
        phoneNumber:
          $ref: '#/components/schemas/ServerMessageCallEndpointingRequestPhoneNumber'
          description: This is the phone number that the message is associated with.
        type:
          $ref: '#/components/schemas/ServerMessageCallEndpointingRequestType'
          description: >-
            This is the type of the message. "call.endpointing.request" is sent
            when using `assistant.startSpeakingPlan.smartEndpointingPlan={
            "provider": "custom-endpointing-model" }`.


            Here is what the request will look like:


            POST
            https://{assistant.startSpeakingPlan.smartEndpointingPlan.server.url}

            Content-Type: application/json


            {
              "message": {
                "type": "call.endpointing.request",
                "messages": [
                  {
                    "role": "user",
                    "message": "Hello, how are you?",
                    "time": 1234567890,
                    "secondsFromStart": 0
                  }
                ],
                ...other metadata about the call...
              }
            }


            The expected response:

            {
              "timeoutSeconds": 0.5
            }
        messages:
          type: array
          items:
            $ref: >-
              #/components/schemas/ServerMessageCallEndpointingRequestMessagesItems
          description: >-
            This is the conversation history at the time of the endpointing
            request.
        messagesOpenAIFormatted:
          type: array
          items:
            $ref: '#/components/schemas/OpenAIMessage'
          description: This is just `messages` formatted for OpenAI.
        timestamp:
          type: number
          format: double
          description: This is the timestamp of the message.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: |-
            This is a live version of the `call.artifact`.

            This matches what is stored on `call.artifact` after the call.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: This is the assistant that the message is associated with.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer that the message is associated with.
        call:
          $ref: '#/components/schemas/Call'
          description: This is the call that the message is associated with.
        chat:
          $ref: '#/components/schemas/Chat'
          description: This is the chat object.
      required:
        - type
        - messagesOpenAIFormatted
      title: ServerMessageCallEndpointingRequest
    ServerMessageChatCreatedPhoneNumber:
      oneOf:
        - $ref: '#/components/schemas/CreateByoPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO'
      description: This is the phone number that the message is associated with.
      title: ServerMessageChatCreatedPhoneNumber
    ServerMessageChatCreatedType:
      type: string
      enum:
        - chat.created
      description: >-
        This is the type of the message. "chat.created" is sent when a new chat
        is created.
      title: ServerMessageChatCreatedType
    ServerMessageChatCreated:
      type: object
      properties:
        phoneNumber:
          $ref: '#/components/schemas/ServerMessageChatCreatedPhoneNumber'
          description: This is the phone number that the message is associated with.
        type:
          $ref: '#/components/schemas/ServerMessageChatCreatedType'
          description: >-
            This is the type of the message. "chat.created" is sent when a new
            chat is created.
        timestamp:
          type: number
          format: double
          description: This is the timestamp of the message.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: |-
            This is a live version of the `call.artifact`.

            This matches what is stored on `call.artifact` after the call.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: This is the assistant that the message is associated with.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer that the message is associated with.
        call:
          $ref: '#/components/schemas/Call'
          description: This is the call that the message is associated with.
        chat:
          $ref: '#/components/schemas/Chat'
          description: This is the chat that was created.
      required:
        - type
        - chat
      title: ServerMessageChatCreated
    ServerMessageChatDeletedPhoneNumber:
      oneOf:
        - $ref: '#/components/schemas/CreateByoPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO'
      description: This is the phone number that the message is associated with.
      title: ServerMessageChatDeletedPhoneNumber
    ServerMessageChatDeletedType:
      type: string
      enum:
        - chat.deleted
      description: >-
        This is the type of the message. "chat.deleted" is sent when a chat is
        deleted.
      title: ServerMessageChatDeletedType
    ServerMessageChatDeleted:
      type: object
      properties:
        phoneNumber:
          $ref: '#/components/schemas/ServerMessageChatDeletedPhoneNumber'
          description: This is the phone number that the message is associated with.
        type:
          $ref: '#/components/schemas/ServerMessageChatDeletedType'
          description: >-
            This is the type of the message. "chat.deleted" is sent when a chat
            is deleted.
        timestamp:
          type: number
          format: double
          description: This is the timestamp of the message.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: |-
            This is a live version of the `call.artifact`.

            This matches what is stored on `call.artifact` after the call.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: This is the assistant that the message is associated with.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer that the message is associated with.
        call:
          $ref: '#/components/schemas/Call'
          description: This is the call that the message is associated with.
        chat:
          $ref: '#/components/schemas/Chat'
          description: This is the chat that was deleted.
      required:
        - type
        - chat
      title: ServerMessageChatDeleted
    ServerMessageSessionCreatedPhoneNumber:
      oneOf:
        - $ref: '#/components/schemas/CreateByoPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO'
      description: This is the phone number that the message is associated with.
      title: ServerMessageSessionCreatedPhoneNumber
    ServerMessageSessionCreatedType:
      type: string
      enum:
        - session.created
      description: >-
        This is the type of the message. "session.created" is sent when a new
        session is created.
      title: ServerMessageSessionCreatedType
    SessionCostType:
      type: string
      enum:
        - session
      description: This is the type of cost, always 'session' for this class.
      title: SessionCostType
    SessionCost:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/SessionCostType'
          description: This is the type of cost, always 'session' for this class.
        cost:
          type: number
          format: double
          description: This is the cost of the component in USD.
      required:
        - type
        - cost
      title: SessionCost
    SessionCostsItems:
      oneOf:
        - $ref: '#/components/schemas/ModelCost'
        - $ref: '#/components/schemas/AnalysisCost'
        - $ref: '#/components/schemas/SessionCost'
      title: SessionCostsItems
    SessionStatus:
      type: string
      enum:
        - active
        - completed
      description: >-
        This is the current status of the session. Can be either 'active' or
        'completed'.
      title: SessionStatus
    SessionMessagesItems:
      oneOf:
        - $ref: '#/components/schemas/SystemMessage'
        - $ref: '#/components/schemas/UserMessage'
        - $ref: '#/components/schemas/AssistantMessage'
        - $ref: '#/components/schemas/ToolMessage'
        - $ref: '#/components/schemas/DeveloperMessage'
      title: SessionMessagesItems
    Session:
      type: object
      properties:
        id:
          type: string
          description: This is the unique identifier for the session.
        orgId:
          type: string
          description: >-
            This is the unique identifier for the organization that owns this
            session.
        createdAt:
          type: string
          format: date-time
          description: >-
            This is the ISO 8601 timestamp indicating when the session was
            created.
        updatedAt:
          type: string
          format: date-time
          description: >-
            This is the ISO 8601 timestamp indicating when the session was last
            updated.
        cost:
          type: number
          format: double
          description: This is the cost of the session in USD.
        costs:
          type: array
          items:
            $ref: '#/components/schemas/SessionCostsItems'
          description: These are the costs of individual components of the session in USD.
        name:
          type: string
          description: >-
            This is a user-defined name for the session. Maximum length is 40
            characters.
        status:
          $ref: '#/components/schemas/SessionStatus'
          description: >-
            This is the current status of the session. Can be either 'active' or
            'completed'.
        expirationSeconds:
          type: number
          format: double
          description: >-
            Session expiration time in seconds. Defaults to 24 hours (86400
            seconds) if not set.
        assistantId:
          type: string
          description: >-
            This is the ID of the assistant associated with this session. Use
            this when referencing an existing assistant.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: >-
            This is the assistant configuration for this session. Use this when
            creating a new assistant configuration.

            If assistantId is provided, this will be ignored.
        assistantOverrides:
          $ref: '#/components/schemas/AssistantOverrides'
          description: >-
            These are the overrides for the assistant configuration.

            Use this to provide variable values and other overrides when using
            assistantId.

            Variable substitution will be applied to the assistant's messages
            and other text-based fields.
        squadId:
          type: string
          description: >-
            This is the squad ID associated with this session. Use this when
            referencing an existing squad.
        squad:
          $ref: '#/components/schemas/CreateSquadDTO'
          description: >-
            This is the squad configuration for this session. Use this when
            creating a new squad configuration.

            If squadId is provided, this will be ignored.
        messages:
          type: array
          items:
            $ref: '#/components/schemas/SessionMessagesItems'
          description: This is an array of chat messages in the session.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer information associated with this session.
        customerId:
          type: string
          description: This is the customerId of the customer associated with this session.
        phoneNumberId:
          type: string
          description: This is the ID of the phone number associated with this session.
        phoneNumber:
          $ref: '#/components/schemas/ImportTwilioPhoneNumberDTO'
          description: This is the phone number configuration for this session.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: >-
            These are the artifacts that were extracted from the session
            messages.

            They are only available after the session has completed.

            The artifact plan from the assistant or active assistant of squad is
            used to generate the artifact.

            Currently the only supported fields of assistant artifact plan are:

            - structuredOutputIds
      required:
        - id
        - orgId
        - createdAt
        - updatedAt
      title: Session
    ServerMessageSessionCreated:
      type: object
      properties:
        phoneNumber:
          $ref: '#/components/schemas/ServerMessageSessionCreatedPhoneNumber'
          description: This is the phone number that the message is associated with.
        type:
          $ref: '#/components/schemas/ServerMessageSessionCreatedType'
          description: >-
            This is the type of the message. "session.created" is sent when a
            new session is created.
        timestamp:
          type: number
          format: double
          description: This is the timestamp of the message.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: |-
            This is a live version of the `call.artifact`.

            This matches what is stored on `call.artifact` after the call.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: This is the assistant that the message is associated with.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer that the message is associated with.
        call:
          $ref: '#/components/schemas/Call'
          description: This is the call that the message is associated with.
        chat:
          $ref: '#/components/schemas/Chat'
          description: This is the chat object.
        session:
          $ref: '#/components/schemas/Session'
          description: This is the session that was created.
      required:
        - type
        - session
      title: ServerMessageSessionCreated
    ServerMessageSessionUpdatedPhoneNumber:
      oneOf:
        - $ref: '#/components/schemas/CreateByoPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO'
      description: This is the phone number that the message is associated with.
      title: ServerMessageSessionUpdatedPhoneNumber
    ServerMessageSessionUpdatedType:
      type: string
      enum:
        - session.updated
      description: >-
        This is the type of the message. "session.updated" is sent when a
        session is updated.
      title: ServerMessageSessionUpdatedType
    ServerMessageSessionUpdated:
      type: object
      properties:
        phoneNumber:
          $ref: '#/components/schemas/ServerMessageSessionUpdatedPhoneNumber'
          description: This is the phone number that the message is associated with.
        type:
          $ref: '#/components/schemas/ServerMessageSessionUpdatedType'
          description: >-
            This is the type of the message. "session.updated" is sent when a
            session is updated.
        timestamp:
          type: number
          format: double
          description: This is the timestamp of the message.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: |-
            This is a live version of the `call.artifact`.

            This matches what is stored on `call.artifact` after the call.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: This is the assistant that the message is associated with.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer that the message is associated with.
        call:
          $ref: '#/components/schemas/Call'
          description: This is the call that the message is associated with.
        chat:
          $ref: '#/components/schemas/Chat'
          description: This is the chat object.
        session:
          $ref: '#/components/schemas/Session'
          description: This is the session that was updated.
      required:
        - type
        - session
      title: ServerMessageSessionUpdated
    ServerMessageSessionDeletedPhoneNumber:
      oneOf:
        - $ref: '#/components/schemas/CreateByoPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO'
      description: This is the phone number that the message is associated with.
      title: ServerMessageSessionDeletedPhoneNumber
    ServerMessageSessionDeletedType:
      type: string
      enum:
        - session.deleted
      description: >-
        This is the type of the message. "session.deleted" is sent when a
        session is deleted.
      title: ServerMessageSessionDeletedType
    ServerMessageSessionDeleted:
      type: object
      properties:
        phoneNumber:
          $ref: '#/components/schemas/ServerMessageSessionDeletedPhoneNumber'
          description: This is the phone number that the message is associated with.
        type:
          $ref: '#/components/schemas/ServerMessageSessionDeletedType'
          description: >-
            This is the type of the message. "session.deleted" is sent when a
            session is deleted.
        timestamp:
          type: number
          format: double
          description: This is the timestamp of the message.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: |-
            This is a live version of the `call.artifact`.

            This matches what is stored on `call.artifact` after the call.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: This is the assistant that the message is associated with.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer that the message is associated with.
        call:
          $ref: '#/components/schemas/Call'
          description: This is the call that the message is associated with.
        chat:
          $ref: '#/components/schemas/Chat'
          description: This is the chat object.
        session:
          $ref: '#/components/schemas/Session'
          description: This is the session that was deleted.
      required:
        - type
        - session
      title: ServerMessageSessionDeleted
    ServerMessageCallDeletedPhoneNumber:
      oneOf:
        - $ref: '#/components/schemas/CreateByoPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO'
      description: This is the phone number that the message is associated with.
      title: ServerMessageCallDeletedPhoneNumber
    ServerMessageCallDeletedType:
      type: string
      enum:
        - call.deleted
      description: >-
        This is the type of the message. "call.deleted" is sent when a call is
        deleted.
      title: ServerMessageCallDeletedType
    ServerMessageCallDeleted:
      type: object
      properties:
        phoneNumber:
          $ref: '#/components/schemas/ServerMessageCallDeletedPhoneNumber'
          description: This is the phone number that the message is associated with.
        type:
          $ref: '#/components/schemas/ServerMessageCallDeletedType'
          description: >-
            This is the type of the message. "call.deleted" is sent when a call
            is deleted.
        timestamp:
          type: number
          format: double
          description: This is the timestamp of the message.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: |-
            This is a live version of the `call.artifact`.

            This matches what is stored on `call.artifact` after the call.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: This is the assistant that the message is associated with.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer that the message is associated with.
        call:
          $ref: '#/components/schemas/Call'
          description: This is the call that the message is associated with.
        chat:
          $ref: '#/components/schemas/Chat'
          description: This is the chat object.
      required:
        - type
      title: ServerMessageCallDeleted
    ServerMessageCallDeleteFailedPhoneNumber:
      oneOf:
        - $ref: '#/components/schemas/CreateByoPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO'
        - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO'
        - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO'
      description: This is the phone number that the message is associated with.
      title: ServerMessageCallDeleteFailedPhoneNumber
    ServerMessageCallDeleteFailedType:
      type: string
      enum:
        - call.delete.failed
      description: >-
        This is the type of the message. "call.deleted" is sent when a call is
        deleted.
      title: ServerMessageCallDeleteFailedType
    ServerMessageCallDeleteFailed:
      type: object
      properties:
        phoneNumber:
          $ref: '#/components/schemas/ServerMessageCallDeleteFailedPhoneNumber'
          description: This is the phone number that the message is associated with.
        type:
          $ref: '#/components/schemas/ServerMessageCallDeleteFailedType'
          description: >-
            This is the type of the message. "call.deleted" is sent when a call
            is deleted.
        timestamp:
          type: number
          format: double
          description: This is the timestamp of the message.
        artifact:
          $ref: '#/components/schemas/Artifact'
          description: |-
            This is a live version of the `call.artifact`.

            This matches what is stored on `call.artifact` after the call.
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: This is the assistant that the message is associated with.
        customer:
          $ref: '#/components/schemas/CreateCustomerDTO'
          description: This is the customer that the message is associated with.
        call:
          $ref: '#/components/schemas/Call'
          description: This is the call that the message is associated with.
        chat:
          $ref: '#/components/schemas/Chat'
          description: This is the chat object.
      required:
        - type
      title: ServerMessageCallDeleteFailed
    ServerMessageMessage:
      oneOf:
        - $ref: '#/components/schemas/ServerMessageAssistantRequest'
        - $ref: '#/components/schemas/ServerMessageConversationUpdate'
        - $ref: '#/components/schemas/ServerMessageEndOfCallReport'
        - $ref: '#/components/schemas/ServerMessageHandoffDestinationRequest'
        - $ref: '#/components/schemas/ServerMessageHang'
        - $ref: '#/components/schemas/ServerMessageKnowledgeBaseRequest'
        - $ref: '#/components/schemas/ServerMessageModelOutput'
        - $ref: '#/components/schemas/ServerMessagePhoneCallControl'
        - $ref: '#/components/schemas/ServerMessageSpeechUpdate'
        - $ref: '#/components/schemas/ServerMessageStatusUpdate'
        - $ref: '#/components/schemas/ServerMessageToolCalls'
        - $ref: '#/components/schemas/ServerMessageTransferDestinationRequest'
        - $ref: '#/components/schemas/ServerMessageTransferUpdate'
        - $ref: '#/components/schemas/ServerMessageTranscript'
        - $ref: '#/components/schemas/ServerMessageUserInterrupted'
        - $ref: '#/components/schemas/ServerMessageLanguageChangeDetected'
        - $ref: '#/components/schemas/ServerMessageVoiceInput'
        - $ref: '#/components/schemas/ServerMessageAssistantSpeech'
        - $ref: '#/components/schemas/ServerMessageVoiceRequest'
        - $ref: '#/components/schemas/ServerMessageCallEndpointingRequest'
        - $ref: '#/components/schemas/ServerMessageChatCreated'
        - $ref: '#/components/schemas/ServerMessageChatDeleted'
        - $ref: '#/components/schemas/ServerMessageSessionCreated'
        - $ref: '#/components/schemas/ServerMessageSessionUpdated'
        - $ref: '#/components/schemas/ServerMessageSessionDeleted'
        - $ref: '#/components/schemas/ServerMessageCallDeleted'
        - $ref: '#/components/schemas/ServerMessageCallDeleteFailed'
      description: >-
        These are all the messages that can be sent to your server before, after
        and during the call. Configure the messages you'd like to receive in
        `assistant.serverMessages`.


        The server where the message is sent is determined by the following
        precedence order:


        1. `tool.server.url` (if configured, and only for "tool-calls" message)

        2. `assistant.serverUrl` (if configure)

        3. `phoneNumber.serverUrl` (if configured)

        4. `org.serverUrl` (if configured)
      title: ServerMessageMessage
    ServerMessage:
      type: object
      properties:
        message:
          $ref: '#/components/schemas/ServerMessageMessage'
          description: >-
            These are all the messages that can be sent to your server before,
            after and during the call. Configure the messages you'd like to
            receive in `assistant.serverMessages`.


            The server where the message is sent is determined by the following
            precedence order:


            1. `tool.server.url` (if configured, and only for "tool-calls"
            message)

            2. `assistant.serverUrl` (if configure)

            3. `phoneNumber.serverUrl` (if configured)

            4. `org.serverUrl` (if configured)
      required:
        - message
      title: ServerMessage
    ServerMessageResponseAssistantRequestDestination:
      oneOf:
        - $ref: '#/components/schemas/TransferDestinationNumber'
        - $ref: '#/components/schemas/TransferDestinationSip'
      description: >-
        This is the destination to transfer the inbound call to. This will
        immediately transfer without using any assistants.


        If this is sent, `assistantId`, `assistant`, `squadId`, and `squad` are
        ignored.
      title: ServerMessageResponseAssistantRequestDestination
    ServerMessageResponseAssistantRequest:
      type: object
      properties:
        destination:
          $ref: >-
            #/components/schemas/ServerMessageResponseAssistantRequestDestination
          description: >-
            This is the destination to transfer the inbound call to. This will
            immediately transfer without using any assistants.


            If this is sent, `assistantId`, `assistant`, `squadId`, and `squad`
            are ignored.
        assistantId:
          type: string
          description: >-
            This is the assistant ID that will be used for the call. To use a
            transient assistant, use `assistant` instead.


            To start a call with:

            - Assistant, use `assistantId` or `assistant`

            - Squad, use `squadId` or `squad`

            - Workflow, use `workflowId` or `workflow`
        assistant:
          $ref: '#/components/schemas/CreateAssistantDTO'
          description: >-
            This is the assistant that will be used for the call. To use an
            existing assistant, use `assistantId` instead.


            To start a call with:

            - Assistant, use `assistant`

            - Squad, use `squad`

            - Workflow, use `workflow`
        assistantOverrides:
          $ref: '#/components/schemas/AssistantOverrides'
          description: >-
            These are the overrides for the `assistant` or `assistantId`'s
            settings and template variables.
        squadId:
          type: string
          description: >-
            This is the squad that will be used for the call. To use a transient
            squad, use `squad` instead.


            To start a call with:

            - Assistant, use `assistant` or `assistantId`

            - Squad, use `squad` or `squadId`

            - Workflow, use `workflow` or `workflowId`
        squad:
          $ref: '#/components/schemas/CreateSquadDTO'
          description: >-
            This is a squad that will be used for the call. To use an existing
            squad, use `squadId` instead.


            To start a call with:

            - Assistant, use `assistant` or `assistantId`

            - Squad, use `squad` or `squadId`

            - Workflow, use `workflow` or `workflowId`
        squadOverrides:
          $ref: '#/components/schemas/AssistantOverrides'
          description: >-
            These are the overrides for the `squad` or `squadId`'s member
            settings and template variables.

            This will apply to all members of the squad.
        workflowId:
          type: string
          description: >-
            This is the workflow that will be used for the call. To use a
            transient workflow, use `workflow` instead.


            To start a call with:

            - Assistant, use `assistant` or `assistantId`

            - Squad, use `squad` or `squadId`

            - Workflow, use `workflow` or `workflowId`
        workflow:
          $ref: '#/components/schemas/CreateWorkflowDTO'
          description: >-
            This is a workflow that will be used for the call. To use an
            existing workflow, use `workflowId` instead.


            To start a call with:

            - Assistant, use `assistant` or `assistantId`

            - Squad, use `squad` or `squadId`

            - Workflow, use `workflow` or `workflowId`
        workflowOverrides:
          $ref: '#/components/schemas/WorkflowOverrides'
          description: >-
            These are the overrides for the `workflow` or `workflowId`'s
            settings and template variables.
        error:
          type: string
          description: >-
            This is the error if the call shouldn't be accepted. This is spoken
            to the customer.


            If this is sent, `assistantId`, `assistant`, `squadId`, `squad`, and
            `destination` are ignored.
      title: ServerMessageResponseAssistantRequest
    ServerMessageResponseHandoffDestinationRequestDestination:
      type: object
      properties: {}
      description: This is the destination you'd like the call to be transferred to.
      title: ServerMessageResponseHandoffDestinationRequestDestination
    ServerMessageResponseHandoffDestinationRequest:
      type: object
      properties:
        result:
          type: string
          description: >-
            This is the local tool result message returned for the handoff tool
            call.
        destination:
          $ref: >-
            #/components/schemas/ServerMessageResponseHandoffDestinationRequestDestination
          description: This is the destination you'd like the call to be transferred to.
        error:
          type: string
          description: This is the error message if the handoff should not be made.
      required:
        - destination
      title: ServerMessageResponseHandoffDestinationRequest
    KnowledgeBaseResponseDocument:
      type: object
      properties:
        content:
          type: string
          description: This is the content of the document.
        similarity:
          type: number
          format: double
          description: This is the similarity score of the document.
        uuid:
          type: string
          description: This is the uuid of the document.
      required:
        - content
        - similarity
      title: KnowledgeBaseResponseDocument
    ServerMessageResponseKnowledgeBaseRequest:
      type: object
      properties:
        documents:
          type: array
          items:
            $ref: '#/components/schemas/KnowledgeBaseResponseDocument'
          description: >-
            This is the list of documents that will be sent to the model
            alongside the `messages` to generate a response.
        message:
          $ref: '#/components/schemas/CustomMessage'
          description: >-
            This can be used to skip the model output generation and speak a
            custom message.
      title: ServerMessageResponseKnowledgeBaseRequest
    ToolCallResultMetadata:
      type: object
      properties: {}
      description: >-
        This is optional metadata for the tool call result to be sent to the
        client.
      title: ToolCallResultMetadata
    ToolCallResult:
      type: object
      properties:
        message:
          $ref: '#/components/schemas/ToolCallResultMessage'
          description: >-
            This is the message that will be spoken to the user.


            If this is not returned, assistant will speak:

            1. a `request-complete` or `request-failed` message from
            `tool.messages`, if it exists

            2. a response generated by the model, if not
        name:
          type: string
          description: This is the name of the function the model called.
        toolCallId:
          type: string
          description: This is the unique identifier for the tool call.
        result:
          type: string
          description: >-
            This is the result if the tool call was successful. This is added to
            the conversation history.


            Further, if this is returned, assistant will speak:

            1. the `message`, if it exists and is of type `request-complete`

            2. a `request-complete` message from `tool.messages`, if it exists

            3. a response generated by the model, if neither exist
        error:
          type: string
          description: >-
            This is the error if the tool call was not successful. This is added
            to the conversation history.


            Further, if this is returned, assistant will speak:

            1. the `message`, if it exists and is of type `request-failed`

            2. a `request-failed` message from `tool.messages`, if it exists

            3. a response generated by the model, if neither exist
        metadata:
          $ref: '#/components/schemas/ToolCallResultMetadata'
          description: >-
            This is optional metadata for the tool call result to be sent to the
            client.
      required:
        - name
        - toolCallId
      title: ToolCallResult
    ServerMessageResponseToolCalls:
      type: object
      properties:
        results:
          type: array
          items:
            $ref: '#/components/schemas/ToolCallResult'
          description: These are the results of the "tool-calls" message.
        error:
          type: string
          description: This is the error message if the tool call was not successful.
      title: ServerMessageResponseToolCalls
    ServerMessageResponseTransferDestinationRequestDestination:
      oneOf:
        - $ref: '#/components/schemas/TransferDestinationAssistant'
        - $ref: '#/components/schemas/TransferDestinationNumber'
        - $ref: '#/components/schemas/TransferDestinationSip'
      description: This is the destination you'd like the call to be transferred to.
      title: ServerMessageResponseTransferDestinationRequestDestination
    ServerMessageResponseTransferDestinationRequestMessage:
      oneOf:
        - $ref: '#/components/schemas/ToolMessageStart'
        - $ref: '#/components/schemas/ToolMessageComplete'
        - $ref: '#/components/schemas/ToolMessageFailed'
        - $ref: '#/components/schemas/ToolMessageDelayed'
      description: >-
        This is the message that will be spoken to the user as the tool is
        running.
      title: ServerMessageResponseTransferDestinationRequestMessage
    ServerMessageResponseTransferDestinationRequest:
      type: object
      properties:
        destination:
          $ref: >-
            #/components/schemas/ServerMessageResponseTransferDestinationRequestDestination
          description: This is the destination you'd like the call to be transferred to.
        message:
          $ref: >-
            #/components/schemas/ServerMessageResponseTransferDestinationRequestMessage
          description: >-
            This is the message that will be spoken to the user as the tool is
            running.
        error:
          type: string
          description: This is the error message if the transfer should not be made.
      title: ServerMessageResponseTransferDestinationRequest
    ServerMessageResponseVoiceRequest:
      type: object
      properties:
        data:
          type: string
          description: >-
            DO NOT respond to a `voice-request` webhook with this schema of {
            data }. This schema just exists to document what the response should
            look like. Follow these instructions:


            Here is what the request will look like:


            POST https://{assistant.voice.server.url}

            Content-Type: application/json


            {
              "messsage": {
                "type": "voice-request",
                "text": "Hello, world!",
                "sampleRate": 24000,
                ...other metadata about the call...
              }
            }


            The expected response is 1-channel 16-bit raw PCM audio at the
            sample rate specified in the request. Here is how the response will
            be piped to the transport:

            ```

            response.on('data', (chunk: Buffer) => {
              outputStream.write(chunk);
            });

            ```
      required:
        - data
      title: ServerMessageResponseVoiceRequest
    ServerMessageResponseCallEndpointingRequest:
      type: object
      properties:
        timeoutSeconds:
          type: number
          format: double
          description: >-
            This is the timeout in seconds to wait before considering the user's
            speech as finished.
      required:
        - timeoutSeconds
      title: ServerMessageResponseCallEndpointingRequest
    ServerMessageResponseMessageResponse:
      oneOf:
        - $ref: '#/components/schemas/ServerMessageResponseAssistantRequest'
        - $ref: '#/components/schemas/ServerMessageResponseHandoffDestinationRequest'
        - $ref: '#/components/schemas/ServerMessageResponseKnowledgeBaseRequest'
        - $ref: '#/components/schemas/ServerMessageResponseToolCalls'
        - $ref: '#/components/schemas/ServerMessageResponseTransferDestinationRequest'
        - $ref: '#/components/schemas/ServerMessageResponseVoiceRequest'
        - $ref: '#/components/schemas/ServerMessageResponseCallEndpointingRequest'
      description: >-
        This is the response that is expected from the server to the message.


        Note: Most messages don't expect a response. Only "assistant-request",
        "tool-calls" and "transfer-destination-request" do.
      title: ServerMessageResponseMessageResponse
    ServerMessageResponse:
      type: object
      properties:
        messageResponse:
          $ref: '#/components/schemas/ServerMessageResponseMessageResponse'
          description: >-
            This is the response that is expected from the server to the
            message.


            Note: Most messages don't expect a response. Only
            "assistant-request", "tool-calls" and "transfer-destination-request"
            do.
      required:
        - messageResponse
      title: ServerMessageResponse

```