---
title: "List Eval Runs"
method: GET
path: "/eval/run"
tags: ["Eval"]
---

# List Eval Runs

`GET /eval/run`

## Query parameters

- `id` string
- `page` number
- `sortOrder` 'ASC' | 'DESC'
- `sortBy` 'createdAt' | 'duration' | 'cost'
- `limit` number
- `createdAtGt` string, date-time
- `createdAtLt` string, date-time
- `createdAtGe` string, date-time
- `createdAtLe` string, date-time
- `updatedAtGt` string, date-time
- `updatedAtLt` string, date-time
- `updatedAtGe` string, date-time
- `updatedAtLe` string, date-time

## Response `200`

- EvalRunPaginatedResponse
  - `results` EvalRun[], required
    - `status` 'running' | 'ended' | 'queued', required — 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'.
    - `endedReason` 'mockConversation.done' | 'error' | 'timeout' | 'cancelled' | 'aborted', required — 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'.
    - `eval` CreateEvalDTO
      - `messages` union[], required — 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
        - union
          - ChatEvalAssistantMessageMock
            - `role` 'assistant', required — This is the role of the message author. For a mock assistant message, the role is always 'assistant' @default 'assistant'
            - `content` string — This is the content of the assistant message. This is the message that the assistant would have sent.
            - `toolCalls` ChatEvalAssistantMessageMockToolCall[] — This is the tool calls that will be made by the assistant.
              - …
          - ChatEvalSystemMessageMock
            - `role` 'system', required — This is the role of the message author. For a mock system message, the role is always 'system' @default 'system'
            - `content` string, required — This is the content of the system message that would have been added in the middle of the conversation. Do not include the assistant prompt as a part of this message. It will automatically be fetched during runtime.
          - ChatEvalToolResponseMessageMock
            - `role` 'tool', required — This is the role of the message author. For a mock tool response message, the role is always 'tool' @default 'tool'
            - `content` string, required — This is the content of the tool response message. JSON Objects should be stringified.
          - ChatEvalToolResponseMessageEvaluation
            - `role` 'tool', required — This is the role of the message author. For a tool response message evaluation, the role is always 'tool' @default 'tool'
            - `judgePlan` AssistantMessageJudgePlanAI, required
              - …
          - ChatEvalUserMessageMock
            - `role` 'user', required — This is the role of the message author. For a mock user message, the role is always 'user' @default 'user'
            - `content` string, required — This is the content of the user message. This is the message that the user would have sent.
          - ChatEvalAssistantMessageEvaluation
            - `role` 'assistant', required — This is the role of the message author. For an assistant message evaluation, the role is always 'assistant' @default 'assistant'
            - `judgePlan` union, required — This is the judge plan that instructs how to evaluate the assistant message. The assistant message can be evaluated against fixed content (exact match or RegEx) or with an LLM-as-judge by defining the evaluation criteria in a prompt.
              - …
            - `continuePlan` AssistantMessageEvaluationContinuePlan
              - …
      - `name` string — This is the name of the eval. It helps identify what the eval is checking for.
      - `description` string — 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.
      - `type` 'chat.mockConversation', required — This is the type of the eval. Currently it is fixed to `chat.mockConversation`.
    - `target` union, required — This is the target that will be run against the eval
      - EvalRunTargetAssistant
        - `assistant` CreateAssistantDTO
          - `transcriber` union — These are the options for the assistant's transcriber.
            - AssemblyAITranscriber
              - …
            - AzureSpeechTranscriber
              - …
            - CustomTranscriber
              - …
            - DeepgramTranscriber
              - …
            - ElevenLabsTranscriber
              - …
            - GladiaTranscriber
              - …
            - GoogleTranscriber
              - …
            - SpeechmaticsTranscriber
              - …
            - TalkscriberTranscriber
              - …
            - OpenAITranscriber
              - …
            - CartesiaTranscriber
              - …
            - SonioxTranscriber
              - …
            - XaiTranscriber
              - …
            - VapiTranscriber
              - …
          - `model` union — These are the options for the assistant's LLM.
            - AnthropicModel
              - …
            - AnthropicBedrockModel
              - …
            - AnyscaleModel
              - …
            - CerebrasModel
              - …
            - CustomLLMModel
              - …
            - DeepInfraModel
              - …
            - DeepSeekModel
              - …
            - GoogleModel
              - …
            - GroqModel
              - …
            - InflectionAIModel
              - …
            - MinimaxLLMModel
              - …
            - OpenAIModel
              - …
            - OpenRouterModel
              - …
            - PerplexityAIModel
              - …
            - TogetherAIModel
              - …
            - XaiModel
              - …
            - VapiModel
              - …
          - `voice` union — These are the options for the assistant's voice.
            - AzureVoice
              - …
            - CartesiaVoice
              - …
            - CustomVoice
              - …
            - DeepgramVoice
              - …
            - ElevenLabsVoice
              - …
            - HumeVoice
              - …
            - LMNTVoice
              - …
            - NeuphonicVoice
              - …
            - OpenAIVoice
              - …
            - PlayHTVoice
              - …
            - WellSaidVoice
              - …
            - RimeAIVoice
              - …
            - SmallestAIVoice
              - …
            - TavusVoice
              - …
            - VapiVoice
              - …
            - SesameVoice
              - …
            - InworldVoice
              - …
            - MinimaxVoice
              - …
            - XaiVoice
              - …
            - MicrosoftVoice
              - …
          - `firstMessage` string — This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.). If unspecified, assistant will wait for user to speak and use the model to respond once they speak.
          - `firstMessageInterruptionsEnabled` boolean
          - `firstMessageMode` 'assistant-speaks-first' | 'assistant-speaks-first-with-model-generated-message' | 'assistant-waits-for-user' — This is the mode for the first message. Default is 'assistant-speaks-first'. Use: - 'assistant-speaks-first' to have the assistant speak first. - 'assistant-waits-for-user' to have the assistant wait for the user to speak first. - 'assistant-speaks-first-with-model-generated-message' to have the assistant speak first with a message generated by the model based on the conversation state. (`assistant.model.messages` at call start, `call.messages` at squad transfer points). @default 'assistant-speaks-first'
          - `voicemailDetection` union — 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.
            - 'off'
            - GoogleVoicemailDetectionPlan
              - …
            - OpenAIVoicemailDetectionPlan
              - …
            - TwilioVoicemailDetectionPlan
              - …
            - VapiVoicemailDetectionPlan
              - …
          - `clientMessages` string[] — These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started,assistant.started. You can check the shape of the messages in ClientMessage schema.
          - `serverMessages` string[] — These are the messages that will be sent to your Server URL. Default is conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,handoff-destination-request,user-interrupted,assistant.started. You can check the shape of the messages in ServerMessage schema.
          - `maxDurationSeconds` number — This is the maximum number of seconds that the call will last. When the call reaches this duration, it will be ended. @default 600 (10 minutes)
          - `backgroundSound` union — This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'. You can also provide a custom sound by providing a URL to an audio file.
            - 'off' | 'office'
            - string, uri
          - `modelOutputInMessagesEnabled` boolean — This determines whether the model's output is used in conversation history rather than the transcription of assistant's speech. @default false
          - `transportConfigurations` TransportConfigurationTwilio[] — These are the configurations to be passed to the transport providers of assistant's calls, like Twilio. You can store multiple configurations for different transport providers. For a call, only the configuration matching the call transport provider is used.
            - `provider` 'twilio', required
            - `timeout` number — The integer number of seconds that we should allow the phone to ring before assuming there is no answer. The default is `60` seconds and the maximum is `600` seconds. For some call flows, we will add a 5-second buffer to the timeout value you provide. For this reason, a timeout value of 10 seconds could result in an actual timeout closer to 15 seconds. You can set this to a short time, such as `15` seconds, to hang up before reaching an answering machine or voicemail. @default 60
            - `record` boolean — Whether to record the call. Can be `true` to record the phone call, or `false` to not. The default is `false`. @default false
            - `recordingChannels` 'mono' | 'dual' — The number of channels in the final recording. Can be: `mono` or `dual`. The default is `mono`. `mono` records both legs of the call in a single channel of the recording file. `dual` records each leg to a separate channel of the recording file. The first channel of a dual-channel recording contains the parent call and the second channel contains the child call. @default 'mono'
          - `observabilityPlan` LangfuseObservabilityPlan
            - `provider` 'langfuse', required
            - `promptName` string — The name of a Langfuse prompt to link generations to. This enables tracking which prompt version was used for each generation. https://langfuse.com/docs/prompt-management/features/link-to-traces
            - `promptVersion` number — The version number of the Langfuse prompt to link generations to. Used together with promptName to identify the exact prompt version. https://langfuse.com/docs/prompt-management/features/link-to-traces
            - `traceName` string — Custom name for the Langfuse trace. Supports Liquid templates. Available variables: - {{ call.id }} - Call UUID - {{ call.type }} - 'inboundPhoneCall', 'outboundPhoneCall', 'webCall' - {{ assistant.name }} - Assistant name - {{ assistant.id }} - Assistant ID Example: "{{ assistant.name }} - {{ call.type }}" Defaults to call ID if not provided.
            - `tags` string[], required — This is an array of tags to be added to the Langfuse trace. Tags allow you to categorize and filter traces. https://langfuse.com/docs/tracing-features/tags
            - `metadata` object — This is a JSON object that will be added to the Langfuse trace. Traces can be enriched with metadata to better understand your users, application, and experiments. https://langfuse.com/docs/tracing-features/metadata By default it includes the call metadata, assistant metadata, and assistant overrides.
          - `credentials` union[] — These are dynamic credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials.
            - union
              - …
          - `hooks` union[] — This is a set of actions that will be performed on certain events.
            - union
              - …
          - `name` string — This is the name of the assistant. This is required when you want to transfer between assistants in a call.
          - `voicemailMessage` string — This is the message that the assistant will say if the call is forwarded to voicemail. If unspecified, it will hang up.
          - `endCallMessage` string — This is the message that the assistant will say if it ends the call. If unspecified, it will hang up without saying anything.
          - `endCallPhrases` string[] — This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case insensitive.
          - `compliancePlan` CompliancePlan
            - `hipaaEnabled` boolean — When this is enabled, logs, recordings, and transcriptions will be stored in HIPAA-compliant storage. Defaults to false. Only HIPAA-compliant providers will be available for LLM, Voice, and Transcriber respectively. This setting is only honored if the organization is on an Enterprise subscription or has purchased the HIPAA add-on.
            - `pciEnabled` boolean — When this is enabled, the user will be restricted to use PCI-compliant providers, and no logs or transcripts are stored. At the end of the call, you will receive an end-of-call-report message to store on your server. Defaults to false.
            - `securityFilterPlan` SecurityFilterPlan
              - …
            - `recordingConsentPlan` union
              - …
          - `metadata` object — This is for metadata you want to store on the assistant.
          - `backgroundSpeechDenoisingPlan` BackgroundSpeechDenoisingPlan
            - `smartDenoisingPlan` SmartDenoisingPlan
              - …
            - `fourierDenoisingPlan` FourierDenoisingPlan
              - …
          - `analysisPlan` AnalysisPlan
            - `minMessagesThreshold` number — The minimum number of messages required to run the analysis plan. If the number of messages is less than this, analysis will be skipped. @default 2
            - `summaryPlan` SummaryPlan
              - …
            - `structuredDataPlan` StructuredDataPlan
              - …
            - `structuredDataMultiPlan` StructuredDataMultiPlan[] — This is an array of structured data plan catalogs. Each entry includes a `key` and a `plan` for generating the structured data from the call. This outputs to `call.analysis.structuredDataMulti`.
              - …
            - `successEvaluationPlan` SuccessEvaluationPlan
              - …
            - `outcomeIds` string[] — This is an array of outcome UUIDs to be calculated during analysis. The outcomes will be calculated and stored in `call.analysis.outcomes`.
          - `artifactPlan` ArtifactPlan
            - `recordingEnabled` boolean — This determines whether assistant's calls are recorded. Defaults to true. Usage: - If you don't want to record the calls, set this to false. - If you want to record the calls when `assistant.hipaaEnabled` (deprecated) or `assistant.compliancePlan.hipaaEnabled` explicity set this to true and make sure to provide S3 or GCP credentials on the Provider Credentials page in the Dashboard. You can find the recording at `call.artifact.recordingUrl` and `call.artifact.stereoRecordingUrl` after the call is ended. @default true
            - `recordingFormat` 'wav;l16' | 'mp3' — This determines the format of the recording. Defaults to `wav;l16`. @default 'wav;l16'
            - `recordingUseCustomStorageEnabled` boolean — 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. If your organization has ZDR (zero data retention) or PCI enabled, recordings are never written to Vapi storage. In that case, false means "do not use my custom storage", so nothing is stored at all. @default true
            - `videoRecordingEnabled` boolean — This determines whether the video is recorded during the call. Defaults to false. Only relevant for `webCall` type. You can find the video recording at `call.artifact.videoRecordingUrl` after the call is ended. @default false
            - `fullMessageHistoryEnabled` boolean — This determines whether the artifact contains the full message history, even after handoff context engineering. Defaults to false.
            - `pcapEnabled` boolean — This determines whether the SIP packet capture is enabled. Defaults to true. Only relevant for `phone` type calls where phone number's provider is `vapi` or `byo-phone-number`. You can find the packet capture at `call.artifact.pcapUrl` after the call is ended. @default true
            - `pcapS3PathPrefix` string — This is the path where the SIP packet capture will be uploaded. This is only used if you have provided S3 or GCP credentials on the Provider Credentials page in the Dashboard. If credential.s3PathPrefix or credential.bucketPlan.path is set, this will append to it. Usage: - If you want to upload the packet capture to a specific path, set this to the path. Example: `/my-assistant-captures`. - If you want to upload the packet capture to the root of the bucket, set this to `/`. @default '/'
            - `pcapUseCustomStorageEnabled` boolean — 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. If your organization has ZDR (zero data retention) or PCI enabled, packet captures are never written to Vapi storage. In that case, false means "do not use my custom storage", so nothing is stored at all. @default true
            - `loggingEnabled` boolean — This determines whether the call logs are enabled. Defaults to true. @default true
            - `loggingUseCustomStorageEnabled` boolean — 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. If your organization has ZDR (zero data retention) or PCI enabled, logs are never written to Vapi storage. In that case, false means "do not use my custom storage", so nothing is stored at all. @default true
            - `transcriptPlan` TranscriptPlan
              - …
            - `recordingPath` string — 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` string[] — This is an array of structured output IDs to be calculated during the call. The outputs will be extracted and stored in `call.artifact.structuredOutputs` after the call is ended.
            - `structuredOutputs` CreateStructuredOutputDTO[] — This is an array of transient structured outputs to be calculated during the call. The outputs will be extracted and stored in `call.artifact.structuredOutputs` after the call is ended. Use this to provide inline structured output configurations instead of referencing existing ones via structuredOutputIds.
              - …
            - `scorecardIds` string[] — This is an array of scorecard IDs that will be evaluated based on the structured outputs extracted during the call. The scorecards will be evaluated and the results will be stored in `call.artifact.scorecards` after the call has ended.
            - `scorecards` CreateScorecardDTO[] — This is the array of scorecards that will be evaluated based on the structured outputs extracted during the call. The scorecards will be evaluated and the results will be stored in `call.artifact.scorecards` after the call has ended.
              - …
            - `loggingPath` string — 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 '/'
          - `startSpeakingPlan` StartSpeakingPlan
            - `waitSeconds` number — This is how long assistant waits before speaking. Defaults to 0.4. This is the minimum it will wait but if there is latency is the pipeline, this minimum will be exceeded. This is intended as a stopgap in case the pipeline is moving too fast. Example: - If model generates tokens and voice generates bytes within 100ms, the pipeline still waits 300ms before outputting speech. Usage: - If the customer is taking long pauses, set this to a higher value. - If the assistant is accidentally jumping in too much, set this to a higher value. @default 0.4
            - `smartEndpointingEnabled` union
              - …
            - `smartEndpointingPlan` union — This is the plan for smart endpointing. Pick between Vapi smart endpointing, LiveKit, or custom endpointing model (or nothing). We strongly recommend using livekit endpointing when working in English. LiveKit endpointing is not supported in other languages, yet. If this is set, it will override and take precedence over `transcriptionEndpointingPlan`. This plan will still be overridden by any matching `customEndpointingRules`. If this is not set, the system will automatically use the transcriber's built-in endpointing capabilities if available.
              - …
            - `customEndpointingRules` union[] — These are the custom endpointing rules to set an endpointing timeout based on a regex on the customer's speech or the assistant's last message. Usage: - If you have yes/no questions like "are you interested in a loan?", you can set a shorter timeout. - If you have questions where the customer may pause to look up information like "what's my account number?", you can set a longer timeout. - If you want to wait longer while customer is enumerating a list of numbers, you can set a longer timeout. These rules have the highest precedence and will override both `smartEndpointingPlan` and `transcriptionEndpointingPlan` when a rule is matched. The rules are evaluated in order and the first one that matches will be used. Order of precedence for endpointing: 1. customEndpointingRules (if any match) 2. smartEndpointingPlan (if set) 3. transcriptionEndpointingPlan @default []
              - …
            - `transcriptionEndpointingPlan` TranscriptionEndpointingPlan
              - …
          - `stopSpeakingPlan` StopSpeakingPlan
            - `numWords` number — This is the number of words that the customer has to say before the assistant will stop talking. Words like "stop", "actually", "no", etc. will always interrupt immediately regardless of this value. Words like "okay", "yeah", "right" will never interrupt. When set to 0, `voiceSeconds` is used in addition to the transcriptions to determine the customer has started speaking. Defaults to 0. @default 0
            - `voiceSeconds` number — This is the seconds customer has to speak before the assistant stops talking. This uses the VAD (Voice Activity Detection) spike to determine if the customer has started speaking. Considerations: - A lower value might be more responsive but could potentially pick up non-speech sounds. - A higher value reduces false positives but might slightly delay the detection of speech onset. This is only used if `numWords` is set to 0. Defaults to 0.2 @default 0.2
            - `backoffSeconds` number — This is the seconds to wait before the assistant will start talking again after being interrupted. Defaults to 1. @default 1
            - `acknowledgementPhrases` string[] — These are the phrases that will never interrupt the assistant, even if numWords threshold is met. These are typically acknowledgement or backchanneling phrases.
            - `interruptionPhrases` string[] — These are the phrases that will always interrupt the assistant immediately, regardless of numWords. These are typically phrases indicating disagreement or desire to stop.
          - `monitorPlan` MonitorPlan
            - `listenEnabled` boolean — This determines whether the assistant's calls allow live listening. Defaults to true. Fetch `call.monitor.listenUrl` to get the live listening URL. @default true
            - `listenAuthenticationEnabled` boolean — This enables authentication on the `call.monitor.listenUrl`. If `listenAuthenticationEnabled` is `true`, the `call.monitor.listenUrl` will require an `Authorization: Bearer <vapi-public-api-key>` header. @default false
            - `controlEnabled` boolean — This determines whether the assistant's calls allow live control. Defaults to true. Fetch `call.monitor.controlUrl` to get the live control URL. To use, send any control message via a POST request to `call.monitor.controlUrl`. Here are the types of controls supported: https://docs.vapi.ai/api-reference/messages/client-inbound-message @default true
            - `controlAuthenticationEnabled` boolean — This enables authentication on the `call.monitor.controlUrl`. If `controlAuthenticationEnabled` is `true`, the `call.monitor.controlUrl` will require an `Authorization: Bearer <vapi-public-api-key>` header. @default false
            - `monitorIds` string[] — This the set of monitor ids that are attached to the assistant. The source of truth for the monitor ids is the assistant_monitor join table. This field can be used for transient assistants and to update assistants with new monitor ids. @default []
          - `credentialIds` string[] — These are the credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can provide a subset using this.
          - `server` Server
            - `timeoutSeconds` number — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20
            - `credentialId` string — The credential ID for server authentication
            - `staticIpAddressesEnabled` boolean — If enabled, requests will originate from a static set of IPs owned and managed by Vapi. @default false
            - `encryptedPaths` string[] — This is the paths to encrypt in the request body if credentialId and encryptionPlan are defined.
            - `url` string — This is where the request will be sent.
            - `headers` object — These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios.
            - `backoffPlan` BackoffPlan
              - …
          - `keypadInputPlan` KeypadInputPlan
            - `enabled` boolean — This keeps track of whether the user has enabled keypad input. By default, it is off. @default false
            - `timeoutSeconds` number — This is the time in seconds to wait before processing the input. If the input is not received within this time, the input will be ignored. If set to "off", the input will be processed when the user enters a delimiter or immediately if no delimiter is used. @default 2
            - `delimiters` '#' | '*' | '' — This is the delimiter(s) that will be used to process the input. Can be '#', '*', or an empty array.
        - `assistantOverrides` AssistantOverrides
          - `transcriber` union — These are the options for the assistant's transcriber.
            - AssemblyAITranscriber
              - …
            - AzureSpeechTranscriber
              - …
            - CustomTranscriber
              - …
            - DeepgramTranscriber
              - …
            - ElevenLabsTranscriber
              - …
            - GladiaTranscriber
              - …
            - GoogleTranscriber
              - …
            - SpeechmaticsTranscriber
              - …
            - TalkscriberTranscriber
              - …
            - OpenAITranscriber
              - …
            - CartesiaTranscriber
              - …
            - SonioxTranscriber
              - …
            - XaiTranscriber
              - …
            - VapiTranscriber
              - …
          - `model` union — These are the options for the assistant's LLM.
            - AnthropicModel
              - …
            - AnthropicBedrockModel
              - …
            - AnyscaleModel
              - …
            - CerebrasModel
              - …
            - CustomLLMModel
              - …
            - DeepInfraModel
              - …
            - DeepSeekModel
              - …
            - GoogleModel
              - …
            - GroqModel
              - …
            - InflectionAIModel
              - …
            - MinimaxLLMModel
              - …
            - OpenAIModel
              - …
            - OpenRouterModel
              - …
            - PerplexityAIModel
              - …
            - TogetherAIModel
              - …
            - XaiModel
              - …
            - VapiModel
              - …
          - `voice` union — These are the options for the assistant's voice.
            - AzureVoice
              - …
            - CartesiaVoice
              - …
            - CustomVoice
              - …
            - DeepgramVoice
              - …
            - ElevenLabsVoice
              - …
            - HumeVoice
              - …
            - LMNTVoice
              - …
            - NeuphonicVoice
              - …
            - OpenAIVoice
              - …
            - PlayHTVoice
              - …
            - WellSaidVoice
              - …
            - RimeAIVoice
              - …
            - SmallestAIVoice
              - …
            - TavusVoice
              - …
            - VapiVoice
              - …
            - SesameVoice
              - …
            - InworldVoice
              - …
            - MinimaxVoice
              - …
            - XaiVoice
              - …
            - MicrosoftVoice
              - …
          - `firstMessage` string — This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.). If unspecified, assistant will wait for user to speak and use the model to respond once they speak.
          - `firstMessageInterruptionsEnabled` boolean
          - `firstMessageMode` 'assistant-speaks-first' | 'assistant-speaks-first-with-model-generated-message' | 'assistant-waits-for-user' — This is the mode for the first message. Default is 'assistant-speaks-first'. Use: - 'assistant-speaks-first' to have the assistant speak first. - 'assistant-waits-for-user' to have the assistant wait for the user to speak first. - 'assistant-speaks-first-with-model-generated-message' to have the assistant speak first with a message generated by the model based on the conversation state. (`assistant.model.messages` at call start, `call.messages` at squad transfer points). @default 'assistant-speaks-first'
          - `voicemailDetection` union — 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.
            - 'off'
            - GoogleVoicemailDetectionPlan
              - …
            - OpenAIVoicemailDetectionPlan
              - …
            - TwilioVoicemailDetectionPlan
              - …
            - VapiVoicemailDetectionPlan
              - …
          - `clientMessages` string[] — These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started,assistant.started. You can check the shape of the messages in ClientMessage schema.
          - `serverMessages` string[] — These are the messages that will be sent to your Server URL. Default is conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,handoff-destination-request,user-interrupted,assistant.started. You can check the shape of the messages in ServerMessage schema.
          - `maxDurationSeconds` number — This is the maximum number of seconds that the call will last. When the call reaches this duration, it will be ended. @default 600 (10 minutes)
          - `backgroundSound` union — This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'. You can also provide a custom sound by providing a URL to an audio file.
            - 'off' | 'office'
            - string, uri
          - `modelOutputInMessagesEnabled` boolean — This determines whether the model's output is used in conversation history rather than the transcription of assistant's speech. @default false
          - `transportConfigurations` TransportConfigurationTwilio[] — These are the configurations to be passed to the transport providers of assistant's calls, like Twilio. You can store multiple configurations for different transport providers. For a call, only the configuration matching the call transport provider is used.
            - `provider` 'twilio', required
            - `timeout` number — The integer number of seconds that we should allow the phone to ring before assuming there is no answer. The default is `60` seconds and the maximum is `600` seconds. For some call flows, we will add a 5-second buffer to the timeout value you provide. For this reason, a timeout value of 10 seconds could result in an actual timeout closer to 15 seconds. You can set this to a short time, such as `15` seconds, to hang up before reaching an answering machine or voicemail. @default 60
            - `record` boolean — Whether to record the call. Can be `true` to record the phone call, or `false` to not. The default is `false`. @default false
            - `recordingChannels` 'mono' | 'dual' — The number of channels in the final recording. Can be: `mono` or `dual`. The default is `mono`. `mono` records both legs of the call in a single channel of the recording file. `dual` records each leg to a separate channel of the recording file. The first channel of a dual-channel recording contains the parent call and the second channel contains the child call. @default 'mono'
          - `observabilityPlan` LangfuseObservabilityPlan
            - `provider` 'langfuse', required
            - `promptName` string — The name of a Langfuse prompt to link generations to. This enables tracking which prompt version was used for each generation. https://langfuse.com/docs/prompt-management/features/link-to-traces
            - `promptVersion` number — The version number of the Langfuse prompt to link generations to. Used together with promptName to identify the exact prompt version. https://langfuse.com/docs/prompt-management/features/link-to-traces
            - `traceName` string — Custom name for the Langfuse trace. Supports Liquid templates. Available variables: - {{ call.id }} - Call UUID - {{ call.type }} - 'inboundPhoneCall', 'outboundPhoneCall', 'webCall' - {{ assistant.name }} - Assistant name - {{ assistant.id }} - Assistant ID Example: "{{ assistant.name }} - {{ call.type }}" Defaults to call ID if not provided.
            - `tags` string[], required — This is an array of tags to be added to the Langfuse trace. Tags allow you to categorize and filter traces. https://langfuse.com/docs/tracing-features/tags
            - `metadata` object — This is a JSON object that will be added to the Langfuse trace. Traces can be enriched with metadata to better understand your users, application, and experiments. https://langfuse.com/docs/tracing-features/metadata By default it includes the call metadata, assistant metadata, and assistant overrides.
          - `credentials` union[] — These are dynamic credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials.
            - union
              - …
          - `hooks` union[] — This is a set of actions that will be performed on certain events.
            - union
              - …
          - `tools:append` union[]
            - union
              - …
          - `variableValues` object — These are values that will be used to replace the template variables in the assistant messages and other text-based fields. This uses LiquidJS syntax. https://liquidjs.com/tutorials/intro-to-liquid.html So for example, `{{ name }}` will be replaced with the value of `name` in `variableValues`. `{{"now" | date: "%b %d, %Y, %I:%M %p", "America/New_York"}}` will be replaced with the current date and time in New York. Some VAPI reserved defaults: - *customer* - the customer object
          - `name` string — This is the name of the assistant. This is required when you want to transfer between assistants in a call.
          - `voicemailMessage` string — This is the message that the assistant will say if the call is forwarded to voicemail. If unspecified, it will hang up.
          - `endCallMessage` string — This is the message that the assistant will say if it ends the call. If unspecified, it will hang up without saying anything.
          - `endCallPhrases` string[] — This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case insensitive.
          - `compliancePlan` CompliancePlan
            - `hipaaEnabled` boolean — When this is enabled, logs, recordings, and transcriptions will be stored in HIPAA-compliant storage. Defaults to false. Only HIPAA-compliant providers will be available for LLM, Voice, and Transcriber respectively. This setting is only honored if the organization is on an Enterprise subscription or has purchased the HIPAA add-on.
            - `pciEnabled` boolean — When this is enabled, the user will be restricted to use PCI-compliant providers, and no logs or transcripts are stored. At the end of the call, you will receive an end-of-call-report message to store on your server. Defaults to false.
            - `securityFilterPlan` SecurityFilterPlan
              - …
            - `recordingConsentPlan` union
              - …
          - `metadata` object — This is for metadata you want to store on the assistant.
          - `backgroundSpeechDenoisingPlan` BackgroundSpeechDenoisingPlan
            - `smartDenoisingPlan` SmartDenoisingPlan
              - …
            - `fourierDenoisingPlan` FourierDenoisingPlan
              - …
          - `analysisPlan` AnalysisPlan
            - `minMessagesThreshold` number — The minimum number of messages required to run the analysis plan. If the number of messages is less than this, analysis will be skipped. @default 2
            - `summaryPlan` SummaryPlan
              - …
            - `structuredDataPlan` StructuredDataPlan
              - …
            - `structuredDataMultiPlan` StructuredDataMultiPlan[] — This is an array of structured data plan catalogs. Each entry includes a `key` and a `plan` for generating the structured data from the call. This outputs to `call.analysis.structuredDataMulti`.
              - …
            - `successEvaluationPlan` SuccessEvaluationPlan
              - …
            - `outcomeIds` string[] — This is an array of outcome UUIDs to be calculated during analysis. The outcomes will be calculated and stored in `call.analysis.outcomes`.
          - `artifactPlan` ArtifactPlan
            - `recordingEnabled` boolean — This determines whether assistant's calls are recorded. Defaults to true. Usage: - If you don't want to record the calls, set this to false. - If you want to record the calls when `assistant.hipaaEnabled` (deprecated) or `assistant.compliancePlan.hipaaEnabled` explicity set this to true and make sure to provide S3 or GCP credentials on the Provider Credentials page in the Dashboard. You can find the recording at `call.artifact.recordingUrl` and `call.artifact.stereoRecordingUrl` after the call is ended. @default true
            - `recordingFormat` 'wav;l16' | 'mp3' — This determines the format of the recording. Defaults to `wav;l16`. @default 'wav;l16'
            - `recordingUseCustomStorageEnabled` boolean — 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. If your organization has ZDR (zero data retention) or PCI enabled, recordings are never written to Vapi storage. In that case, false means "do not use my custom storage", so nothing is stored at all. @default true
            - `videoRecordingEnabled` boolean — This determines whether the video is recorded during the call. Defaults to false. Only relevant for `webCall` type. You can find the video recording at `call.artifact.videoRecordingUrl` after the call is ended. @default false
            - `fullMessageHistoryEnabled` boolean — This determines whether the artifact contains the full message history, even after handoff context engineering. Defaults to false.
            - `pcapEnabled` boolean — This determines whether the SIP packet capture is enabled. Defaults to true. Only relevant for `phone` type calls where phone number's provider is `vapi` or `byo-phone-number`. You can find the packet capture at `call.artifact.pcapUrl` after the call is ended. @default true
            - `pcapS3PathPrefix` string — This is the path where the SIP packet capture will be uploaded. This is only used if you have provided S3 or GCP credentials on the Provider Credentials page in the Dashboard. If credential.s3PathPrefix or credential.bucketPlan.path is set, this will append to it. Usage: - If you want to upload the packet capture to a specific path, set this to the path. Example: `/my-assistant-captures`. - If you want to upload the packet capture to the root of the bucket, set this to `/`. @default '/'
            - `pcapUseCustomStorageEnabled` boolean — 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. If your organization has ZDR (zero data retention) or PCI enabled, packet captures are never written to Vapi storage. In that case, false means "do not use my custom storage", so nothing is stored at all. @default true
            - `loggingEnabled` boolean — This determines whether the call logs are enabled. Defaults to true. @default true
            - `loggingUseCustomStorageEnabled` boolean — 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. If your organization has ZDR (zero data retention) or PCI enabled, logs are never written to Vapi storage. In that case, false means "do not use my custom storage", so nothing is stored at all. @default true
            - `transcriptPlan` TranscriptPlan
              - …
            - `recordingPath` string — 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` string[] — This is an array of structured output IDs to be calculated during the call. The outputs will be extracted and stored in `call.artifact.structuredOutputs` after the call is ended.
            - `structuredOutputs` CreateStructuredOutputDTO[] — This is an array of transient structured outputs to be calculated during the call. The outputs will be extracted and stored in `call.artifact.structuredOutputs` after the call is ended. Use this to provide inline structured output configurations instead of referencing existing ones via structuredOutputIds.
              - …
            - `scorecardIds` string[] — This is an array of scorecard IDs that will be evaluated based on the structured outputs extracted during the call. The scorecards will be evaluated and the results will be stored in `call.artifact.scorecards` after the call has ended.
            - `scorecards` CreateScorecardDTO[] — This is the array of scorecards that will be evaluated based on the structured outputs extracted during the call. The scorecards will be evaluated and the results will be stored in `call.artifact.scorecards` after the call has ended.
              - …
            - `loggingPath` string — 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 '/'
          - `startSpeakingPlan` StartSpeakingPlan
            - `waitSeconds` number — This is how long assistant waits before speaking. Defaults to 0.4. This is the minimum it will wait but if there is latency is the pipeline, this minimum will be exceeded. This is intended as a stopgap in case the pipeline is moving too fast. Example: - If model generates tokens and voice generates bytes within 100ms, the pipeline still waits 300ms before outputting speech. Usage: - If the customer is taking long pauses, set this to a higher value. - If the assistant is accidentally jumping in too much, set this to a higher value. @default 0.4
            - `smartEndpointingEnabled` union
              - …
            - `smartEndpointingPlan` union — This is the plan for smart endpointing. Pick between Vapi smart endpointing, LiveKit, or custom endpointing model (or nothing). We strongly recommend using livekit endpointing when working in English. LiveKit endpointing is not supported in other languages, yet. If this is set, it will override and take precedence over `transcriptionEndpointingPlan`. This plan will still be overridden by any matching `customEndpointingRules`. If this is not set, the system will automatically use the transcriber's built-in endpointing capabilities if available.
              - …
            - `customEndpointingRules` union[] — These are the custom endpointing rules to set an endpointing timeout based on a regex on the customer's speech or the assistant's last message. Usage: - If you have yes/no questions like "are you interested in a loan?", you can set a shorter timeout. - If you have questions where the customer may pause to look up information like "what's my account number?", you can set a longer timeout. - If you want to wait longer while customer is enumerating a list of numbers, you can set a longer timeout. These rules have the highest precedence and will override both `smartEndpointingPlan` and `transcriptionEndpointingPlan` when a rule is matched. The rules are evaluated in order and the first one that matches will be used. Order of precedence for endpointing: 1. customEndpointingRules (if any match) 2. smartEndpointingPlan (if set) 3. transcriptionEndpointingPlan @default []
              - …
            - `transcriptionEndpointingPlan` TranscriptionEndpointingPlan
              - …
          - `stopSpeakingPlan` StopSpeakingPlan
            - `numWords` number — This is the number of words that the customer has to say before the assistant will stop talking. Words like "stop", "actually", "no", etc. will always interrupt immediately regardless of this value. Words like "okay", "yeah", "right" will never interrupt. When set to 0, `voiceSeconds` is used in addition to the transcriptions to determine the customer has started speaking. Defaults to 0. @default 0
            - `voiceSeconds` number — This is the seconds customer has to speak before the assistant stops talking. This uses the VAD (Voice Activity Detection) spike to determine if the customer has started speaking. Considerations: - A lower value might be more responsive but could potentially pick up non-speech sounds. - A higher value reduces false positives but might slightly delay the detection of speech onset. This is only used if `numWords` is set to 0. Defaults to 0.2 @default 0.2
            - `backoffSeconds` number — This is the seconds to wait before the assistant will start talking again after being interrupted. Defaults to 1. @default 1
            - `acknowledgementPhrases` string[] — These are the phrases that will never interrupt the assistant, even if numWords threshold is met. These are typically acknowledgement or backchanneling phrases.
            - `interruptionPhrases` string[] — These are the phrases that will always interrupt the assistant immediately, regardless of numWords. These are typically phrases indicating disagreement or desire to stop.
          - `monitorPlan` MonitorPlan
            - `listenEnabled` boolean — This determines whether the assistant's calls allow live listening. Defaults to true. Fetch `call.monitor.listenUrl` to get the live listening URL. @default true
            - `listenAuthenticationEnabled` boolean — This enables authentication on the `call.monitor.listenUrl`. If `listenAuthenticationEnabled` is `true`, the `call.monitor.listenUrl` will require an `Authorization: Bearer <vapi-public-api-key>` header. @default false
            - `controlEnabled` boolean — This determines whether the assistant's calls allow live control. Defaults to true. Fetch `call.monitor.controlUrl` to get the live control URL. To use, send any control message via a POST request to `call.monitor.controlUrl`. Here are the types of controls supported: https://docs.vapi.ai/api-reference/messages/client-inbound-message @default true
            - `controlAuthenticationEnabled` boolean — This enables authentication on the `call.monitor.controlUrl`. If `controlAuthenticationEnabled` is `true`, the `call.monitor.controlUrl` will require an `Authorization: Bearer <vapi-public-api-key>` header. @default false
            - `monitorIds` string[] — This the set of monitor ids that are attached to the assistant. The source of truth for the monitor ids is the assistant_monitor join table. This field can be used for transient assistants and to update assistants with new monitor ids. @default []
          - `credentialIds` string[] — These are the credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can provide a subset using this.
          - `server` Server
            - `timeoutSeconds` number — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20
            - `credentialId` string — The credential ID for server authentication
            - `staticIpAddressesEnabled` boolean — If enabled, requests will originate from a static set of IPs owned and managed by Vapi. @default false
            - `encryptedPaths` string[] — This is the paths to encrypt in the request body if credentialId and encryptionPlan are defined.
            - `url` string — This is where the request will be sent.
            - `headers` object — These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios.
            - `backoffPlan` BackoffPlan
              - …
          - `keypadInputPlan` KeypadInputPlan
            - `enabled` boolean — This keeps track of whether the user has enabled keypad input. By default, it is off. @default false
            - `timeoutSeconds` number — This is the time in seconds to wait before processing the input. If the input is not received within this time, the input will be ignored. If set to "off", the input will be processed when the user enters a delimiter or immediately if no delimiter is used. @default 2
            - `delimiters` '#' | '*' | '' — This is the delimiter(s) that will be used to process the input. Can be '#', '*', or an empty array.
        - `type` 'assistant', required — This is the type of the target. Currently it is fixed to `assistant`.
        - `assistantId` string — This is the id of the assistant that will be run against the eval
      - EvalRunTargetSquad
        - `squad` CreateSquadDTO
          - `name` string — This is the name of the squad.
          - `members` SquadMemberDTO[], required — This is the list of assistants that make up the squad. The call will start with the first assistant in the list.
            - `assistantVersion` string, nullable — This is the assistant version (e.g. `v3`) to pin for this squad member. When set, the call uses the snapshot from `assistant_version` (by `(assistantId, version)`) instead of the latest. Valid only with `assistantId`; rejected with inline `assistant`. Omit to follow the latest version.
            - `assistantDestinations` union[]
              - …
            - `assistantId` string, nullable — This is the assistant that will be used for the call. To use a transient assistant, use `assistant` instead.
            - `assistant` CreateAssistantDTO
              - …
            - `assistantOverrides` AssistantOverrides
              - …
          - `membersOverrides` AssistantOverrides
            - `transcriber` union — These are the options for the assistant's transcriber.
              - …
            - `model` union — These are the options for the assistant's LLM.
              - …
            - `voice` union — These are the options for the assistant's voice.
              - …
            - `firstMessage` string — This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.). If unspecified, assistant will wait for user to speak and use the model to respond once they speak.
            - `firstMessageInterruptionsEnabled` boolean
            - `firstMessageMode` 'assistant-speaks-first' | 'assistant-speaks-first-with-model-generated-message' | 'assistant-waits-for-user' — This is the mode for the first message. Default is 'assistant-speaks-first'. Use: - 'assistant-speaks-first' to have the assistant speak first. - 'assistant-waits-for-user' to have the assistant wait for the user to speak first. - 'assistant-speaks-first-with-model-generated-message' to have the assistant speak first with a message generated by the model based on the conversation state. (`assistant.model.messages` at call start, `call.messages` at squad transfer points). @default 'assistant-speaks-first'
            - `voicemailDetection` union — These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool]. By default, voicemail detection is disabled.
              - …
            - `clientMessages` string[] — These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started,assistant.started. You can check the shape of the messages in ClientMessage schema.
            - `serverMessages` string[] — These are the messages that will be sent to your Server URL. Default is conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,handoff-destination-request,user-interrupted,assistant.started. You can check the shape of the messages in ServerMessage schema.
            - `maxDurationSeconds` number — This is the maximum number of seconds that the call will last. When the call reaches this duration, it will be ended. @default 600 (10 minutes)
            - `backgroundSound` union — This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'. You can also provide a custom sound by providing a URL to an audio file.
              - …
            - `modelOutputInMessagesEnabled` boolean — This determines whether the model's output is used in conversation history rather than the transcription of assistant's speech. @default false
            - `transportConfigurations` TransportConfigurationTwilio[] — These are the configurations to be passed to the transport providers of assistant's calls, like Twilio. You can store multiple configurations for different transport providers. For a call, only the configuration matching the call transport provider is used.
              - …
            - `observabilityPlan` LangfuseObservabilityPlan
              - …
            - `credentials` union[] — These are dynamic credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials.
              - …
            - `hooks` union[] — This is a set of actions that will be performed on certain events.
              - …
            - `tools:append` union[]
              - …
            - `variableValues` object — These are values that will be used to replace the template variables in the assistant messages and other text-based fields. This uses LiquidJS syntax. https://liquidjs.com/tutorials/intro-to-liquid.html So for example, `{{ name }}` will be replaced with the value of `name` in `variableValues`. `{{"now" | date: "%b %d, %Y, %I:%M %p", "America/New_York"}}` will be replaced with the current date and time in New York. Some VAPI reserved defaults: - *customer* - the customer object
            - `name` string — This is the name of the assistant. This is required when you want to transfer between assistants in a call.
            - `voicemailMessage` string — This is the message that the assistant will say if the call is forwarded to voicemail. If unspecified, it will hang up.
            - `endCallMessage` string — This is the message that the assistant will say if it ends the call. If unspecified, it will hang up without saying anything.
            - `endCallPhrases` string[] — This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case insensitive.
            - `compliancePlan` CompliancePlan
              - …
            - `metadata` object — This is for metadata you want to store on the assistant.
            - `backgroundSpeechDenoisingPlan` BackgroundSpeechDenoisingPlan
              - …
            - `analysisPlan` AnalysisPlan
              - …
            - `artifactPlan` ArtifactPlan
              - …
            - `startSpeakingPlan` StartSpeakingPlan
              - …
            - `stopSpeakingPlan` StopSpeakingPlan
              - …
            - `monitorPlan` MonitorPlan
              - …
            - `credentialIds` string[] — These are the credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can provide a subset using this.
            - `server` Server
              - …
            - `keypadInputPlan` KeypadInputPlan
              - …
        - `assistantOverrides` AssistantOverrides
          - `transcriber` union — These are the options for the assistant's transcriber.
            - AssemblyAITranscriber
              - …
            - AzureSpeechTranscriber
              - …
            - CustomTranscriber
              - …
            - DeepgramTranscriber
              - …
            - ElevenLabsTranscriber
              - …
            - GladiaTranscriber
              - …
            - GoogleTranscriber
              - …
            - SpeechmaticsTranscriber
              - …
            - TalkscriberTranscriber
              - …
            - OpenAITranscriber
              - …
            - CartesiaTranscriber
              - …
            - SonioxTranscriber
              - …
            - XaiTranscriber
              - …
            - VapiTranscriber
              - …
          - `model` union — These are the options for the assistant's LLM.
            - AnthropicModel
              - …
            - AnthropicBedrockModel
              - …
            - AnyscaleModel
              - …
            - CerebrasModel
              - …
            - CustomLLMModel
              - …
            - DeepInfraModel
              - …
            - DeepSeekModel
              - …
            - GoogleModel
              - …
            - GroqModel
              - …
            - InflectionAIModel
              - …
            - MinimaxLLMModel
              - …
            - OpenAIModel
              - …
            - OpenRouterModel
              - …
            - PerplexityAIModel
              - …
            - TogetherAIModel
              - …
            - XaiModel
              - …
            - VapiModel
              - …
          - `voice` union — These are the options for the assistant's voice.
            - AzureVoice
              - …
            - CartesiaVoice
              - …
            - CustomVoice
              - …
            - DeepgramVoice
              - …
            - ElevenLabsVoice
              - …
            - HumeVoice
              - …
            - LMNTVoice
              - …
            - NeuphonicVoice
              - …
            - OpenAIVoice
              - …
            - PlayHTVoice
              - …
            - WellSaidVoice
              - …
            - RimeAIVoice
              - …
            - SmallestAIVoice
              - …
            - TavusVoice
              - …
            - VapiVoice
              - …
            - SesameVoice
              - …
            - InworldVoice
              - …
            - MinimaxVoice
              - …
            - XaiVoice
              - …
            - MicrosoftVoice
              - …
          - `firstMessage` string — This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.). If unspecified, assistant will wait for user to speak and use the model to respond once they speak.
          - `firstMessageInterruptionsEnabled` boolean
          - `firstMessageMode` 'assistant-speaks-first' | 'assistant-speaks-first-with-model-generated-message' | 'assistant-waits-for-user' — This is the mode for the first message. Default is 'assistant-speaks-first'. Use: - 'assistant-speaks-first' to have the assistant speak first. - 'assistant-waits-for-user' to have the assistant wait for the user to speak first. - 'assistant-speaks-first-with-model-generated-message' to have the assistant speak first with a message generated by the model based on the conversation state. (`assistant.model.messages` at call start, `call.messages` at squad transfer points). @default 'assistant-speaks-first'
          - `voicemailDetection` union — 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.
            - 'off'
            - GoogleVoicemailDetectionPlan
              - …
            - OpenAIVoicemailDetectionPlan
              - …
            - TwilioVoicemailDetectionPlan
              - …
            - VapiVoicemailDetectionPlan
              - …
          - `clientMessages` string[] — These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started,assistant.started. You can check the shape of the messages in ClientMessage schema.
          - `serverMessages` string[] — These are the messages that will be sent to your Server URL. Default is conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,handoff-destination-request,user-interrupted,assistant.started. You can check the shape of the messages in ServerMessage schema.
          - `maxDurationSeconds` number — This is the maximum number of seconds that the call will last. When the call reaches this duration, it will be ended. @default 600 (10 minutes)
          - `backgroundSound` union — This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'. You can also provide a custom sound by providing a URL to an audio file.
            - 'off' | 'office'
            - string, uri
          - `modelOutputInMessagesEnabled` boolean — This determines whether the model's output is used in conversation history rather than the transcription of assistant's speech. @default false
          - `transportConfigurations` TransportConfigurationTwilio[] — These are the configurations to be passed to the transport providers of assistant's calls, like Twilio. You can store multiple configurations for different transport providers. For a call, only the configuration matching the call transport provider is used.
            - `provider` 'twilio', required
            - `timeout` number — The integer number of seconds that we should allow the phone to ring before assuming there is no answer. The default is `60` seconds and the maximum is `600` seconds. For some call flows, we will add a 5-second buffer to the timeout value you provide. For this reason, a timeout value of 10 seconds could result in an actual timeout closer to 15 seconds. You can set this to a short time, such as `15` seconds, to hang up before reaching an answering machine or voicemail. @default 60
            - `record` boolean — Whether to record the call. Can be `true` to record the phone call, or `false` to not. The default is `false`. @default false
            - `recordingChannels` 'mono' | 'dual' — The number of channels in the final recording. Can be: `mono` or `dual`. The default is `mono`. `mono` records both legs of the call in a single channel of the recording file. `dual` records each leg to a separate channel of the recording file. The first channel of a dual-channel recording contains the parent call and the second channel contains the child call. @default 'mono'
          - `observabilityPlan` LangfuseObservabilityPlan
            - `provider` 'langfuse', required
            - `promptName` string — The name of a Langfuse prompt to link generations to. This enables tracking which prompt version was used for each generation. https://langfuse.com/docs/prompt-management/features/link-to-traces
            - `promptVersion` number — The version number of the Langfuse prompt to link generations to. Used together with promptName to identify the exact prompt version. https://langfuse.com/docs/prompt-management/features/link-to-traces
            - `traceName` string — Custom name for the Langfuse trace. Supports Liquid templates. Available variables: - {{ call.id }} - Call UUID - {{ call.type }} - 'inboundPhoneCall', 'outboundPhoneCall', 'webCall' - {{ assistant.name }} - Assistant name - {{ assistant.id }} - Assistant ID Example: "{{ assistant.name }} - {{ call.type }}" Defaults to call ID if not provided.
            - `tags` string[], required — This is an array of tags to be added to the Langfuse trace. Tags allow you to categorize and filter traces. https://langfuse.com/docs/tracing-features/tags
            - `metadata` object — This is a JSON object that will be added to the Langfuse trace. Traces can be enriched with metadata to better understand your users, application, and experiments. https://langfuse.com/docs/tracing-features/metadata By default it includes the call metadata, assistant metadata, and assistant overrides.
          - `credentials` union[] — These are dynamic credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials.
            - union
              - …
          - `hooks` union[] — This is a set of actions that will be performed on certain events.
            - union
              - …
          - `tools:append` union[]
            - union
              - …
          - `variableValues` object — These are values that will be used to replace the template variables in the assistant messages and other text-based fields. This uses LiquidJS syntax. https://liquidjs.com/tutorials/intro-to-liquid.html So for example, `{{ name }}` will be replaced with the value of `name` in `variableValues`. `{{"now" | date: "%b %d, %Y, %I:%M %p", "America/New_York"}}` will be replaced with the current date and time in New York. Some VAPI reserved defaults: - *customer* - the customer object
          - `name` string — This is the name of the assistant. This is required when you want to transfer between assistants in a call.
          - `voicemailMessage` string — This is the message that the assistant will say if the call is forwarded to voicemail. If unspecified, it will hang up.
          - `endCallMessage` string — This is the message that the assistant will say if it ends the call. If unspecified, it will hang up without saying anything.
          - `endCallPhrases` string[] — This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case insensitive.
          - `compliancePlan` CompliancePlan
            - `hipaaEnabled` boolean — When this is enabled, logs, recordings, and transcriptions will be stored in HIPAA-compliant storage. Defaults to false. Only HIPAA-compliant providers will be available for LLM, Voice, and Transcriber respectively. This setting is only honored if the organization is on an Enterprise subscription or has purchased the HIPAA add-on.
            - `pciEnabled` boolean — When this is enabled, the user will be restricted to use PCI-compliant providers, and no logs or transcripts are stored. At the end of the call, you will receive an end-of-call-report message to store on your server. Defaults to false.
            - `securityFilterPlan` SecurityFilterPlan
              - …
            - `recordingConsentPlan` union
              - …
          - `metadata` object — This is for metadata you want to store on the assistant.
          - `backgroundSpeechDenoisingPlan` BackgroundSpeechDenoisingPlan
            - `smartDenoisingPlan` SmartDenoisingPlan
              - …
            - `fourierDenoisingPlan` FourierDenoisingPlan
              - …
          - `analysisPlan` AnalysisPlan
            - `minMessagesThreshold` number — The minimum number of messages required to run the analysis plan. If the number of messages is less than this, analysis will be skipped. @default 2
            - `summaryPlan` SummaryPlan
              - …
            - `structuredDataPlan` StructuredDataPlan
              - …
            - `structuredDataMultiPlan` StructuredDataMultiPlan[] — This is an array of structured data plan catalogs. Each entry includes a `key` and a `plan` for generating the structured data from the call. This outputs to `call.analysis.structuredDataMulti`.
              - …
            - `successEvaluationPlan` SuccessEvaluationPlan
              - …
            - `outcomeIds` string[] — This is an array of outcome UUIDs to be calculated during analysis. The outcomes will be calculated and stored in `call.analysis.outcomes`.
          - `artifactPlan` ArtifactPlan
            - `recordingEnabled` boolean — This determines whether assistant's calls are recorded. Defaults to true. Usage: - If you don't want to record the calls, set this to false. - If you want to record the calls when `assistant.hipaaEnabled` (deprecated) or `assistant.compliancePlan.hipaaEnabled` explicity set this to true and make sure to provide S3 or GCP credentials on the Provider Credentials page in the Dashboard. You can find the recording at `call.artifact.recordingUrl` and `call.artifact.stereoRecordingUrl` after the call is ended. @default true
            - `recordingFormat` 'wav;l16' | 'mp3' — This determines the format of the recording. Defaults to `wav;l16`. @default 'wav;l16'
            - `recordingUseCustomStorageEnabled` boolean — 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. If your organization has ZDR (zero data retention) or PCI enabled, recordings are never written to Vapi storage. In that case, false means "do not use my custom storage", so nothing is stored at all. @default true
            - `videoRecordingEnabled` boolean — This determines whether the video is recorded during the call. Defaults to false. Only relevant for `webCall` type. You can find the video recording at `call.artifact.videoRecordingUrl` after the call is ended. @default false
            - `fullMessageHistoryEnabled` boolean — This determines whether the artifact contains the full message history, even after handoff context engineering. Defaults to false.
            - `pcapEnabled` boolean — This determines whether the SIP packet capture is enabled. Defaults to true. Only relevant for `phone` type calls where phone number's provider is `vapi` or `byo-phone-number`. You can find the packet capture at `call.artifact.pcapUrl` after the call is ended. @default true
            - `pcapS3PathPrefix` string — This is the path where the SIP packet capture will be uploaded. This is only used if you have provided S3 or GCP credentials on the Provider Credentials page in the Dashboard. If credential.s3PathPrefix or credential.bucketPlan.path is set, this will append to it. Usage: - If you want to upload the packet capture to a specific path, set this to the path. Example: `/my-assistant-captures`. - If you want to upload the packet capture to the root of the bucket, set this to `/`. @default '/'
            - `pcapUseCustomStorageEnabled` boolean — 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. If your organization has ZDR (zero data retention) or PCI enabled, packet captures are never written to Vapi storage. In that case, false means "do not use my custom storage", so nothing is stored at all. @default true
            - `loggingEnabled` boolean — This determines whether the call logs are enabled. Defaults to true. @default true
            - `loggingUseCustomStorageEnabled` boolean — 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. If your organization has ZDR (zero data retention) or PCI enabled, logs are never written to Vapi storage. In that case, false means "do not use my custom storage", so nothing is stored at all. @default true
            - `transcriptPlan` TranscriptPlan
              - …
            - `recordingPath` string — 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` string[] — This is an array of structured output IDs to be calculated during the call. The outputs will be extracted and stored in `call.artifact.structuredOutputs` after the call is ended.
            - `structuredOutputs` CreateStructuredOutputDTO[] — This is an array of transient structured outputs to be calculated during the call. The outputs will be extracted and stored in `call.artifact.structuredOutputs` after the call is ended. Use this to provide inline structured output configurations instead of referencing existing ones via structuredOutputIds.
              - …
            - `scorecardIds` string[] — This is an array of scorecard IDs that will be evaluated based on the structured outputs extracted during the call. The scorecards will be evaluated and the results will be stored in `call.artifact.scorecards` after the call has ended.
            - `scorecards` CreateScorecardDTO[] — This is the array of scorecards that will be evaluated based on the structured outputs extracted during the call. The scorecards will be evaluated and the results will be stored in `call.artifact.scorecards` after the call has ended.
              - …
            - `loggingPath` string — 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 '/'
          - `startSpeakingPlan` StartSpeakingPlan
            - `waitSeconds` number — This is how long assistant waits before speaking. Defaults to 0.4. This is the minimum it will wait but if there is latency is the pipeline, this minimum will be exceeded. This is intended as a stopgap in case the pipeline is moving too fast. Example: - If model generates tokens and voice generates bytes within 100ms, the pipeline still waits 300ms before outputting speech. Usage: - If the customer is taking long pauses, set this to a higher value. - If the assistant is accidentally jumping in too much, set this to a higher value. @default 0.4
            - `smartEndpointingEnabled` union
              - …
            - `smartEndpointingPlan` union — This is the plan for smart endpointing. Pick between Vapi smart endpointing, LiveKit, or custom endpointing model (or nothing). We strongly recommend using livekit endpointing when working in English. LiveKit endpointing is not supported in other languages, yet. If this is set, it will override and take precedence over `transcriptionEndpointingPlan`. This plan will still be overridden by any matching `customEndpointingRules`. If this is not set, the system will automatically use the transcriber's built-in endpointing capabilities if available.
              - …
            - `customEndpointingRules` union[] — These are the custom endpointing rules to set an endpointing timeout based on a regex on the customer's speech or the assistant's last message. Usage: - If you have yes/no questions like "are you interested in a loan?", you can set a shorter timeout. - If you have questions where the customer may pause to look up information like "what's my account number?", you can set a longer timeout. - If you want to wait longer while customer is enumerating a list of numbers, you can set a longer timeout. These rules have the highest precedence and will override both `smartEndpointingPlan` and `transcriptionEndpointingPlan` when a rule is matched. The rules are evaluated in order and the first one that matches will be used. Order of precedence for endpointing: 1. customEndpointingRules (if any match) 2. smartEndpointingPlan (if set) 3. transcriptionEndpointingPlan @default []
              - …
            - `transcriptionEndpointingPlan` TranscriptionEndpointingPlan
              - …
          - `stopSpeakingPlan` StopSpeakingPlan
            - `numWords` number — This is the number of words that the customer has to say before the assistant will stop talking. Words like "stop", "actually", "no", etc. will always interrupt immediately regardless of this value. Words like "okay", "yeah", "right" will never interrupt. When set to 0, `voiceSeconds` is used in addition to the transcriptions to determine the customer has started speaking. Defaults to 0. @default 0
            - `voiceSeconds` number — This is the seconds customer has to speak before the assistant stops talking. This uses the VAD (Voice Activity Detection) spike to determine if the customer has started speaking. Considerations: - A lower value might be more responsive but could potentially pick up non-speech sounds. - A higher value reduces false positives but might slightly delay the detection of speech onset. This is only used if `numWords` is set to 0. Defaults to 0.2 @default 0.2
            - `backoffSeconds` number — This is the seconds to wait before the assistant will start talking again after being interrupted. Defaults to 1. @default 1
            - `acknowledgementPhrases` string[] — These are the phrases that will never interrupt the assistant, even if numWords threshold is met. These are typically acknowledgement or backchanneling phrases.
            - `interruptionPhrases` string[] — These are the phrases that will always interrupt the assistant immediately, regardless of numWords. These are typically phrases indicating disagreement or desire to stop.
          - `monitorPlan` MonitorPlan
            - `listenEnabled` boolean — This determines whether the assistant's calls allow live listening. Defaults to true. Fetch `call.monitor.listenUrl` to get the live listening URL. @default true
            - `listenAuthenticationEnabled` boolean — This enables authentication on the `call.monitor.listenUrl`. If `listenAuthenticationEnabled` is `true`, the `call.monitor.listenUrl` will require an `Authorization: Bearer <vapi-public-api-key>` header. @default false
            - `controlEnabled` boolean — This determines whether the assistant's calls allow live control. Defaults to true. Fetch `call.monitor.controlUrl` to get the live control URL. To use, send any control message via a POST request to `call.monitor.controlUrl`. Here are the types of controls supported: https://docs.vapi.ai/api-reference/messages/client-inbound-message @default true
            - `controlAuthenticationEnabled` boolean — This enables authentication on the `call.monitor.controlUrl`. If `controlAuthenticationEnabled` is `true`, the `call.monitor.controlUrl` will require an `Authorization: Bearer <vapi-public-api-key>` header. @default false
            - `monitorIds` string[] — This the set of monitor ids that are attached to the assistant. The source of truth for the monitor ids is the assistant_monitor join table. This field can be used for transient assistants and to update assistants with new monitor ids. @default []
          - `credentialIds` string[] — These are the credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can provide a subset using this.
          - `server` Server
            - `timeoutSeconds` number — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20
            - `credentialId` string — The credential ID for server authentication
            - `staticIpAddressesEnabled` boolean — If enabled, requests will originate from a static set of IPs owned and managed by Vapi. @default false
            - `encryptedPaths` string[] — This is the paths to encrypt in the request body if credentialId and encryptionPlan are defined.
            - `url` string — This is where the request will be sent.
            - `headers` object — These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios.
            - `backoffPlan` BackoffPlan
              - …
          - `keypadInputPlan` KeypadInputPlan
            - `enabled` boolean — This keeps track of whether the user has enabled keypad input. By default, it is off. @default false
            - `timeoutSeconds` number — This is the time in seconds to wait before processing the input. If the input is not received within this time, the input will be ignored. If set to "off", the input will be processed when the user enters a delimiter or immediately if no delimiter is used. @default 2
            - `delimiters` '#' | '*' | '' — This is the delimiter(s) that will be used to process the input. Can be '#', '*', or an empty array.
        - `type` 'squad', required — This is the type of the target. Currently it is fixed to `squad`.
        - `squadId` string — This is the id of the squad that will be run against the eval
    - `id` string, required
    - `orgId` string, required
    - `createdAt` string, date-time, required
    - `startedAt` string, date-time, required
    - `endedAt` string, date-time, required
    - `endedMessage` string — This is the ended message when the eval run ended for any reason apart from mockConversation.done
    - `results` EvalRunResult[], required — 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.
      - `status` 'pass' | 'fail', required — This is the status of the eval run result. The status is only 'pass' or 'fail' for an eval run result. Currently, An eval is considered `pass` only if all the Assistant Judge messages are evaluated to pass.
      - `messages` union[], required — This is the messages of the eval run result. It contains the user/system messages
        - union
          - ChatEvalUserMessageMock
            - `role` 'user', required — This is the role of the message author. For a mock user message, the role is always 'user' @default 'user'
            - `content` string, required — This is the content of the user message. This is the message that the user would have sent.
          - ChatEvalSystemMessageMock
            - `role` 'system', required — This is the role of the message author. For a mock system message, the role is always 'system' @default 'system'
            - `content` string, required — This is the content of the system message that would have been added in the middle of the conversation. Do not include the assistant prompt as a part of this message. It will automatically be fetched during runtime.
          - ChatEvalToolResponseMessageMock
            - `role` 'tool', required — This is the role of the message author. For a mock tool response message, the role is always 'tool' @default 'tool'
            - `content` string, required — This is the content of the tool response message. JSON Objects should be stringified.
          - ChatEvalAssistantMessageMock
            - `role` 'assistant', required — This is the role of the message author. For a mock assistant message, the role is always 'assistant' @default 'assistant'
            - `content` string — This is the content of the assistant message. This is the message that the assistant would have sent.
            - `toolCalls` ChatEvalAssistantMessageMockToolCall[] — This is the tool calls that will be made by the assistant.
              - …
      - `startedAt` string, date-time, required — This is the start time of the eval run result.
      - `endedAt` string, date-time, required — This is the end time of the eval run result.
    - `cost` number, required — This is the cost of the eval or suite run in USD.
    - `costs` object[], required — This is the break up of costs of the eval or suite run.
    - `type` 'eval', required — This is the type of the run. Currently it is fixed to `eval`.
    - `evalId` string — This is the id of the eval that will be run.
  - `metadata` PaginationMeta, required
    - `itemsPerPage` number, required
    - `totalItems` number, required
    - `currentPage` number, required
    - `totalPages` number
    - `hasNextPage` boolean
    - `nextCursor` string — Opaque cursor for the next page under keyset pagination (PRO-3163). Pass it back as the `cursor` query param to fetch the next page without an OFFSET scan. Present only when a further page likely exists.
    - `sortOrder` 'ASC' | 'DESC'
    - `itemsBeyondRetention` boolean
    - `createdAtLe` string, date-time
    - `createdAtGe` string, date-time

## Changes

> 57 revisions in range; 2 not diffed, 14 could not be searched.

- **2026-03-17** `de411bfe008a` — 920 info
  - added the optional property `results/items/target/oneOf[subschema #1: EvalRunTargetAssistant]/assistant/allOf[#/components/schemas/CreateAssistantDTO]/compliancePlan/recordingConsentPlan/oneOf[subschema #1: RecordingConsentStayOnLinePlan]/voice/oneOf[subschema #10: PlayHTVoice]/fallbackPlan/allOf[#/components/schemas/FallbackPlan]/voices/items/oneOf[subschema #4: CustomVoice]/voiceId` to the response with the `200` status
  - added the optional property `results/items/target/oneOf[subschema #1: EvalRunTargetAssistant]/assistant/allOf[#/components/schemas/CreateAssistantDTO]/compliancePlan/recordingConsentPlan/oneOf[subschema #1: RecordingConsentStayOnLinePlan]/voice/oneOf[subschema #11: WellSaidVoice]/fallbackPlan/allOf[#/components/schemas/FallbackPlan]/voices/items/oneOf[subschema #4: CustomVoice]/voiceId` to the response with the `200` status
  - added the optional property `results/items/target/oneOf[subschema #1: EvalRunTargetAssistant]/assistant/allOf[#/components/schemas/CreateAssistantDTO]/compliancePlan/recordingConsentPlan/oneOf[subschema #1: RecordingConsentStayOnLinePlan]/voice/oneOf[subschema #12: RimeAIVoice]/fallbackPlan/allOf[#/components/schemas/FallbackPlan]/voices/items/oneOf[subschema #4: CustomVoice]/voiceId` to the response with the `200` status
  - added the optional property `results/items/target/oneOf[subschema #1: EvalRunTargetAssistant]/assistant/allOf[#/components/schemas/CreateAssistantDTO]/compliancePlan/recordingConsentPlan/oneOf[subschema #1: RecordingConsentStayOnLinePlan]/voice/oneOf[subschema #13: SmallestAIVoice]/fallbackPlan/allOf[#/components/schemas/FallbackPlan]/voices/items/oneOf[subschema #4: CustomVoice]/voiceId` to the response with the `200` status
  - …916 more
  - …this revision’s changelog is incomplete
- …earlier changes not shown

[Full history](https://skmtc.dev/vapiai/apis/vapi-api/changes/eval/run/get.md)

---

[API](https://skmtc.dev/vapiai/apis/vapi-api.md) · [All operations](https://skmtc.dev/vapiai/apis/vapi-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/vapiai/vapi-api/revisions/872ff45af53b/schema)
