Vapi Eval API

Eval endpoints.

Documentation

Specifications

Schemas & Data

Other Resources

OpenAPI Specification

vapi-ai-eval-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: Vapi Analytics Eval API
  description: Vapi API — Analytics resource. Voice AI for developers.
  version: '1.0'
  contact:
    name: Vapi
    url: https://vapi.ai
servers:
- url: https://api.vapi.ai
security:
- bearer: []
tags:
- name: Eval
  description: Eval endpoints.
paths:
  /eval:
    post:
      operationId: EvalController_create
      summary: Create Eval
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateEvalDTO'
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Eval'
      tags:
      - Eval
      security:
      - bearer: []
    get:
      operationId: EvalController_getPaginated
      summary: List Evals
      parameters:
      - name: id
        required: false
        in: query
        schema:
          type: string
      - name: page
        required: false
        in: query
        description: This is the page number to return. Defaults to 1.
        schema:
          minimum: 1
          type: number
      - name: sortOrder
        required: false
        in: query
        description: This is the sort order for pagination. Defaults to 'DESC'.
        schema:
          enum:
          - ASC
          - DESC
          type: string
      - name: sortBy
        required: false
        in: query
        description: This is the column to sort by. Defaults to 'createdAt'.
        schema:
          enum:
          - createdAt
          - duration
          - cost
          type: string
      - name: limit
        required: false
        in: query
        description: This is the maximum number of items to return. Defaults to 100.
        schema:
          minimum: 0
          maximum: 1000
          type: number
      - name: createdAtGt
        required: false
        in: query
        description: This will return items where the createdAt is greater than the specified value.
        schema:
          format: date-time
          type: string
      - name: createdAtLt
        required: false
        in: query
        description: This will return items where the createdAt is less than the specified value.
        schema:
          format: date-time
          type: string
      - name: createdAtGe
        required: false
        in: query
        description: This will return items where the createdAt is greater than or equal to the specified value.
        schema:
          format: date-time
          type: string
      - name: createdAtLe
        required: false
        in: query
        description: This will return items where the createdAt is less than or equal to the specified value.
        schema:
          format: date-time
          type: string
      - name: updatedAtGt
        required: false
        in: query
        description: This will return items where the updatedAt is greater than the specified value.
        schema:
          format: date-time
          type: string
      - name: updatedAtLt
        required: false
        in: query
        description: This will return items where the updatedAt is less than the specified value.
        schema:
          format: date-time
          type: string
      - name: updatedAtGe
        required: false
        in: query
        description: This will return items where the updatedAt is greater than or equal to the specified value.
        schema:
          format: date-time
          type: string
      - name: updatedAtLe
        required: false
        in: query
        description: This will return items where the updatedAt is less than or equal to the specified value.
        schema:
          format: date-time
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EvalPaginatedResponse'
      tags:
      - Eval
      security:
      - bearer: []
  /eval/{id}:
    patch:
      operationId: EvalController_update
      summary: Update Eval
      parameters:
      - name: id
        required: true
        in: path
        description: The unique identifier for the resource.
        schema:
          format: uuid
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateEvalDTO'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Eval'
      tags:
      - Eval
      security:
      - bearer: []
    delete:
      operationId: EvalController_remove
      summary: Delete Eval
      parameters:
      - name: id
        required: true
        in: path
        description: The unique identifier for the resource.
        schema:
          format: uuid
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Eval'
      tags:
      - Eval
      security:
      - bearer: []
    get:
      operationId: EvalController_get
      summary: Get Eval
      parameters:
      - name: id
        required: true
        in: path
        description: The unique identifier for the resource.
        schema:
          format: uuid
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Eval'
      tags:
      - Eval
      security:
      - bearer: []
  /eval/run/{id}:
    delete:
      operationId: EvalController_removeRun
      summary: Delete Eval Run
      parameters:
      - name: id
        required: true
        in: path
        description: The unique identifier for the resource.
        schema:
          format: uuid
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EvalRun'
      tags:
      - Eval
      security:
      - bearer: []
    get:
      operationId: EvalController_getRun
      summary: Get Eval Run
      parameters:
      - name: id
        required: true
        in: path
        description: The unique identifier for the resource.
        schema:
          format: uuid
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EvalRun'
      tags:
      - Eval
      security:
      - bearer: []
  /eval/run:
    post:
      operationId: EvalController_run
      summary: Create Eval Run
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateEvalRunDTO'
      responses:
        '200':
          description: ''
        '201':
          description: ''
          content:
            application/json:
              schema:
                type: object
      tags:
      - Eval
      security:
      - bearer: []
    get:
      operationId: EvalController_getRunsPaginated
      summary: List Eval Runs
      parameters:
      - name: id
        required: false
        in: query
        schema:
          type: string
      - name: page
        required: false
        in: query
        description: This is the page number to return. Defaults to 1.
        schema:
          minimum: 1
          type: number
      - name: sortOrder
        required: false
        in: query
        description: This is the sort order for pagination. Defaults to 'DESC'.
        schema:
          enum:
          - ASC
          - DESC
          type: string
      - name: sortBy
        required: false
        in: query
        description: This is the column to sort by. Defaults to 'createdAt'.
        schema:
          enum:
          - createdAt
          - duration
          - cost
          type: string
      - name: limit
        required: false
        in: query
        description: This is the maximum number of items to return. Defaults to 100.
        schema:
          minimum: 0
          maximum: 1000
          type: number
      - name: createdAtGt
        required: false
        in: query
        description: This will return items where the createdAt is greater than the specified value.
        schema:
          format: date-time
          type: string
      - name: createdAtLt
        required: false
        in: query
        description: This will return items where the createdAt is less than the specified value.
        schema:
          format: date-time
          type: string
      - name: createdAtGe
        required: false
        in: query
        description: This will return items where the createdAt is greater than or equal to the specified value.
        schema:
          format: date-time
          type: string
      - name: createdAtLe
        required: false
        in: query
        description: This will return items where the createdAt is less than or equal to the specified value.
        schema:
          format: date-time
          type: string
      - name: updatedAtGt
        required: false
        in: query
        description: This will return items where the updatedAt is greater than the specified value.
        schema:
          format: date-time
          type: string
      - name: updatedAtLt
        required: false
        in: query
        description: This will return items where the updatedAt is less than the specified value.
        schema:
          format: date-time
          type: string
      - name: updatedAtGe
        required: false
        in: query
        description: This will return items where the updatedAt is greater than or equal to the specified value.
        schema:
          format: date-time
          type: string
      - name: updatedAtLe
        required: false
        in: query
        description: This will return items where the updatedAt is less than or equal to the specified value.
        schema:
          format: date-time
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EvalRunPaginatedResponse'
      tags:
      - Eval
      security:
      - bearer: []
components:
  schemas:
    CreateRunpodCredentialDTO:
      type: object
      properties:
        provider:
          type: string
          enum:
          - 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.
          minLength: 1
          maxLength: 40
      required:
      - provider
      - apiKey
    GoogleVoicemailDetectionPlan:
      type: object
      properties:
        beepMaxAwaitSeconds:
          type: number
          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'
          minimum: 0
          maximum: 30
          default: 30
        provider:
          type: string
          description: This is the provider to use for voicemail detection.
          enum:
          - google
        backoffPlan:
          description: This is the backoff plan for the voicemail detection.
          allOf:
          - $ref: '#/components/schemas/VoicemailDetectionBackoffPlan'
        type:
          type: string
          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)'
          enum:
          - audio
          - transcript
      required:
      - provider
    ElevenLabsTranscriber:
      type: object
      properties:
        provider:
          type: string
          description: This is the transcription provider that will be used.
          enum:
          - 11labs
        model:
          description: This is the model that will be used for the transcription.
          oneOf:
          - type: string
            enum:
            - scribe_v1
            - scribe_v2
            - scribe_v2_realtime
        language:
          type: string
          description: This is the language that will be used for the transcription.
          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
        silenceThresholdSeconds:
          type: number
          description: This is the number of seconds of silence before VAD commits (0.3-3.0).
          minimum: 0.3
          maximum: 3
          example: 1.5
        confidenceThreshold:
          type: number
          description: This is the VAD sensitivity (0.1-0.9, lower indicates more sensitive).
          minimum: 0.1
          maximum: 0.9
          example: 0.4
        minSpeechDurationMs:
          type: number
          description: This is the minimum speech duration for VAD (50-2000ms).
          minimum: 50
          maximum: 2000
          example: 100
        minSilenceDurationMs:
          type: number
          description: This is the minimum silence duration for VAD (50-2000ms).
          minimum: 50
          maximum: 2000
          example: 100
        fallbackPlan:
          description: This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails.
          allOf:
          - $ref: '#/components/schemas/FallbackTranscriberPlan'
      required:
      - provider
    ChatEvalAssistantMessageMockToolCall:
      type: object
      properties:
        name:
          type: string
          description: 'This is the name of the tool that will be called.

            It should be one of the tools created in the organization.'
          example: get_weather
          maxLength: 100
        arguments:
          type: object
          description: This is the arguments that will be passed to the tool call.
          example: '"{"city": "San Francisco"}"'
      required:
      - name
    CreateSlackSendMessageToolDTO:
      type: object
      properties:
        messages:
          type: array
          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.'
          items:
            oneOf:
            - $ref: '#/components/schemas/ToolMessageStart'
              title: ToolMessageStart
            - $ref: '#/components/schemas/ToolMessageComplete'
              title: ToolMessageComplete
            - $ref: '#/components/schemas/ToolMessageFailed'
              title: ToolMessageFailed
            - $ref: '#/components/schemas/ToolMessageDelayed'
              title: ToolMessageDelayed
        type:
          type: string
          enum:
          - slack.message.send
          description: The type of tool. "slack.message.send" for Slack Send Message tool.
        rejectionPlan:
          description: "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n```json\n{\n  conditions: [{\n    type: 'regex',\n    regex: '(?i)\\\\b(bye|goodbye|farewell|see you later|take care)\\\\b',\n    target: { position: -1, role: 'user' },\n    negate: true  // Reject if pattern does NOT match\n  }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n{\n  conditions: [{\n    type: 'regex',\n    regex: '\\\\?',\n    target: { position: -1, role: 'user' }\n  }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n  conditions: [{\n    type: 'liquid',\n    liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n  {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n    {% assign mentioned = true %}\n    {% break %}\n  {% endif %}\n{% endfor %}\n{% if mentioned %}\n  false\n{% else %}\n  true\n{% endif %}`\n  }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying to exit\n```json\n{\n  conditions: [{\n    type: 'liquid',\n    liquid: `{% assign recentMessages = messages | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size < 3 %}\n  false\n{% else %}\n  {% assign msg1 = userMessages[0].content | downcase %}\n  {% assign msg2 = userMessages[1].content | downcase %}\n  {% assign msg3 = userMessages[2].content | downcase %}\n  {% comment %} Check for repetitive messages {% endcomment %}\n  {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n    true\n  {% comment %} Check for common loop phrases {% endcomment %}\n  {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}\n    true\n  {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}\n    true\n  {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}\n    true\n  {% else %}\n    false\n  {% endif %}\n{% endif %}`\n  }]\n}\n```"
          allOf:
          - $ref: '#/components/schemas/ToolRejectionPlan'
      required:
      - type
    EvalRun:
      type: object
      properties:
        status:
          type: string
          description: 'This is the status of the eval run. When an eval run is created, the status is ''running''.

            When the eval run is completed, the status is ''ended''.'
          example: running
          enum:
          - running
          - ended
          - queued
        endedReason:
          type: string
          description: 'This is the reason for the eval run to end.

            When the eval run is completed normally i.e end of mock conversation, the status is ''mockConversation.done''.

            When the eval fails due to an error like Chat error or incorrect configuration, the status is ''error''.

            When the eval runs for too long, due to model issues or tool call issues, the status is ''timeout''.

            When the eval run is cancelled by the user, the status is ''cancelled''.

            When the eval run is cancelled by Vapi for any reason, the status is ''aborted''.'
          example: mockConversation.done
          enum:
          - mockConversation.done
          - error
          - timeout
          - cancelled
          - aborted
        eval:
          description: This is the transient eval that will be run
          oneOf:
          - $ref: '#/components/schemas/CreateEvalDTO'
            title: CreateEvalDTO
          allOf:
          - $ref: '#/components/schemas/CreateEvalDTO'
        target:
          description: This is the target that will be run against the eval
          oneOf:
          - $ref: '#/components/schemas/EvalRunTargetAssistant'
            title: EvalRunTargetAssistant
          - $ref: '#/components/schemas/EvalRunTargetSquad'
            title: EvalRunTargetSquad
        id:
          type: string
        orgId:
          type: string
        createdAt:
          format: date-time
          type: string
        startedAt:
          format: date-time
          type: string
        endedAt:
          format: date-time
          type: string
        endedMessage:
          type: string
          description: This is the ended message when the eval run ended for any reason apart from mockConversation.done
          example: The Assistant returned an error
        results:
          description: 'This is the results of the eval or suite run.

            The array will have a single item for an eval run, and multiple items each corresponding to the an eval in a suite run in the same order as the evals in the suite.'
          type: array
          items:
            $ref: '#/components/schemas/EvalRunResult'
        cost:
          type: number
          description: This is the cost of the eval or suite run in USD.
          example: 0.01
        costs:
          description: This is the break up of costs of the eval or suite run.
          example: '[{ type: "model", model: "gpt-4o", cost: 0.01 }]'
          type: array
          items:
            type: object
        type:
          type: string
          description: 'This is the type of the run.

            Currently it is fixed to `eval`.'
          example: eval
          enum:
          - eval
        evalId:
          type: string
          description: This is the id of the eval that will be run.
          example: 123e4567-e89b-12d3-a456-426614174000
      required:
      - status
      - endedReason
      - target
      - id
      - orgId
      - createdAt
      - startedAt
      - endedAt
      - results
      - cost
      - costs
      - type
    CreateGoHighLevelCalendarAvailabilityToolDTO:
      type: object
      properties:
        messages:
          type: array
          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.'
          items:
            oneOf:
            - $ref: '#/components/schemas/ToolMessageStart'
              title: ToolMessageStart
            - $ref: '#/components/schemas/ToolMessageComplete'
              title: ToolMessageComplete
            - $ref: '#/components/schemas/ToolMessageFailed'
              title: ToolMessageFailed
            - $ref: '#/components/schemas/ToolMessageDelayed'
              title: ToolMessageDelayed
        type:
          type: string
          enum:
          - gohighlevel.calendar.availability.check
          description: The type of tool. "gohighlevel.calendar.availability.check" for GoHighLevel Calendar Availability Check tool.
        rejectionPlan:
          description: "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n```json\n{\n  conditions: [{\n    type: 'regex',\n    regex: '(?i)\\\\b(bye|goodbye|farewell|see you later|take care)\\\\b',\n    target: { position: -1, role: 'user' },\n    negate: true  // Reject if pattern does NOT match\n  }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n{\n  conditions: [{\n    type: 'regex',\n    regex: '\\\\?',\n    target: { position: -1, role: 'user' }\n  }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n  conditions: [{\n    type: 'liquid',\n    liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n  {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n    {% assign mentioned = true %}\n    {% break %}\n  {% endif %}\n{% endfor %}\n{% if mentioned %}\n  false\n{% else %}\n  true\n{% endif %}`\n  }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying to exit\n```json\n{\n  conditions: [{\n    type: 'liquid',\n    liquid: `{% assign recentMessages = messages | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size < 3 %}\n  false\n{% else %}\n  {% assign msg1 = userMessages[0].content | downcase %}\n  {% assign msg2 = userMessages[1].content | downcase %}\n  {% assign msg3 = userMessages[2].content | downcase %}\n  {% comment %} Check for repetitive messages {% endcomment %}\n  {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n    true\n  {% comment %} Check for common loop phrases {% endcomment %}\n  {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}\n    true\n  {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}\n    true\n  {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}\n    true\n  {% else %}\n    false\n  {% endif %}\n{% endif %}`\n  }]\n}\n```"
          allOf:
          - $ref: '#/components/schemas/ToolRejectionPlan'
      required:
      - type
    AssistantOverrides:
      type: object
      properties:
        transcriber:
          description: These are the options for the assistant's transcriber.
          oneOf:
          - $ref: '#/components/schemas/AssemblyAITranscriber'
            title: AssemblyAITranscriber
          - $ref: '#/components/schemas/AzureSpeechTranscriber'
            title: AzureSpeechTranscriber
          - $ref: '#/components/schemas/CustomTranscriber'
            title: CustomTranscriber
          - $ref: '#/components/schemas/DeepgramTranscriber'
            title: DeepgramTranscriber
          - $ref: '#/components/schemas/ElevenLabsTranscriber'
            title: ElevenLabsTranscriber
          - $ref: '#/components/schemas/GladiaTranscriber'
            title: GladiaTranscriber
          - $ref: '#/components/schemas/GoogleTranscriber'
            title: GoogleTranscriber
          - $ref: '#/components/schemas/SpeechmaticsTranscriber'
            title: SpeechmaticsTranscriber
          - $ref: '#/components/schemas/TalkscriberTranscriber'
            title: TalkscriberTranscriber
          - $ref: '#/components/schemas/OpenAITranscriber'
            title: OpenAITranscriber
          - $ref: '#/components/schemas/CartesiaTranscriber'
            title: CartesiaTranscriber
          - $ref: '#/components/schemas/SonioxTranscriber'
            title: SonioxTranscriber
          - $ref: '#/components/schemas/XaiTranscriber'
            title: XaiTranscriber
        model:
          description: These are the options for the assistant's LLM.
          oneOf:
          - $ref: '#/components/schemas/AnthropicModel'
            title: Anthropic
          - $ref: '#/components/schemas/AnthropicBedrockModel'
            title: AnthropicBedrock
          - $ref: '#/components/schemas/AnyscaleModel'
            title: Anyscale
          - $ref: '#/components/schemas/CerebrasModel'
            title: Cerebras
          - $ref: '#/components/schemas/CustomLLMModel'
            title: CustomLLM
          - $ref: '#/components/schemas/DeepInfraModel'
            title: DeepInfra
          - $ref: '#/components/schemas/DeepSeekModel'
            title: DeepSeek
          - $ref: '#/components/schemas/GoogleModel'
            title: Google
          - $ref: '#/components/schemas/GroqModel'
            title: Groq
          - $ref: '#/components/schemas/InflectionAIModel'
            title: InflectionAI
          - $ref: '#/components/schemas/MinimaxLLMModel'
            title: MiniMaxLLM
          - $ref: '#/components/schemas/OpenAIModel'
            title: OpenAI
          - $ref: '#/components/schemas/OpenRouterModel'
            title: OpenRouter
          - $ref: '#/components/schemas/PerplexityAIModel'
            title: PerplexityAI
          - $ref: '#/components/schemas/TogetherAIModel'
            title: Together
          - $ref: '#/components/schemas/XaiModel'
            title: XAI
        voice:
          description: These are the options for the assistant's voice.
          oneOf:
          - $ref: '#/components/schemas/AzureVoice'
            title: AzureVoice
          - $ref: '#/components/schemas/CartesiaVoice'
            title: CartesiaVoice
          - $ref: '#/components/schemas/CustomVoice'
            title: CustomVoice
          - $ref: '#/components/schemas/DeepgramVoice'
            title: DeepgramVoice
          - $ref: '#/components/schemas/ElevenLabsVoice'
            title: ElevenLabsVoice
          - $ref: '#/components/schemas/HumeVoice'
            title: HumeVoice
          - $ref: '#/components/schemas/LMNTVoice'
            title: LMNTVoice
          - $ref: '#/components/schemas/NeuphonicVoice'
            title: NeuphonicVoice
          - $ref: '#/components/schemas/OpenAIVoice'
            title: OpenAIVoice
          - $ref: '#/components/schemas/PlayHTVoice'
            title: PlayHTVoice
          - $ref: '#/components/schemas/WellSaidVoice'
            title: WellSaidVoice
          - $ref: '#/components/schemas/RimeAIVoice'
            title: RimeAIVoice
          - $ref: '#/components/schemas/SmallestAIVoice'
            title: SmallestAIVoice
          - $ref: '#/components/schemas/TavusVoice'
            title: TavusVoice
          - $ref: '#/components/schemas/VapiVoice'
            title: VapiVoice
          - $ref: '#/components/schemas/SesameVoice'
            title: SesameVoice
          - $ref: '#/components/schemas/InworldVoice'
            title: InworldVoice
          - $ref: '#/components/schemas/MinimaxVoice'
            title: MinimaxVoice
          - $ref: '#/components/schemas/XaiVoice'
            title: XaiVoice
        firstMessage:
          type: s

# --- truncated at 32 KB (750 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/vapi-ai/refs/heads/main/openapi/vapi-ai-eval-api-openapi.yml