Vapi Calls API
The Calls API from Vapi — 2 operation(s) for calls.
The Calls API from Vapi — 2 operation(s) for calls.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/vapi-calls-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Vapi Analytics Calls API
description: Voice AI for developers.
version: '1.0'
contact: {}
servers:
- url: https://api.vapi.ai
tags:
- name: Calls
paths:
/call:
post:
operationId: CallController_create
summary: Create Call
parameters: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateCallDTO'
responses:
'201':
description: ''
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/Call'
- $ref: '#/components/schemas/CallBatchResponse'
tags:
- Calls
security:
- bearer: []
get:
operationId: CallController_findAll
summary: List Calls
parameters:
- name: id
required: false
in: query
description: This is the unique identifier for the call.
schema:
type: string
- name: assistantId
required: false
in: query
description: This will return calls with the specified assistantId.
schema:
type: string
- name: phoneNumberId
required: false
in: query
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.'
schema:
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:
type: array
items:
$ref: '#/components/schemas/Call'
tags:
- Calls
security:
- bearer: []
/call/{id}:
get:
operationId: CallController_findOne
summary: Get Call
parameters:
- name: id
required: true
in: path
schema:
type: string
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/Call'
tags:
- Calls
security:
- bearer: []
patch:
operationId: CallController_update
summary: Update Call
parameters:
- name: id
required: true
in: path
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateCallDTO'
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/Call'
tags:
- Calls
security:
- bearer: []
delete:
operationId: CallController_deleteCallData
summary: Delete Call
parameters: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteCallDTO'
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/Call'
tags:
- Calls
security:
- bearer: []
components:
schemas:
FallbackCartesiaVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- cartesia
voiceId:
type: string
description: The ID of the particular voice you want to use.
model:
type: string
description: This is the model that will be used. This is optional and will default to the correct model for the voiceId.
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
example: sonic-english
language:
type: string
description: This is the language that will be used. This is optional and will default to the correct language for the voiceId.
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
example: en
experimentalControls:
description: Experimental controls for Cartesia voice generation
allOf:
- $ref: '#/components/schemas/CartesiaExperimentalControls'
generationConfig:
description: Generation config for fine-grained control of sonic-3 voice output (speed, volume, and experimental controls). Only available for sonic-3 model.
allOf:
- $ref: '#/components/schemas/CartesiaGenerationConfig'
pronunciationDictId:
type: string
description: Pronunciation dictionary ID for sonic-3. Allows custom pronunciations for specific words. Only available for sonic-3 model.
example: dict_abc123
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
required:
- provider
- voiceId
CreateEmailCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- 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.
minLength: 1
maxLength: 40
required:
- provider
- email
ImportTwilioPhoneNumberDTO:
type: object
properties:
fallbackDestination:
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.'
oneOf:
- $ref: '#/components/schemas/TransferDestinationNumber'
title: NumberTransferDestination
- $ref: '#/components/schemas/TransferDestinationSip'
title: SipTransferDestination
hooks:
type: array
description: This is the hooks that will be used for incoming calls to this phone number.
items:
oneOf:
- $ref: '#/components/schemas/PhoneNumberHookCallRinging'
title: PhoneNumberHookCallRinging
- $ref: '#/components/schemas/PhoneNumberHookCallEnding'
title: PhoneNumberHookCallEnding
smsEnabled:
type: boolean
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'
default: true
twilioPhoneNumber:
type: string
description: These are the digits of the phone number you own on your Twilio.
deprecated: true
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.
maxLength: 40
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:
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'
allOf:
- $ref: '#/components/schemas/Server'
required:
- twilioPhoneNumber
- twilioAccountSid
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'
example: true
recordingFormat:
type: string
description: 'This determines the format of the recording. Defaults to `wav;l16`.
@default ''wav;l16'''
enum:
- wav;l16
- mp3
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'
example: 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'
example: false
fullMessageHistoryEnabled:
type: boolean
description: This determines whether the artifact contains the full message history, even after handoff context engineering. Defaults to false.
example: 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'
example: 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 ''/'''
example: /pcaps
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'
example: true
loggingEnabled:
type: boolean
description: 'This determines whether the call logs are enabled. Defaults to true.
@default true'
example: 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'
example: true
transcriptPlan:
description: This is the plan for `call.artifact.transcript`. To disable, set `transcriptPlan.enabled` to false.
allOf:
- $ref: '#/components/schemas/TranscriptPlan'
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:
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.'
type: array
items:
type: string
structuredOutputs:
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.'
type: array
items:
$ref: '#/components/schemas/CreateStructuredOutputDTO'
scorecardIds:
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.'
type: array
items:
type: string
scorecards:
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.'
type: array
items:
$ref: '#/components/schemas/CreateScorecardDTO'
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 ''/'''
SessionCreatedHook:
type: object
properties:
'on':
type: string
description: This is the event that triggers this hook
enum:
- session.created
maxLength: 1000
do:
type: array
description: This is the set of actions to perform when the hook triggers.
items:
oneOf:
- $ref: '#/components/schemas/ToolCallHookAction'
title: ToolCallHookAction
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'
maxLength: 1000
required:
- 'on'
- do
TurnLatency:
type: object
properties:
modelLatency:
type: number
description: This is the model latency for the first token.
voiceLatency:
type: number
description: This is the voice latency from the model output.
transcriberLatency:
type: number
description: This is the transcriber latency from the user speech.
endpointingLatency:
type: number
description: This is the endpointing latency.
turnLatency:
type: number
description: This is the latency for the whole turn.
FallbackWellSaidVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- wellsaid
voiceId:
type: string
description: The WellSaid speaker ID to synthesize.
model:
type: string
description: This is the model that will be used.
enum:
- caruso
- legacy
enableSsml:
type: boolean
description: Enables limited SSML translation for input text.
libraryIds:
description: Array of library IDs to use for voice synthesis.
type: array
items:
type: string
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
required:
- provider
- voiceId
ToolRejectionPlan:
type: object
properties:
conditions:
type: array
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'
examples:
- '[{ type: "regex", regex: "(?i)\\b(cancel|stop)\\b", target: { role: "user" } }]'
- '[{ type: "group", operator: "OR", conditions: [...] }]'
items:
oneOf:
- $ref: '#/components/schemas/RegexCondition'
title: RegexCondition
- $ref: '#/components/schemas/LiquidCondition'
title: LiquidCondition
- $ref: '#/components/schemas/GroupCondition'
title: GroupCondition
description: This is the GroupCondition object but Swagger does not display nested schemas correctly.
CreateCustomerDTO:
type: object
properties:
numberE164CheckEnabled:
type: boolean
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)'
default: true
extension:
type: string
description: This is the extension that will be dialed after the call is answered.
maxLength: 10
example: null
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.'
allOf:
- $ref: '#/components/schemas/AssistantOverrides'
number:
type: string
description: This is the number of the customer.
minLength: 3
maxLength: 40
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>`.'
maxLength: 40
email:
type: string
description: This is the email of the customer.
maxLength: 40
externalId:
type: string
description: This is the external ID of the customer.
maxLength: 40
SayHookAction:
type: object
properties:
type:
type: string
description: This is the type of action - must be "say"
enum:
- say
prompt:
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.'
oneOf:
- type: string
title: String
- type: array
items:
oneOf:
- $ref: '#/components/schemas/SystemMessage'
title: SystemMessage
- $ref: '#/components/schemas/UserMessage'
title: UserMessage
- $ref: '#/components/schemas/AssistantMessage'
title: AssistantMessage
- $ref: '#/components/schemas/ToolMessage'
title: ToolMessage
- $ref: '#/components/schemas/DeveloperMessage'
title: DeveloperMessage
title: MessageArray
examples:
- Ask the user if they're still in the call
- - role: system
content: You are a helpful assistant, and would like to know if the user is still in the call based on the conversation history in {{transcript}}
exact:
type: object
description: This is the message to say
required:
- type
CreateHumeCredentialDTO:
type: object
properties:
provider:
type: string
enum:
- hume
apiKey:
type: string
maxLength: 10000
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
TransferFallbackPlan:
type: object
properties:
message:
description: This is the message the assistant will deliver to the customer if the transfer fails.
oneOf:
- type: string
- $ref: '#/components/schemas/CustomMessage'
endCallEnabled:
type: boolean
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'
default: true
required:
- message
FallbackSesameVoice:
type: object
properties:
cachingEnabled:
type: boolean
description: This is the flag to toggle voice caching for the assistant.
example: true
default: true
provider:
type: string
description: This is the voice provider that will be used.
enum:
- sesame
voiceId:
type: string
description: This is the provider-specific ID that will be used.
title: Sesame Voice ID. This should be either a name (a built-in voice) or a UUID (a custom voice).
model:
type: string
description: This is the model that will be used.
enum:
- csm-1b
chunkPlan:
description: This is the plan for chunking the model output before it is sent to the voice provider.
allOf:
- $ref: '#/components/schemas/ChunkPlan'
required:
- provider
- voiceId
- model
WorkflowGoogleModel:
type: object
properties:
provider:
type: string
description: This is the provider of the model (`google`).
enum:
- google
model:
type: string
description: This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
maxLength: 100
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
temperature:
type: number
description: This is the temperature of the model.
minimum: 0
maximum: 2
maxTokens:
type: number
description: This is the max tokens of the model.
minimum: 50
maximum: 10000
required:
- provider
- model
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 //
# --- truncated at 32 KB (827 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/vapi/refs/heads/main/openapi/vapi-calls-api-openapi.yml