openapi: 3.0.0
info:
title: Vapi Analytics Sessions 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: Sessions
description: Sessions endpoints.
paths:
/session:
post:
operationId: SessionController_create
summary: Create Session
parameters: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateSessionDTO'
responses:
'201':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/Session'
tags:
- Sessions
security:
- bearer: []
get:
operationId: SessionController_findAllPaginated
summary: List Sessions
parameters:
- name: id
required: false
in: query
description: This is the unique identifier for the session to filter by.
schema:
type: string
- name: name
required: false
in: query
description: This is the name of the session to filter by.
schema:
type: string
- name: assistantId
required: false
in: query
description: This is the ID of the assistant to filter sessions by.
schema:
type: string
- name: assistantIdAny
required: false
in: query
description: Filter by multiple assistant IDs. Provide as comma-separated values.
schema:
example: assistant-1,assistant-2,assistant-3
type: string
- name: squadId
required: false
in: query
description: This is the ID of the squad to filter sessions by.
schema:
type: string
- name: workflowId
required: false
in: query
description: This is the ID of the workflow to filter sessions by.
schema:
type: string
- required: false
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)'
name: numberE164CheckEnabled
in: query
schema:
default: true
type: boolean
- required: false
description: This is the extension that will be dialed after the call is answered.
name: extension
in: query
schema:
maxLength: 10
example: null
type: string
- name: assistantOverrides
required: false
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.'
allOf:
- $ref: '#/components/schemas/AssistantOverrides'
in: query
schema: {}
- required: false
description: This is the number of the customer.
name: number
in: query
schema:
minLength: 3
maxLength: 40
type: string
- required: false
description: This is the SIP URI of the customer.
name: sipUri
in: query
schema:
type: string
- required: false
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>`.'
name: name
in: query
schema:
maxLength: 40
type: string
- required: false
description: This is the email of the customer.
name: email
in: query
schema:
maxLength: 40
type: string
- required: false
description: This is the external ID of the customer.
name: externalId
in: query
schema:
maxLength: 40
type: string
- name: customerNumberAny
required: false
in: query
description: Filter by any of the specified customer phone numbers (comma-separated).
schema:
example: +1234567890,+0987654321
type: string
- name: phoneNumberId
required: false
in: query
description: This will return sessions with the specified phoneNumberId.
schema:
type: string
- name: phoneNumberIdAny
required: false
in: query
description: This will return sessions with any of the specified phoneNumberIds.
schema:
type: array
items:
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/SessionPaginatedResponse'
tags:
- Sessions
security:
- bearer: []
/session/{id}:
get:
operationId: SessionController_findOne
summary: Get Session
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/Session'
tags:
- Sessions
security:
- bearer: []
patch:
operationId: SessionController_update
summary: Update Session
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/UpdateSessionDTO'
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/Session'
tags:
- Sessions
security:
- bearer: []
delete:
operationId: SessionController_remove
summary: Delete Session
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/Session'
tags:
- Sessions
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
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
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: 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.'
example: Hello! How can I help you today?
firstMessageInterruptionsEnabled:
type: boolean
default: false
firstMessageMode:
type: string
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'''
enum:
- assistant-speaks-first
- assistant-speaks-first-with-model-generated-message
- assistant-waits-for-user
example: assistant-speaks-first
voicemailDetection:
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.'
oneOf:
- type: string
enum:
- 'off'
- $ref: '#/components/schemas/GoogleVoicemailDetectionPlan'
title: Google
- $ref: '#/components/schemas/OpenAIVoicemailDetectionPlan'
title: OpenAI
- $ref: '#/components/schemas/TwilioVoicemailDetectionPlan'
title: Twilio
- $ref: '#/components/schemas/VapiVoicemailDetectionPlan'
title: Vapi
clientMessages:
type: array
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
example:
- 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
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.
items:
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
serverMessages:
type: array
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
# --- truncated at 32 KB (744 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/vapi-ai/refs/heads/main/openapi/vapi-ai-sessions-api-openapi.yml