Work with this as data
Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
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.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/vapi-eval-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
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 Specification
openapi: 3.2.0
info:
title: Vapi Analytics Eval API
description: Voice AI for developers.
version: '1.0'
contact: {}
servers:
- url: https://api.vapi.ai
tags:
- name: Eval
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
schema:
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
schema:
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
schema:
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
schema:
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
schema:
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:
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
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
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.
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
CreateEvalDTO:
type: object
properties:
messages:
type: array
description: 'This is the mock conversation that will be used to evaluate the flow of the conversation.
Mock Messages are used to simulate the flow of the conversation
Evaluation Messages are used as checkpoints in the flow where the model''s response to previous conversation needs to be evaluated to check the content and tool calls'
example: '[{ role: "user", content: "Hello, how are you?" }, { role: "assistant", judgePlan: { type: "exact", content: "I am good, thank you!" } }]'
items:
oneOf:
- $ref: '#/components/schemas/ChatEvalAssistantMessageMock'
title: ChatEvalAssistantMessageMock
- $ref: '#/components/schemas/ChatEvalSystemMessageMock'
title: ChatEvalSystemMessageMock
- $ref: '#/components/schemas/ChatEvalToolResponseMessageMock'
title: ChatEvalToolResponseMessageMock
- $ref: '#/components/schemas/ChatEvalToolResponseMessageEvaluation'
title: ChatEvalToolResponseMessageEvaluation
- $ref: '#/components/schemas/ChatEvalUserMessageMock'
title: ChatEvalUserMessageMock
- $ref: '#/components/schemas/ChatEvalAssistantMessageEvaluation'
title: ChatEvalAssistantMessageEvaluation
name:
type: string
description: 'This is the name of the eval.
It helps identify what the eval is checking for.'
example: Verified User Flow Eval
minLength: 1
maxLength: 80
description:
type: string
description: 'This is the description of the eval.
This helps describe the eval and its purpose in detail. It will not be used to evaluate the flow of the conversation.'
example: This eval checks if the user flow is verified.
maxLength: 500
type:
type: string
description: 'This is the type of the eval.
Currently it is fixed to `chat.mockConversation`.'
example: chat.mockConversation
enum:
- chat.mockConversation
required:
- messages
- type
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
# --- truncated at 32 KB (742 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/vapi/refs/heads/main/openapi/vapi-eval-api-openapi.yml