---
title: "List Calls"
method: GET
path: "/call"
tags: ["Calls"]
---

# List Calls

`GET /call`

## Query parameters

- `id` string
- `assistantId` string
- `phoneNumberId` string
- `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`

- Call[]
  - `type` 'inboundPhoneCall' | 'outboundPhoneCall' | 'webCall' | 'vapi.websocketCall' — This is the type of call.
  - `costs` union[] — These are the costs of individual components of the call in USD.
    - union
      - TransportCost
        - `type` 'transport', required — This is the type of cost, always 'transport' for this class.
        - `provider` 'daily' | 'vapi.websocket' | 'twilio' | 'vonage' | 'telnyx' | 'vapi.sip'
        - `minutes` number, required — This is the minutes of `transport` usage. This should match `call.endedAt` - `call.startedAt`.
        - `cost` number, required — This is the cost of the component in USD.
      - TranscriberCost
        - `type` 'transcriber', required — This is the type of cost, always 'transcriber' for this class.
        - `transcriber` object, required — This is the transcriber that was used during the call. This matches one of the below: - `call.assistant.transcriber`, - `call.assistantId->transcriber`, - `call.squad[n].assistant.transcriber`, - `call.squad[n].assistantId->transcriber`, - `call.squadId->[n].assistant.transcriber`, - `call.squadId->[n].assistantId->transcriber`.
        - `minutes` number, required — This is the minutes of `transcriber` usage. This should match `call.endedAt` - `call.startedAt` for single assistant calls, while squad calls will have multiple transcriber costs one for each assistant that was used.
        - `cost` number, required — This is the cost of the component in USD.
      - ModelCost
        - `type` 'model', required — This is the type of cost, always 'model' for this class.
        - `model` object, required — This is the model that was used during the call. This matches one of the following: - `call.assistant.model`, - `call.assistantId->model`, - `call.squad[n].assistant.model`, - `call.squad[n].assistantId->model`, - `call.squadId->[n].assistant.model`, - `call.squadId->[n].assistantId->model`.
        - `promptTokens` number, required — This is the number of prompt tokens used in the call. These should be total prompt tokens used in the call for single assistant calls, while squad calls will have multiple model costs one for each assistant that was used.
        - `completionTokens` number, required — This is the number of completion tokens generated in the call. These should be total completion tokens used in the call for single assistant calls, while squad calls will have multiple model costs one for each assistant that was used.
        - `cachedPromptTokens` number — This is the number of cached prompt tokens used in the call. This is only applicable to certain providers (e.g., OpenAI, Azure OpenAI) that support prompt caching. Cached tokens are billed at a discounted rate.
        - `reasoningTokens` number — This is the number of reasoning tokens generated in the call. This is only applicable to reasoning models (e.g., OpenAI o-series, GPT-5) on providers that report them. This is a **subset of `completionTokens`**, not an addition to it: reasoning tokens are already counted in `completionTokens` and are already billed at the output-token rate. It is reported separately for visibility only and does not affect `cost`.
        - `cost` number, required — This is the cost of the component in USD.
      - VoiceCost
        - `type` 'voice', required — This is the type of cost, always 'voice' for this class.
        - `voice` object, required — This is the voice that was used during the call. This matches one of the following: - `call.assistant.voice`, - `call.assistantId->voice`, - `call.squad[n].assistant.voice`, - `call.squad[n].assistantId->voice`, - `call.squadId->[n].assistant.voice`, - `call.squadId->[n].assistantId->voice`.
        - `characters` number, required — This is the number of characters that were generated during the call. These should be total characters used in the call for single assistant calls, while squad calls will have multiple voice costs one for each assistant that was used.
        - `cost` number, required — This is the cost of the component in USD.
      - VapiCost
        - `type` 'vapi', required — This is the type of cost, always 'vapi' for this class.
        - `subType` 'normal' | 'overage', required — This is the sub type of the cost.
        - `minutes` number, required — This is the minutes of Vapi usage. This should match `call.endedAt` - `call.startedAt`.
        - `cost` number, required — This is the cost of the component in USD.
      - VoicemailDetectionCost
        - `type` 'voicemail-detection', required — This is the type of cost, always 'voicemail-detection' for this class.
        - `model` object, required — This is the model that was used to perform the analysis.
        - `provider` 'twilio' | 'google' | 'openai' | 'vapi', required — This is the provider that was used to detect the voicemail.
        - `promptTextTokens` number, required — This is the number of prompt text tokens used in the voicemail detection.
        - `promptAudioTokens` number, required — This is the number of prompt audio tokens used in the voicemail detection.
        - `completionTextTokens` number, required — This is the number of completion text tokens used in the voicemail detection.
        - `completionAudioTokens` number, required — This is the number of completion audio tokens used in the voicemail detection.
        - `cost` number, required — This is the cost of the component in USD.
      - AnalysisCost
        - `type` 'analysis', required — This is the type of cost, always 'analysis' for this class.
        - `analysisType` 'summary' | 'structuredData' | 'successEvaluation' | 'structuredOutput', required — This is the type of analysis performed.
        - `model` object, required — This is the model that was used to perform the analysis.
        - `promptTokens` number, required — This is the number of prompt tokens used in the analysis.
        - `completionTokens` number, required — This is the number of completion tokens generated in the analysis.
        - `cachedPromptTokens` number — This is the number of cached prompt tokens used in the analysis. This is only applicable to certain providers (e.g., OpenAI, Azure OpenAI) that support prompt caching. Cached tokens are billed at a discounted rate.
        - `structuredOutputBreakdown` StructuredOutputCostBreakdown[] — This is the per-structured-output breakdown of this cost. The `cost`, `promptTokens`, `completionTokens` and `cachedPromptTokens` above are the sums of these rows. This is only set when `analysisType` is `structuredOutput`, and it is omitted entirely rather than partially populated, so when it is present the rows always reconcile to the totals above. A structured output that was skipped, or that extracts via regex, makes no LLM call and so has no row here — this is not a complete list of the call's configured structured outputs. There is one row per evaluation, so a `structuredOutputId` can appear more than once if it was evaluated more than once; sum the rows rather than indexing them by id.
          - `structuredOutputId` string, required — This is the unique identifier of the structured output that produced this cost.
          - `name` string, required — This is the name of the structured output, so this breakdown is readable without looking the id up.
          - `cost` number, required — This is the cost in USD of evaluating this structured output.
          - `promptTokens` number, required — This is the number of prompt tokens used to evaluate this structured output.
          - `completionTokens` number, required — This is the number of completion tokens generated for this structured output.
          - `cachedPromptTokens` number — This is the number of cached prompt tokens used to evaluate this structured output. This is a subset of `promptTokens`, not an addition to it.
        - `cost` number, required — This is the cost of the component in USD.
      - KnowledgeBaseCost
        - `type` 'knowledge-base', required — This is the type of cost, always 'knowledge-base' for this class.
        - `model` object, required — This is the model that was used for processing the knowledge base.
        - `promptTokens` number, required — This is the number of prompt tokens used in the knowledge base query.
        - `completionTokens` number, required — This is the number of completion tokens generated in the knowledge base query.
        - `cost` number, required — This is the cost of the component in USD.
  - `messages` union[]
    - union
      - UserMessage
        - `role` string, required — The role of the user in the conversation.
        - `message` string, required — The message content from the user.
        - `time` number, required — The timestamp when the message was sent.
        - `endTime` number, required — The timestamp when the message ended.
        - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
        - `duration` number — The duration of the message in seconds.
        - `isFiltered` boolean — Indicates if the message was filtered for security reasons.
        - `detectedThreats` string[] — List of detected security threats if the message was filtered.
        - `originalMessage` string — The original message before filtering (only included if content was filtered).
        - `metadata` object — The metadata associated with the message. Currently used to store the transcriber's word level confidence.
        - `speakerLabel` string — Stable speaker label for diarized user speakers (e.g., "Speaker 1").
      - SystemMessage
        - `role` string, required — The role of the system in the conversation.
        - `message` string, required — The message content from the system.
        - `time` number, required — The timestamp when the message was sent.
        - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
      - BotMessage
        - `role` string, required — The role of the bot in the conversation.
        - `message` string, required — The message content from the bot.
        - `time` number, required — The timestamp when the message was sent.
        - `endTime` number, required — The timestamp when the message ended.
        - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
        - `source` string — The source of the message.
        - `duration` number — The duration of the message in seconds.
        - `assistantName` string — The name of the assistant that produced this message. In a squad or handoff call this is the specific sub-agent active when the message was spoken, letting the transcript label each message by speaker.
        - `assistantId` string — The ID of the assistant that produced this message. Stable reference for the assistant named in `assistantName`.
      - ToolCallMessage
        - `role` string, required — The role of the tool call in the conversation.
        - `toolCalls` object[], required — The list of tool calls made during the conversation.
        - `message` string, required — The message content for the tool call.
        - `time` number, required — The timestamp when the message was sent.
        - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
      - ToolCallResultMessage
        - `role` string, required — The role of the tool call result in the conversation.
        - `toolCallId` string, required — The ID of the tool call.
        - `name` string, required — The name of the tool that returned the result.
        - `result` string, required — The result of the tool call in JSON format.
        - `time` number, required — The timestamp when the message was sent.
        - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
        - `metadata` object — The metadata for the tool call result.
        - `warnings` ToolCallResultMessageWarning[] — Warnings raised for this tool call result, e.g. when the response is larger than recommended for voice AI context windows.
          - `type` 'oversized-tool-response', required — The kind of warning. Currently: - `oversized-tool-response`: the tool's serialized response exceeded the recommended size and is likely to bloat the model context, increasing latency and risking truncation of earlier instructions.
          - `tokenCount` number, required — The estimated number of tokens in the serialized tool response.
          - `threshold` number, required — The threshold (in tokens) above which the warning is raised.
  - `phoneCallProvider` 'twilio' | 'vonage' | 'vapi' | 'telnyx' — This is the provider of the call. Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type.
  - `phoneCallTransport` 'sip' | 'pstn' — This is the transport of the phone call. Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type.
  - `status` 'scheduled' | 'queued' | 'ringing' | 'in-progress' | 'forwarding' | 'ended' | 'not-found' | 'deletion-failed' — This is the status of the call.
  - `endedReason` 'call-start-error-neither-assistant-nor-server-set' | 'assistant-request-failed' | 'assistant-request-returned-error' | 'assistant-request-returned-unspeakable-error' | 'assistant-request-returned-invalid-assistant' | 'assistant-request-returned-no-assistant' | 'assistant-request-returned-forwarding-phone-number' | 'scheduled-call-deleted' | 'call.start.error-vapifault-get-org' | 'call.start.error-vapifault-get-subscription' | 'call.start.error-get-assistant' | 'call.start.error-get-phone-number' | 'call.start.error-get-customer' | 'call.start.error-get-resources-validation' | 'call.start.error-vapi-number-international' | 'call.start.error-vapi-number-outbound-daily-limit' | 'call.start.error-get-transport' | 'call.start.error-subscription-wallet-does-not-exist' | 'call.start.error-fraud-check-failed' | 'call.start.error-subscription-frozen' | 'call.start.error-subscription-insufficient-credits' | 'call.start.error-subscription-upgrade-failed' | 'call.start.error-subscription-concurrency-limit-reached' | 'call.start.error-enterprise-feature-not-available-recording-consent' | 'call.start.assistant-version-error-validation' | 'assistant-not-valid' | 'call.start.error-vapifault-database-error' | 'assistant-not-found' | 'pipeline-error-openai-voice-failed' | 'pipeline-error-cartesia-voice-failed' | 'pipeline-error-deepgram-voice-failed' | 'pipeline-error-eleven-labs-voice-failed' | 'pipeline-error-playht-voice-failed' | 'pipeline-error-lmnt-voice-failed' | 'pipeline-error-azure-voice-failed' | 'pipeline-error-rime-ai-voice-failed' | 'pipeline-error-smallest-ai-voice-failed' | 'pipeline-error-vapi-voice-failed' | 'pipeline-error-neuphonic-voice-failed' | 'pipeline-error-hume-voice-failed' | 'pipeline-error-sesame-voice-failed' | 'pipeline-error-inworld-voice-failed' | 'pipeline-error-minimax-voice-failed' | 'pipeline-error-wellsaid-voice-failed' | 'pipeline-error-xai-voice-failed' | 'pipeline-error-microsoft-voice-failed' | 'pipeline-error-microsoft-voice-request-canceled' | 'pipeline-error-tavus-video-failed' | 'call.in-progress.error-vapifault-openai-voice-failed' | 'call.in-progress.error-vapifault-cartesia-voice-failed' | 'call.in-progress.error-vapifault-deepgram-voice-failed' | 'call.in-progress.error-vapifault-eleven-labs-voice-failed' | 'call.in-progress.error-vapifault-playht-voice-failed' | 'call.in-progress.error-vapifault-lmnt-voice-failed' | 'call.in-progress.error-vapifault-azure-voice-failed' | 'call.in-progress.error-vapifault-rime-ai-voice-failed' | 'call.in-progress.error-vapifault-smallest-ai-voice-failed' | 'call.in-progress.error-vapifault-vapi-voice-failed' | 'call.in-progress.error-vapifault-neuphonic-voice-failed' | 'call.in-progress.error-vapifault-hume-voice-failed' | 'call.in-progress.error-vapifault-sesame-voice-failed' | 'call.in-progress.error-vapifault-inworld-voice-failed' | 'call.in-progress.error-vapifault-minimax-voice-failed' | 'call.in-progress.error-vapifault-wellsaid-voice-failed' | 'call.in-progress.error-vapifault-xai-voice-failed' | 'call.in-progress.error-vapifault-microsoft-voice-failed' | 'call.in-progress.error-vapifault-tavus-video-failed' | 'pipeline-error-vapi-llm-failed' | 'pipeline-error-vapi-400-bad-request-validation-failed' | 'pipeline-error-vapi-401-unauthorized' | 'pipeline-error-vapi-403-model-access-denied' | 'pipeline-error-vapi-429-exceeded-quota' | 'pipeline-error-vapi-500-server-error' | 'pipeline-error-vapi-503-server-overloaded-error' | 'call.in-progress.error-providerfault-vapi-llm-failed' | 'call.in-progress.error-vapifault-vapi-llm-failed' | 'call.in-progress.error-vapifault-vapi-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-vapi-401-unauthorized' | 'call.in-progress.error-vapifault-vapi-403-model-access-denied' | 'call.in-progress.error-vapifault-vapi-429-exceeded-quota' | 'call.in-progress.error-providerfault-vapi-500-server-error' | 'call.in-progress.error-providerfault-vapi-503-server-overloaded-error' | 'pipeline-error-vapi-transcriber-failed' | 'call.in-progress.error-vapifault-vapi-transcriber-failed' | 'call.in-progress.error-providerfault-vapi-transcriber-failed' | 'call.in-progress.error-providerfault-vapi-voice-failed' | 'pipeline-error-deepgram-transcriber-failed' | 'pipeline-error-deepgram-transcriber-api-key-missing' | 'call.in-progress.error-vapifault-deepgram-transcriber-failed' | 'pipeline-error-gladia-transcriber-failed' | 'call.in-progress.error-vapifault-gladia-transcriber-failed' | 'pipeline-error-speechmatics-transcriber-failed' | 'call.in-progress.error-vapifault-speechmatics-transcriber-failed' | 'pipeline-error-assembly-ai-transcriber-failed' | 'pipeline-error-assembly-ai-returning-400-insufficent-funds' | 'pipeline-error-assembly-ai-returning-400-paid-only-feature' | 'pipeline-error-assembly-ai-returning-401-invalid-credentials' | 'pipeline-error-assembly-ai-returning-500-invalid-schema' | 'pipeline-error-assembly-ai-returning-500-word-boost-parsing-failed' | 'call.in-progress.error-vapifault-assembly-ai-transcriber-failed' | 'call.in-progress.error-vapifault-assembly-ai-returning-400-insufficent-funds' | 'call.in-progress.error-vapifault-assembly-ai-returning-400-paid-only-feature' | 'call.in-progress.error-vapifault-assembly-ai-returning-401-invalid-credentials' | 'call.in-progress.error-vapifault-assembly-ai-returning-500-invalid-schema' | 'call.in-progress.error-vapifault-assembly-ai-returning-500-word-boost-parsing-failed' | 'pipeline-error-talkscriber-transcriber-failed' | 'call.in-progress.error-vapifault-talkscriber-transcriber-failed' | 'pipeline-error-azure-speech-transcriber-failed' | 'call.in-progress.error-vapifault-azure-speech-transcriber-failed' | 'pipeline-error-eleven-labs-transcriber-failed' | 'call.in-progress.error-vapifault-eleven-labs-transcriber-failed' | 'pipeline-error-google-transcriber-failed' | 'call.in-progress.error-vapifault-google-transcriber-failed' | 'pipeline-error-openai-transcriber-failed' | 'call.in-progress.error-vapifault-openai-transcriber-failed' | 'pipeline-error-soniox-transcriber-auth-failed' | 'pipeline-error-soniox-transcriber-rate-limited' | 'pipeline-error-soniox-transcriber-invalid-config' | 'pipeline-error-soniox-transcriber-server-error' | 'pipeline-error-soniox-transcriber-failed' | 'call.in-progress.error-vapifault-soniox-transcriber-auth-failed' | 'call.in-progress.error-vapifault-soniox-transcriber-rate-limited' | 'call.in-progress.error-vapifault-soniox-transcriber-invalid-config' | 'call.in-progress.error-vapifault-soniox-transcriber-server-error' | 'call.in-progress.error-vapifault-soniox-transcriber-failed' | 'pipeline-error-xai-transcriber-auth-failed' | 'pipeline-error-xai-transcriber-rate-limited' | 'pipeline-error-xai-transcriber-invalid-config' | 'pipeline-error-xai-transcriber-server-error' | 'pipeline-error-xai-transcriber-failed' | 'call.in-progress.error-vapifault-xai-transcriber-auth-failed' | 'call.in-progress.error-vapifault-xai-transcriber-rate-limited' | 'call.in-progress.error-vapifault-xai-transcriber-invalid-config' | 'call.in-progress.error-vapifault-xai-transcriber-server-error' | 'call.in-progress.error-vapifault-xai-transcriber-failed' | 'pipeline-error-cartesia-transcriber-failed' | 'call.in-progress.error-vapifault-cartesia-transcriber-failed' | 'call.in-progress.error-pipeline-no-available-llm-model' | 'worker-shutdown' | 'vonage-disconnected' | 'vonage-failed-to-connect-call' | 'vonage-completed' | 'phone-call-provider-bypass-enabled-but-no-call-received' | 'call.in-progress.error-providerfault-transport-never-connected' | 'call.in-progress.error-vapifault-worker-not-available' | 'call.in-progress.error-vapifault-transport-never-connected' | 'call.in-progress.error-vapifault-transport-connected-but-call-not-active' | 'call.in-progress.error-vapifault-call-started-but-connection-to-transport-missing' | 'call.in-progress.error-vapifault-worker-died' | 'call.in-progress.twilio-completed-call' | 'call.in-progress.sip-completed-call' | 'call.in-progress.error-sip-inbound-call-failed-to-connect' | 'call.in-progress.error-providerfault-outbound-sip-503-service-unavailable' | 'call.in-progress.error-sip-outbound-call-failed-to-connect' | 'call.ringing.error-sip-inbound-call-failed-to-connect' | 'call.in-progress.error-providerfault-openai-llm-failed' | 'call.in-progress.error-providerfault-azure-openai-llm-failed' | 'call.in-progress.error-providerfault-groq-llm-failed' | 'call.in-progress.error-providerfault-google-llm-failed' | 'call.in-progress.error-providerfault-xai-llm-failed' | 'call.in-progress.error-providerfault-mistral-llm-failed' | 'call.in-progress.error-providerfault-minimax-llm-failed' | 'call.in-progress.error-providerfault-inflection-ai-llm-failed' | 'call.in-progress.error-providerfault-cerebras-llm-failed' | 'call.in-progress.error-providerfault-deep-seek-llm-failed' | 'call.in-progress.error-providerfault-baseten-llm-failed' | 'call.in-progress.error-vapifault-chat-pipeline-failed-to-start' | 'pipeline-error-openai-400-bad-request-validation-failed' | 'pipeline-error-openai-401-unauthorized' | 'pipeline-error-openai-401-incorrect-api-key' | 'pipeline-error-openai-401-account-not-in-organization' | 'pipeline-error-openai-403-model-access-denied' | 'pipeline-error-openai-429-exceeded-quota' | 'pipeline-error-openai-429-rate-limit-reached' | 'pipeline-error-openai-500-server-error' | 'pipeline-error-openai-503-server-overloaded-error' | 'pipeline-error-openai-llm-failed' | 'call.in-progress.error-vapifault-openai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-openai-401-unauthorized' | 'call.in-progress.error-vapifault-openai-401-incorrect-api-key' | 'call.in-progress.error-vapifault-openai-401-account-not-in-organization' | 'call.in-progress.error-vapifault-openai-403-model-access-denied' | 'call.in-progress.error-vapifault-openai-429-exceeded-quota' | 'call.in-progress.error-vapifault-openai-429-rate-limit-reached' | 'call.in-progress.error-providerfault-openai-500-server-error' | 'call.in-progress.error-providerfault-openai-503-server-overloaded-error' | 'pipeline-error-azure-openai-400-bad-request-validation-failed' | 'pipeline-error-azure-openai-401-unauthorized' | 'pipeline-error-azure-openai-403-model-access-denied' | 'pipeline-error-azure-openai-429-exceeded-quota' | 'pipeline-error-azure-openai-500-server-error' | 'pipeline-error-azure-openai-503-server-overloaded-error' | 'pipeline-error-azure-openai-llm-failed' | 'call.in-progress.error-vapifault-azure-openai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-azure-openai-401-unauthorized' | 'call.in-progress.error-vapifault-azure-openai-403-model-access-denied' | 'call.in-progress.error-vapifault-azure-openai-429-exceeded-quota' | 'call.in-progress.error-providerfault-azure-openai-500-server-error' | 'call.in-progress.error-providerfault-azure-openai-503-server-overloaded-error' | 'pipeline-error-google-400-bad-request-validation-failed' | 'pipeline-error-google-401-unauthorized' | 'pipeline-error-google-403-model-access-denied' | 'pipeline-error-google-429-exceeded-quota' | 'pipeline-error-google-500-server-error' | 'pipeline-error-google-503-server-overloaded-error' | 'pipeline-error-google-llm-failed' | 'call.in-progress.error-vapifault-google-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-google-401-unauthorized' | 'call.in-progress.error-vapifault-google-403-model-access-denied' | 'call.in-progress.error-vapifault-google-429-exceeded-quota' | 'call.in-progress.error-providerfault-google-500-server-error' | 'call.in-progress.error-providerfault-google-503-server-overloaded-error' | 'pipeline-error-xai-400-bad-request-validation-failed' | 'pipeline-error-xai-401-unauthorized' | 'pipeline-error-xai-403-model-access-denied' | 'pipeline-error-xai-429-exceeded-quota' | 'pipeline-error-xai-500-server-error' | 'pipeline-error-xai-503-server-overloaded-error' | 'pipeline-error-xai-llm-failed' | 'call.in-progress.error-vapifault-xai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-xai-401-unauthorized' | 'call.in-progress.error-vapifault-xai-403-model-access-denied' | 'call.in-progress.error-vapifault-xai-429-exceeded-quota' | 'call.in-progress.error-providerfault-xai-500-server-error' | 'call.in-progress.error-providerfault-xai-503-server-overloaded-error' | 'pipeline-error-baseten-400-bad-request-validation-failed' | 'pipeline-error-baseten-401-unauthorized' | 'pipeline-error-baseten-403-model-access-denied' | 'pipeline-error-baseten-429-exceeded-quota' | 'pipeline-error-baseten-500-server-error' | 'pipeline-error-baseten-503-server-overloaded-error' | 'pipeline-error-baseten-llm-failed' | 'call.in-progress.error-vapifault-baseten-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-baseten-401-unauthorized' | 'call.in-progress.error-vapifault-baseten-403-model-access-denied' | 'call.in-progress.error-vapifault-baseten-429-exceeded-quota' | 'call.in-progress.error-providerfault-baseten-500-server-error' | 'call.in-progress.error-providerfault-baseten-503-server-overloaded-error' | 'pipeline-error-mistral-400-bad-request-validation-failed' | 'pipeline-error-mistral-401-unauthorized' | 'pipeline-error-mistral-403-model-access-denied' | 'pipeline-error-mistral-429-exceeded-quota' | 'pipeline-error-mistral-500-server-error' | 'pipeline-error-mistral-503-server-overloaded-error' | 'pipeline-error-mistral-llm-failed' | 'call.in-progress.error-vapifault-mistral-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-mistral-401-unauthorized' | 'call.in-progress.error-vapifault-mistral-403-model-access-denied' | 'call.in-progress.error-vapifault-mistral-429-exceeded-quota' | 'call.in-progress.error-providerfault-mistral-500-server-error' | 'call.in-progress.error-providerfault-mistral-503-server-overloaded-error' | 'pipeline-error-minimax-400-bad-request-validation-failed' | 'pipeline-error-minimax-401-unauthorized' | 'pipeline-error-minimax-403-model-access-denied' | 'pipeline-error-minimax-429-exceeded-quota' | 'pipeline-error-minimax-500-server-error' | 'pipeline-error-minimax-503-server-overloaded-error' | 'pipeline-error-minimax-llm-failed' | 'call.in-progress.error-vapifault-minimax-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-minimax-401-unauthorized' | 'call.in-progress.error-vapifault-minimax-403-model-access-denied' | 'call.in-progress.error-vapifault-minimax-429-exceeded-quota' | 'call.in-progress.error-providerfault-minimax-500-server-error' | 'call.in-progress.error-providerfault-minimax-503-server-overloaded-error' | 'pipeline-error-inflection-ai-400-bad-request-validation-failed' | 'pipeline-error-inflection-ai-401-unauthorized' | 'pipeline-error-inflection-ai-403-model-access-denied' | 'pipeline-error-inflection-ai-429-exceeded-quota' | 'pipeline-error-inflection-ai-500-server-error' | 'pipeline-error-inflection-ai-503-server-overloaded-error' | 'pipeline-error-inflection-ai-llm-failed' | 'call.in-progress.error-vapifault-inflection-ai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-inflection-ai-401-unauthorized' | 'call.in-progress.error-vapifault-inflection-ai-403-model-access-denied' | 'call.in-progress.error-vapifault-inflection-ai-429-exceeded-quota' | 'call.in-progress.error-providerfault-inflection-ai-500-server-error' | 'call.in-progress.error-providerfault-inflection-ai-503-server-overloaded-error' | 'pipeline-error-deep-seek-400-bad-request-validation-failed' | 'pipeline-error-deep-seek-401-unauthorized' | 'pipeline-error-deep-seek-403-model-access-denied' | 'pipeline-error-deep-seek-429-exceeded-quota' | 'pipeline-error-deep-seek-500-server-error' | 'pipeline-error-deep-seek-503-server-overloaded-error' | 'pipeline-error-deep-seek-llm-failed' | 'call.in-progress.error-vapifault-deep-seek-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-deep-seek-401-unauthorized' | 'call.in-progress.error-vapifault-deep-seek-403-model-access-denied' | 'call.in-progress.error-vapifault-deep-seek-429-exceeded-quota' | 'call.in-progress.error-providerfault-deep-seek-500-server-error' | 'call.in-progress.error-providerfault-deep-seek-503-server-overloaded-error' | 'pipeline-error-groq-400-bad-request-validation-failed' | 'pipeline-error-groq-401-unauthorized' | 'pipeline-error-groq-403-model-access-denied' | 'pipeline-error-groq-429-exceeded-quota' | 'pipeline-error-groq-500-server-error' | 'pipeline-error-groq-503-server-overloaded-error' | 'pipeline-error-groq-llm-failed' | 'call.in-progress.error-vapifault-groq-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-groq-401-unauthorized' | 'call.in-progress.error-vapifault-groq-403-model-access-denied' | 'call.in-progress.error-vapifault-groq-429-exceeded-quota' | 'call.in-progress.error-providerfault-groq-500-server-error' | 'call.in-progress.error-providerfault-groq-503-server-overloaded-error' | 'pipeline-error-cerebras-400-bad-request-validation-failed' | 'pipeline-error-cerebras-401-unauthorized' | 'pipeline-error-cerebras-403-model-access-denied' | 'pipeline-error-cerebras-429-exceeded-quota' | 'pipeline-error-cerebras-500-server-error' | 'pipeline-error-cerebras-503-server-overloaded-error' | 'pipeline-error-cerebras-llm-failed' | 'call.in-progress.error-vapifault-cerebras-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-cerebras-401-unauthorized' | 'call.in-progress.error-vapifault-cerebras-403-model-access-denied' | 'call.in-progress.error-vapifault-cerebras-429-exceeded-quota' | 'call.in-progress.error-providerfault-cerebras-500-server-error' | 'call.in-progress.error-providerfault-cerebras-503-server-overloaded-error' | 'pipeline-error-anthropic-400-bad-request-validation-failed' | 'pipeline-error-anthropic-401-unauthorized' | 'pipeline-error-anthropic-403-model-access-denied' | 'pipeline-error-anthropic-429-exceeded-quota' | 'pipeline-error-anthropic-500-server-error' | 'pipeline-error-anthropic-503-server-overloaded-error' | 'pipeline-error-anthropic-llm-failed' | 'call.in-progress.error-providerfault-anthropic-llm-failed' | 'call.in-progress.error-vapifault-anthropic-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anthropic-401-unauthorized' | 'call.in-progress.error-vapifault-anthropic-403-model-access-denied' | 'call.in-progress.error-vapifault-anthropic-429-exceeded-quota' | 'call.in-progress.error-providerfault-anthropic-500-server-error' | 'call.in-progress.error-providerfault-anthropic-503-server-overloaded-error' | 'pipeline-error-anthropic-bedrock-400-bad-request-validation-failed' | 'pipeline-error-anthropic-bedrock-401-unauthorized' | 'pipeline-error-anthropic-bedrock-403-model-access-denied' | 'pipeline-error-anthropic-bedrock-429-exceeded-quota' | 'pipeline-error-anthropic-bedrock-500-server-error' | 'pipeline-error-anthropic-bedrock-503-server-overloaded-error' | 'pipeline-error-anthropic-bedrock-llm-failed' | 'call.in-progress.error-providerfault-anthropic-bedrock-llm-failed' | 'call.in-progress.error-vapifault-anthropic-bedrock-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anthropic-bedrock-401-unauthorized' | 'call.in-progress.error-vapifault-anthropic-bedrock-403-model-access-denied' | 'call.in-progress.error-vapifault-anthropic-bedrock-429-exceeded-quota' | 'call.in-progress.error-providerfault-anthropic-bedrock-500-server-error' | 'call.in-progress.error-providerfault-anthropic-bedrock-503-server-overloaded-error' | 'pipeline-error-anthropic-vertex-400-bad-request-validation-failed' | 'pipeline-error-anthropic-vertex-401-unauthorized' | 'pipeline-error-anthropic-vertex-403-model-access-denied' | 'pipeline-error-anthropic-vertex-429-exceeded-quota' | 'pipeline-error-anthropic-vertex-500-server-error' | 'pipeline-error-anthropic-vertex-503-server-overloaded-error' | 'pipeline-error-anthropic-vertex-llm-failed' | 'call.in-progress.error-providerfault-anthropic-vertex-llm-failed' | 'call.in-progress.error-vapifault-anthropic-vertex-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anthropic-vertex-401-unauthorized' | 'call.in-progress.error-vapifault-anthropic-vertex-403-model-access-denied' | 'call.in-progress.error-vapifault-anthropic-vertex-429-exceeded-quota' | 'call.in-progress.error-providerfault-anthropic-vertex-500-server-error' | 'call.in-progress.error-providerfault-anthropic-vertex-503-server-overloaded-error' | 'pipeline-error-together-ai-400-bad-request-validation-failed' | 'pipeline-error-together-ai-401-unauthorized' | 'pipeline-error-together-ai-403-model-access-denied' | 'pipeline-error-together-ai-429-exceeded-quota' | 'pipeline-error-together-ai-500-server-error' | 'pipeline-error-together-ai-503-server-overloaded-error' | 'pipeline-error-together-ai-llm-failed' | 'call.in-progress.error-providerfault-together-ai-llm-failed' | 'call.in-progress.error-vapifault-together-ai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-together-ai-401-unauthorized' | 'call.in-progress.error-vapifault-together-ai-403-model-access-denied' | 'call.in-progress.error-vapifault-together-ai-429-exceeded-quota' | 'call.in-progress.error-providerfault-together-ai-500-server-error' | 'call.in-progress.error-providerfault-together-ai-503-server-overloaded-error' | 'pipeline-error-anyscale-400-bad-request-validation-failed' | 'pipeline-error-anyscale-401-unauthorized' | 'pipeline-error-anyscale-403-model-access-denied' | 'pipeline-error-anyscale-429-exceeded-quota' | 'pipeline-error-anyscale-500-server-error' | 'pipeline-error-anyscale-503-server-overloaded-error' | 'pipeline-error-anyscale-llm-failed' | 'call.in-progress.error-providerfault-anyscale-llm-failed' | 'call.in-progress.error-vapifault-anyscale-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-anyscale-401-unauthorized' | 'call.in-progress.error-vapifault-anyscale-403-model-access-denied' | 'call.in-progress.error-vapifault-anyscale-429-exceeded-quota' | 'call.in-progress.error-providerfault-anyscale-500-server-error' | 'call.in-progress.error-providerfault-anyscale-503-server-overloaded-error' | 'pipeline-error-openrouter-400-bad-request-validation-failed' | 'pipeline-error-openrouter-401-unauthorized' | 'pipeline-error-openrouter-403-model-access-denied' | 'pipeline-error-openrouter-429-exceeded-quota' | 'pipeline-error-openrouter-500-server-error' | 'pipeline-error-openrouter-503-server-overloaded-error' | 'pipeline-error-openrouter-llm-failed' | 'call.in-progress.error-providerfault-openrouter-llm-failed' | 'call.in-progress.error-vapifault-openrouter-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-openrouter-401-unauthorized' | 'call.in-progress.error-vapifault-openrouter-403-model-access-denied' | 'call.in-progress.error-vapifault-openrouter-429-exceeded-quota' | 'call.in-progress.error-providerfault-openrouter-500-server-error' | 'call.in-progress.error-providerfault-openrouter-503-server-overloaded-error' | 'pipeline-error-perplexity-ai-400-bad-request-validation-failed' | 'pipeline-error-perplexity-ai-401-unauthorized' | 'pipeline-error-perplexity-ai-403-model-access-denied' | 'pipeline-error-perplexity-ai-429-exceeded-quota' | 'pipeline-error-perplexity-ai-500-server-error' | 'pipeline-error-perplexity-ai-503-server-overloaded-error' | 'pipeline-error-perplexity-ai-llm-failed' | 'call.in-progress.error-providerfault-perplexity-ai-llm-failed' | 'call.in-progress.error-vapifault-perplexity-ai-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-perplexity-ai-401-unauthorized' | 'call.in-progress.error-vapifault-perplexity-ai-403-model-access-denied' | 'call.in-progress.error-vapifault-perplexity-ai-429-exceeded-quota' | 'call.in-progress.error-providerfault-perplexity-ai-500-server-error' | 'call.in-progress.error-providerfault-perplexity-ai-503-server-overloaded-error' | 'pipeline-error-deepinfra-400-bad-request-validation-failed' | 'pipeline-error-deepinfra-401-unauthorized' | 'pipeline-error-deepinfra-403-model-access-denied' | 'pipeline-error-deepinfra-429-exceeded-quota' | 'pipeline-error-deepinfra-500-server-error' | 'pipeline-error-deepinfra-503-server-overloaded-error' | 'pipeline-error-deepinfra-llm-failed' | 'call.in-progress.error-providerfault-deepinfra-llm-failed' | 'call.in-progress.error-vapifault-deepinfra-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-deepinfra-401-unauthorized' | 'call.in-progress.error-vapifault-deepinfra-403-model-access-denied' | 'call.in-progress.error-vapifault-deepinfra-429-exceeded-quota' | 'call.in-progress.error-providerfault-deepinfra-500-server-error' | 'call.in-progress.error-providerfault-deepinfra-503-server-overloaded-error' | 'pipeline-error-runpod-400-bad-request-validation-failed' | 'pipeline-error-runpod-401-unauthorized' | 'pipeline-error-runpod-403-model-access-denied' | 'pipeline-error-runpod-429-exceeded-quota' | 'pipeline-error-runpod-500-server-error' | 'pipeline-error-runpod-503-server-overloaded-error' | 'pipeline-error-runpod-llm-failed' | 'call.in-progress.error-providerfault-runpod-llm-failed' | 'call.in-progress.error-vapifault-runpod-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-runpod-401-unauthorized' | 'call.in-progress.error-vapifault-runpod-403-model-access-denied' | 'call.in-progress.error-vapifault-runpod-429-exceeded-quota' | 'call.in-progress.error-providerfault-runpod-500-server-error' | 'call.in-progress.error-providerfault-runpod-503-server-overloaded-error' | 'pipeline-error-custom-llm-400-bad-request-validation-failed' | 'pipeline-error-custom-llm-401-unauthorized' | 'pipeline-error-custom-llm-403-model-access-denied' | 'pipeline-error-custom-llm-429-exceeded-quota' | 'pipeline-error-custom-llm-500-server-error' | 'pipeline-error-custom-llm-503-server-overloaded-error' | 'pipeline-error-custom-llm-llm-failed' | 'call.in-progress.error-providerfault-custom-llm-llm-failed' | 'call.in-progress.error-vapifault-custom-llm-400-bad-request-validation-failed' | 'call.in-progress.error-vapifault-custom-llm-401-unauthorized' | 'call.in-progress.error-vapifault-custom-llm-403-model-access-denied' | 'call.in-progress.error-vapifault-custom-llm-429-exceeded-quota' | 'call.in-progress.error-providerfault-custom-llm-500-server-error' | 'call.in-progress.error-providerfault-custom-llm-503-server-overloaded-error' | 'call.in-progress.error-pipeline-ws-model-connection-failed' | 'pipeline-error-custom-voice-failed' | 'pipeline-error-cartesia-socket-hang-up' | 'pipeline-error-cartesia-requested-payment' | 'pipeline-error-cartesia-500-server-error' | 'pipeline-error-cartesia-502-server-error' | 'pipeline-error-cartesia-503-server-error' | 'pipeline-error-cartesia-522-server-error' | 'call.in-progress.error-vapifault-cartesia-socket-hang-up' | 'call.in-progress.error-vapifault-cartesia-requested-payment' | 'call.in-progress.error-providerfault-cartesia-500-server-error' | 'call.in-progress.error-providerfault-cartesia-503-server-error' | 'call.in-progress.error-providerfault-cartesia-522-server-error' | 'pipeline-error-eleven-labs-voice-not-found' | 'pipeline-error-eleven-labs-quota-exceeded' | 'pipeline-error-eleven-labs-unauthorized-access' | 'pipeline-error-eleven-labs-unauthorized-to-access-model' | 'pipeline-error-eleven-labs-professional-voices-only-for-creator-plus' | 'pipeline-error-eleven-labs-blocked-free-plan-and-requested-upgrade' | 'pipeline-error-eleven-labs-blocked-concurrent-requests-and-requested-upgrade' | 'pipeline-error-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade' | 'pipeline-error-eleven-labs-system-busy-and-requested-upgrade' | 'pipeline-error-eleven-labs-voice-not-fine-tuned' | 'pipeline-error-eleven-labs-invalid-api-key' | 'pipeline-error-eleven-labs-invalid-voice-samples' | 'pipeline-error-eleven-labs-voice-disabled-by-owner' | 'pipeline-error-eleven-labs-vapi-voice-disabled-by-owner' | 'pipeline-error-eleven-labs-blocked-account-in-probation' | 'pipeline-error-eleven-labs-blocked-content-against-their-policy' | 'pipeline-error-eleven-labs-missing-samples-for-voice-clone' | 'pipeline-error-eleven-labs-voice-not-fine-tuned-and-cannot-be-used' | 'pipeline-error-eleven-labs-voice-not-allowed-for-free-users' | 'pipeline-error-eleven-labs-max-character-limit-exceeded' | 'pipeline-error-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification' | 'pipeline-error-eleven-labs-500-server-error' | 'pipeline-error-eleven-labs-503-server-error' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-found' | 'call.in-progress.error-vapifault-eleven-labs-quota-exceeded' | 'call.in-progress.error-vapifault-eleven-labs-unauthorized-access' | 'call.in-progress.error-vapifault-eleven-labs-unauthorized-to-access-model' | 'call.in-progress.error-vapifault-eleven-labs-professional-voices-only-for-creator-plus' | 'call.in-progress.error-vapifault-eleven-labs-blocked-free-plan-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-blocked-concurrent-requests-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-system-busy-and-requested-upgrade' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned' | 'call.in-progress.error-vapifault-eleven-labs-invalid-api-key' | 'call.in-progress.error-vapifault-eleven-labs-invalid-voice-samples' | 'call.in-progress.error-vapifault-eleven-labs-voice-disabled-by-owner' | 'call.in-progress.error-vapifault-eleven-labs-blocked-account-in-probation' | 'call.in-progress.error-vapifault-eleven-labs-blocked-content-against-their-policy' | 'call.in-progress.error-vapifault-eleven-labs-missing-samples-for-voice-clone' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned-and-cannot-be-used' | 'call.in-progress.error-vapifault-eleven-labs-voice-not-allowed-for-free-users' | 'call.in-progress.error-vapifault-eleven-labs-max-character-limit-exceeded' | 'call.in-progress.error-vapifault-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification' | 'call.in-progress.error-providerfault-eleven-labs-system-busy-and-requested-upgrade' | 'call.in-progress.error-providerfault-eleven-labs-500-server-error' | 'call.in-progress.error-providerfault-eleven-labs-503-server-error' | 'pipeline-error-playht-request-timed-out' | 'pipeline-error-playht-invalid-voice' | 'pipeline-error-playht-unexpected-error' | 'pipeline-error-playht-out-of-credits' | 'pipeline-error-playht-invalid-emotion' | 'pipeline-error-playht-voice-must-be-a-valid-voice-manifest-uri' | 'pipeline-error-playht-401-unauthorized' | 'pipeline-error-playht-403-forbidden-out-of-characters' | 'pipeline-error-playht-403-forbidden-api-access-not-available' | 'pipeline-error-playht-429-exceeded-quota' | 'pipeline-error-playht-502-gateway-error' | 'pipeline-error-playht-504-gateway-error' | 'call.in-progress.error-vapifault-playht-request-timed-out' | 'call.in-progress.error-vapifault-playht-invalid-voice' | 'call.in-progress.error-vapifault-playht-unexpected-error' | 'call.in-progress.error-vapifault-playht-out-of-credits' | 'call.in-progress.error-vapifault-playht-invalid-emotion' | 'call.in-progress.error-vapifault-playht-voice-must-be-a-valid-voice-manifest-uri' | 'call.in-progress.error-vapifault-playht-401-unauthorized' | 'call.in-progress.error-vapifault-playht-403-forbidden-out-of-characters' | 'call.in-progress.error-vapifault-playht-403-forbidden-api-access-not-available' | 'call.in-progress.error-vapifault-playht-429-exceeded-quota' | 'call.in-progress.error-providerfault-playht-502-gateway-error' | 'call.in-progress.error-providerfault-playht-504-gateway-error' | 'pipeline-error-custom-transcriber-failed' | 'call.in-progress.error-vapifault-custom-transcriber-failed' | 'pipeline-error-eleven-labs-transcriber-failed' | 'call.in-progress.error-vapifault-eleven-labs-transcriber-failed' | 'pipeline-error-deepgram-returning-400-no-such-model-language-tier-combination' | 'pipeline-error-deepgram-returning-401-invalid-credentials' | 'pipeline-error-deepgram-returning-403-model-access-denied' | 'pipeline-error-deepgram-returning-404-not-found' | 'pipeline-error-deepgram-returning-500-invalid-json' | 'pipeline-error-deepgram-returning-502-network-error' | 'pipeline-error-deepgram-returning-502-bad-gateway-ehostunreach' | 'pipeline-error-deepgram-returning-econnreset' | 'call.in-progress.error-vapifault-deepgram-returning-400-no-such-model-language-tier-combination' | 'call.in-progress.error-vapifault-deepgram-returning-401-invalid-credentials' | 'call.in-progress.error-vapifault-deepgram-returning-404-not-found' | 'call.in-progress.error-vapifault-deepgram-returning-403-model-access-denied' | 'call.in-progress.error-providerfault-deepgram-returning-500-invalid-json' | 'call.in-progress.error-providerfault-deepgram-returning-502-network-error' | 'call.in-progress.error-providerfault-deepgram-returning-502-bad-gateway-ehostunreach' | 'pipeline-error-google-transcriber-failed' | 'call.in-progress.error-vapifault-google-transcriber-failed' | 'pipeline-error-openai-transcriber-failed' | 'call.in-progress.error-vapifault-openai-transcriber-failed' | 'pipeline-error-soniox-transcriber-auth-failed' | 'pipeline-error-soniox-transcriber-rate-limited' | 'pipeline-error-soniox-transcriber-invalid-config' | 'pipeline-error-soniox-transcriber-server-error' | 'pipeline-error-soniox-transcriber-failed' | 'call.in-progress.error-vapifault-soniox-transcriber-auth-failed' | 'call.in-progress.error-vapifault-soniox-transcriber-rate-limited' | 'call.in-progress.error-vapifault-soniox-transcriber-invalid-config' | 'call.in-progress.error-vapifault-soniox-transcriber-server-error' | 'call.in-progress.error-vapifault-soniox-transcriber-failed' | 'pipeline-error-xai-transcriber-auth-failed' | 'pipeline-error-xai-transcriber-rate-limited' | 'pipeline-error-xai-transcriber-invalid-config' | 'pipeline-error-xai-transcriber-server-error' | 'pipeline-error-xai-transcriber-failed' | 'call.in-progress.error-vapifault-xai-transcriber-auth-failed' | 'call.in-progress.error-vapifault-xai-transcriber-rate-limited' | 'call.in-progress.error-vapifault-xai-transcriber-invalid-config' | 'call.in-progress.error-vapifault-xai-transcriber-server-error' | 'call.in-progress.error-vapifault-xai-transcriber-failed' | 'pipeline-error-cartesia-transcriber-failed' | 'call.in-progress.error-vapifault-cartesia-transcriber-failed' | 'call.in-progress.error-warm-transfer-max-duration' | 'call.in-progress.error-warm-transfer-assistant-cancelled' | 'call.in-progress.error-warm-transfer-silence-timeout' | 'call.in-progress.error-warm-transfer-microphone-timeout' | 'assistant-ended-call' | 'assistant-said-end-call-phrase' | 'assistant-ended-call-with-hangup-task' | 'assistant-ended-call-after-message-spoken' | 'assistant-forwarded-call' | 'assistant-join-timed-out' | 'call.in-progress.error-assistant-did-not-receive-customer-audio' | 'call.in-progress.error-transfer-failed' | 'customer-busy' | 'customer-ended-call' | 'customer-ended-call-before-warm-transfer' | 'customer-ended-call-after-warm-transfer-attempt' | 'customer-ended-call-during-transfer' | 'customer-did-not-answer' | 'customer-did-not-give-microphone-permission' | 'exceeded-max-duration' | 'manually-canceled' | 'phone-call-provider-closed-websocket' | 'call.forwarding.operator-busy' | 'call.forwarding.no-answer' | 'silence-timed-out' | 'call.in-progress.error-sip-inbound-call-failed-to-connect' | 'call.in-progress.error-providerfault-outbound-sip-403-forbidden' | 'call.in-progress.error-providerfault-outbound-sip-407-proxy-authentication-required' | 'call.in-progress.error-providerfault-outbound-sip-408-request-timeout' | 'call.in-progress.error-providerfault-outbound-sip-503-service-unavailable' | 'call.in-progress.error-providerfault-outbound-sip-480-temporarily-unavailable' | 'call.in-progress.error-sip-outbound-call-failed-to-connect' | 'call.ringing.hook-executed-say' | 'call.ringing.hook-executed-transfer' | 'call.ending.hook-executed-say' | 'call.ending.hook-executed-transfer' | 'call.ringing.sip-inbound-caller-hungup-before-call-connect' | 'call.ringing.error-sip-inbound-call-failed-to-connect' | 'twilio-failed-to-connect-call' | 'twilio-reported-customer-misdialed' | 'vonage-rejected' | 'voicemail' | 'call-deleted' — This is the explanation for how the call ended.
  - `endedMessage` string — This is the message that adds more context to the ended reason. It can be used to provide potential error messages or warnings.
  - `destination` union — This is the destination where the call ended up being transferred to. If the call was not transferred, this will be empty.
    - TransferDestinationNumber
      - `message` union — This is spoken to the customer before connecting them to the destination. Usage: - If this is not provided and transfer tool messages is not provided, default is "Transferring the call now". - If set to "", nothing is spoken. This is useful when you want to silently transfer. This is especially useful when transferring between assistants in a squad. In this scenario, you likely also want to set `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message` for the destination assistant. This accepts a string or a ToolMessageStart class. Latter is useful if you want to specify multiple messages for different languages through the `contents` field.
        - string
        - CustomMessage
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'custom-message', required — This is a custom message.
          - `content` string — This is the content that the assistant will say when this message is triggered.
      - `type` 'number', required
      - `numberE164CheckEnabled` boolean — This is the flag to toggle the E164 check for the `number` field. This is an advanced property which should be used if you know your use case requires it. Use cases: - `false`: To allow non-E164 numbers like `+001234567890`, `1234`, or `abc`. This is useful for dialing out to non-E164 numbers on your SIP trunks. - `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls. If `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\+?[a-zA-Z0-9]+$/`). @default true (E164 check is enabled)
      - `number` string, required — This is the phone number to transfer the call to.
      - `extension` string — This is the extension to dial after transferring the call to the `number`.
      - `callerId` string — This is the caller ID to use when transferring the call to the `number`. Usage: - If not provided, the caller ID will be the number the call is coming **from**. Example: a customer with number +14151111111 calls in to and the assistant transfers out to +16470000000. +16470000000 will see +14151111111 as the caller. For inbound calls, the caller ID is the customer's number. For outbound calls, the caller ID is the phone number of the assistant. - To change this behavior, provide a `callerId`. - Set to '{{customer.number}}' to always use the customer's number as the caller ID. - Set to '{{phoneNumber.number}}' to always use the phone number of the assistant as the caller ID. - Set to any E164 number to always use that number as the caller ID. This needs to be a number that is owned or verified by your Transport provider like Twilio. For Twilio, you can read up more here: https://www.twilio.com/docs/voice/twiml/dial#callerid
      - `transferPlan` TransferPlan
        - `mode` 'blind-transfer' | 'blind-transfer-add-summary-to-sip-header' | 'warm-transfer-say-message' | 'warm-transfer-say-summary' | 'warm-transfer-twiml' | 'warm-transfer-wait-for-operator-to-speak-first-and-then-say-message' | 'warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary' | 'warm-transfer-experimental', required — This configures how transfer is executed and the experience of the destination party receiving the call. Usage: - `blind-transfer`: The assistant forwards the call to the destination without any message or summary. - `blind-transfer-add-summary-to-sip-header`: The assistant forwards the call to the destination and adds a SIP header X-Transfer-Summary to the call to include the summary. - `warm-transfer-say-message`: The assistant dials the destination, delivers the `message` to the destination party, connects the customer, and leaves the call. - `warm-transfer-say-summary`: The assistant dials the destination, provides a summary of the call to the destination party, connects the customer, and leaves the call. - `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`: The assistant dials the destination, waits for the operator to speak, delivers the `message` to the destination party, and then connects the customer. - `warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary`: The assistant dials the destination, waits for the operator to speak, provides a summary of the call to the destination party, and then connects the customer. - `warm-transfer-twiml`: The assistant dials the destination, executes the twiml instructions on the destination call leg, connects the customer, and leaves the call. - `warm-transfer-experimental`: The assistant puts the customer on hold, dials the destination, and if the destination answers (and is human), delivers a message or summary before connecting the customer. If the destination is unreachable or not human (e.g., with voicemail detection), the assistant delivers the `fallbackMessage` to the customer and optionally ends the call. @default 'blind-transfer'
        - `message` union — This is the message the assistant will deliver to the destination party before connecting the customer. Usage: - Used only when `mode` is `blind-transfer-add-summary-to-sip-header`, `warm-transfer-say-message`, `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`, or `warm-transfer-experimental`.
          - string
          - CustomMessage
            - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
              - …
            - `type` 'custom-message', required — This is a custom message.
            - `content` string — This is the content that the assistant will say when this message is triggered.
        - `timeout` number — This is the timeout in seconds for the warm-transfer-wait-for-operator-to-speak-first-and-then-say-message/summary @default 60
        - `sipVerb` object — This specifies the SIP verb to use while transferring the call. - 'refer': Uses SIP REFER to transfer the call (default) - 'bye': Ends current call with SIP BYE - 'dial': Uses SIP DIAL to transfer the call
        - `dialTimeout` number — This sets the timeout for the dial operation in seconds. This is the duration the call will ring before timing out. Only applicable when `sipVerb='dial'`. Not applicable for SIP REFER or BYE. @default 60
        - `holdAudioUrl` string — This is the URL to an audio file played while the customer is on hold during transfer. Usage: - Used only when `mode` is `warm-transfer-experimental`. - Used when transferring calls to play hold audio for the customer. - Must be a publicly accessible URL to an audio file. - Supported formats: MP3 and WAV. - If not provided, the default hold audio will be used.
        - `transferCompleteAudioUrl` string — This is the URL to an audio file played after the warm transfer message or summary is delivered to the destination party. It can be used to play a custom sound like 'beep' to notify that the transfer is complete. Usage: - Used only when `mode` is `warm-transfer-experimental`. - Used when transferring calls to play hold audio for the destination party. - Must be a publicly accessible URL to an audio file. - Supported formats: MP3 and WAV.
        - `contextEngineeringPlan` union — This is the plan for manipulating the message context before initiating the warm transfer. Usage: - Used only when `mode` is `warm-transfer-experimental`. - These messages will automatically be added to the transferAssistant's system message. - If 'none', we will not add any transcript to the transferAssistant's system message. - If you want to provide your own messages, use transferAssistant.model.messages instead. @default { type: 'all' }
          - ContextEngineeringPlanLastNMessages
            - `type` 'lastNMessages', required
            - `maxMessages` number, required — This is the maximum number of messages to include in the context engineering plan.
          - ContextEngineeringPlanNone
            - `type` 'none', required
          - ContextEngineeringPlanAll
            - `type` 'all', required
        - `twiml` string — This is the TwiML instructions to execute on the destination call leg before connecting the customer. Usage: - Used only when `mode` is `warm-transfer-twiml`. - Supports only `Play`, `Say`, `Gather`, `Hangup` and `Pause` verbs. - Maximum length is 4096 characters. Example: ``` <Say voice="alice" language="en-US">Hello, transferring a customer to you.</Say> <Pause length="2"/> <Say>They called about billing questions.</Say> ```
        - `summaryPlan` SummaryPlan
          - `messages` object[] — These are the messages used to generate the summary. @default: ``` [ { "role": "system", "content": "You are an expert note-taker. You will be given a transcript of a call. Summarize the call in 2-3 sentences. DO NOT return anything except the summary." }, { "role": "user", "content": "Here is the transcript:\n\n{{transcript}}\n\n. Here is the ended reason of the call:\n\n{{endedReason}}\n\n" } ]``` You can customize by providing any messages you want. Here are the template variables available: - {{transcript}}: The transcript of the call from `call.artifact.transcript` - {{systemPrompt}}: The system prompt of the call from `assistant.model.messages[type=system].content` - {{messages}}: The messages of the call from `assistant.model.messages` - {{endedReason}}: The ended reason of the call from `call.endedReason`
          - `enabled` boolean — This determines whether a summary is generated and stored in `call.analysis.summary`. Defaults to true. Usage: - If you want to disable the summary, set this to false. @default true
          - `timeoutSeconds` number — This is how long the request is tried before giving up. When request times out, `call.analysis.summary` will be empty. Usage: - To guarantee the summary is generated, set this value high. Note, this will delay the end of call report in cases where model is slow to respond. @default 5 seconds
        - `sipHeadersInReferToEnabled` boolean — This flag includes the sipHeaders from above in the refer to sip uri as url encoded query params. @default false
        - `fallbackPlan` TransferFallbackPlan
          - `message` union, required — This is the message the assistant will deliver to the customer if the transfer fails.
            - string
            - CustomMessage
              - …
          - `endCallEnabled` boolean — This controls what happens after delivering the failure message to the customer. - true: End the call after delivering the failure message (default) - false: Keep the assistant on the call to continue handling the customer's request @default true
      - `name` string — This is the name of the transfer destination. This is just for your own reference. Usage: - Optional. Stored with the destination wherever it is supplied. For `number` and `sip` destinations it is also persisted on the transfer record in the call artifact after a transfer and displayed in the dashboard call log (on the transfer divider in the transcript view) alongside the destination. When omitted, everything behaves exactly as before. - Display-only. Unlike `description`, it is never included in prompts or tool descriptions and has no effect on model behavior or destination choice.
      - `description` string — This is the description of the destination, used by the AI to choose when and how to transfer the call.
    - TransferDestinationSip
      - `message` union — This is spoken to the customer before connecting them to the destination. Usage: - If this is not provided and transfer tool messages is not provided, default is "Transferring the call now". - If set to "", nothing is spoken. This is useful when you want to silently transfer. This is especially useful when transferring between assistants in a squad. In this scenario, you likely also want to set `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message` for the destination assistant. This accepts a string or a ToolMessageStart class. Latter is useful if you want to specify multiple messages for different languages through the `contents` field.
        - string
        - CustomMessage
          - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
            - `type` 'text', required
            - `text` string, required
            - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu', required
          - `type` 'custom-message', required — This is a custom message.
          - `content` string — This is the content that the assistant will say when this message is triggered.
      - `type` 'sip', required
      - `sipUri` string, required — This is the SIP URI to transfer the call to.
      - `callerId` string — This is the caller ID to use when transferring the call to the `sipUri`. Usage: - If not provided, the caller ID will be determined by the SIP infrastructure. - Set to '{{customer.number}}' to always use the customer's number as the caller ID. - Set to '{{phoneNumber.number}}' to always use the phone number of the assistant as the caller ID. - Set to any E164 number to always use that number as the caller ID. Only applicable when `transferPlan.sipVerb='dial'`. Not applicable for SIP REFER.
      - `transferPlan` TransferPlan
        - `mode` 'blind-transfer' | 'blind-transfer-add-summary-to-sip-header' | 'warm-transfer-say-message' | 'warm-transfer-say-summary' | 'warm-transfer-twiml' | 'warm-transfer-wait-for-operator-to-speak-first-and-then-say-message' | 'warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary' | 'warm-transfer-experimental', required — This configures how transfer is executed and the experience of the destination party receiving the call. Usage: - `blind-transfer`: The assistant forwards the call to the destination without any message or summary. - `blind-transfer-add-summary-to-sip-header`: The assistant forwards the call to the destination and adds a SIP header X-Transfer-Summary to the call to include the summary. - `warm-transfer-say-message`: The assistant dials the destination, delivers the `message` to the destination party, connects the customer, and leaves the call. - `warm-transfer-say-summary`: The assistant dials the destination, provides a summary of the call to the destination party, connects the customer, and leaves the call. - `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`: The assistant dials the destination, waits for the operator to speak, delivers the `message` to the destination party, and then connects the customer. - `warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary`: The assistant dials the destination, waits for the operator to speak, provides a summary of the call to the destination party, and then connects the customer. - `warm-transfer-twiml`: The assistant dials the destination, executes the twiml instructions on the destination call leg, connects the customer, and leaves the call. - `warm-transfer-experimental`: The assistant puts the customer on hold, dials the destination, and if the destination answers (and is human), delivers a message or summary before connecting the customer. If the destination is unreachable or not human (e.g., with voicemail detection), the assistant delivers the `fallbackMessage` to the customer and optionally ends the call. @default 'blind-transfer'
        - `message` union — This is the message the assistant will deliver to the destination party before connecting the customer. Usage: - Used only when `mode` is `blind-transfer-add-summary-to-sip-header`, `warm-transfer-say-message`, `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`, or `warm-transfer-experimental`.
          - string
          - CustomMessage
            - `contents` TextContent[] — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
              - …
            - `type` 'custom-message', required — This is a custom message.
            - `content` string — This is the content that the assistant will say when this message is triggered.
        - `timeout` number — This is the timeout in seconds for the warm-transfer-wait-for-operator-to-speak-first-and-then-say-message/summary @default 60
        - `sipVerb` object — This specifies the SIP verb to use while transferring the call. - 'refer': Uses SIP REFER to transfer the call (default) - 'bye': Ends current call with SIP BYE - 'dial': Uses SIP DIAL to transfer the call
        - `dialTimeout` number — This sets the timeout for the dial operation in seconds. This is the duration the call will ring before timing out. Only applicable when `sipVerb='dial'`. Not applicable for SIP REFER or BYE. @default 60
        - `holdAudioUrl` string — This is the URL to an audio file played while the customer is on hold during transfer. Usage: - Used only when `mode` is `warm-transfer-experimental`. - Used when transferring calls to play hold audio for the customer. - Must be a publicly accessible URL to an audio file. - Supported formats: MP3 and WAV. - If not provided, the default hold audio will be used.
        - `transferCompleteAudioUrl` string — This is the URL to an audio file played after the warm transfer message or summary is delivered to the destination party. It can be used to play a custom sound like 'beep' to notify that the transfer is complete. Usage: - Used only when `mode` is `warm-transfer-experimental`. - Used when transferring calls to play hold audio for the destination party. - Must be a publicly accessible URL to an audio file. - Supported formats: MP3 and WAV.
        - `contextEngineeringPlan` union — This is the plan for manipulating the message context before initiating the warm transfer. Usage: - Used only when `mode` is `warm-transfer-experimental`. - These messages will automatically be added to the transferAssistant's system message. - If 'none', we will not add any transcript to the transferAssistant's system message. - If you want to provide your own messages, use transferAssistant.model.messages instead. @default { type: 'all' }
          - ContextEngineeringPlanLastNMessages
            - `type` 'lastNMessages', required
            - `maxMessages` number, required — This is the maximum number of messages to include in the context engineering plan.
          - ContextEngineeringPlanNone
            - `type` 'none', required
          - ContextEngineeringPlanAll
            - `type` 'all', required
        - `twiml` string — This is the TwiML instructions to execute on the destination call leg before connecting the customer. Usage: - Used only when `mode` is `warm-transfer-twiml`. - Supports only `Play`, `Say`, `Gather`, `Hangup` and `Pause` verbs. - Maximum length is 4096 characters. Example: ``` <Say voice="alice" language="en-US">Hello, transferring a customer to you.</Say> <Pause length="2"/> <Say>They called about billing questions.</Say> ```
        - `summaryPlan` SummaryPlan
          - `messages` object[] — These are the messages used to generate the summary. @default: ``` [ { "role": "system", "content": "You are an expert note-taker. You will be given a transcript of a call. Summarize the call in 2-3 sentences. DO NOT return anything except the summary." }, { "role": "user", "content": "Here is the transcript:\n\n{{transcript}}\n\n. Here is the ended reason of the call:\n\n{{endedReason}}\n\n" } ]``` You can customize by providing any messages you want. Here are the template variables available: - {{transcript}}: The transcript of the call from `call.artifact.transcript` - {{systemPrompt}}: The system prompt of the call from `assistant.model.messages[type=system].content` - {{messages}}: The messages of the call from `assistant.model.messages` - {{endedReason}}: The ended reason of the call from `call.endedReason`
          - `enabled` boolean — This determines whether a summary is generated and stored in `call.analysis.summary`. Defaults to true. Usage: - If you want to disable the summary, set this to false. @default true
          - `timeoutSeconds` number — This is how long the request is tried before giving up. When request times out, `call.analysis.summary` will be empty. Usage: - To guarantee the summary is generated, set this value high. Note, this will delay the end of call report in cases where model is slow to respond. @default 5 seconds
        - `sipHeadersInReferToEnabled` boolean — This flag includes the sipHeaders from above in the refer to sip uri as url encoded query params. @default false
        - `fallbackPlan` TransferFallbackPlan
          - `message` union, required — This is the message the assistant will deliver to the customer if the transfer fails.
            - string
            - CustomMessage
              - …
          - `endCallEnabled` boolean — This controls what happens after delivering the failure message to the customer. - true: End the call after delivering the failure message (default) - false: Keep the assistant on the call to continue handling the customer's request @default true
      - `sipHeaders` object — These are custom headers to be added to SIP refer during transfer call.
      - `name` string — This is the name of the transfer destination. This is just for your own reference. Usage: - Optional. Stored with the destination wherever it is supplied. For `number` and `sip` destinations it is also persisted on the transfer record in the call artifact after a transfer and displayed in the dashboard call log (on the transfer divider in the transcript view) alongside the destination. When omitted, everything behaves exactly as before. - Display-only. Unlike `description`, it is never included in prompts or tool descriptions and has no effect on model behavior or destination choice.
      - `description` string — This is the description of the destination, used by the AI to choose when and how to transfer the call.
  - `assistantVersion` string, nullable — This is the assistant version to use for this call. Supported only with direct `assistantId`. Omit to follow the latest version.
  - `transport` union — This is the transport of the call.
    - VapiWebsocketTransport
      - `conversationType` 'voice' — This is the conversation type of the call (ie, voice or chat).
      - `provider` 'vapi.websocket', required — Vapi websocket transport provider
      - `audioFormat` AudioFormat
        - `sampleRate` number, required — This is the sample rate of the call. @default 16000
        - `format` object, required — This is the audio format of the call. @default 'pcm_s16le'
        - `container` 'raw' — This is the container format of the call. @default 'raw'
    - VonageTransport
      - `conversationType` 'voice' — This is the conversation type of the call (ie, voice or chat).
      - `provider` 'vonage', required — Vonage transport provider
      - `conversationUUID` string — This is the conversation UUID of the Vonage call.
      - `callUUID` string — This is the call ID of the Vonage call.
    - TwilioTransport
      - `conversationType` 'voice' — This is the conversation type of the call (ie, voice or chat).
      - `provider` 'twilio', required — Twilio transport provider
      - `accountSid` string — This is the account SID of the Twilio account.
      - `callSid` string — This is the call SID of the Twilio call.
      - `callToken` string — This is the call token of the Twilio call.
      - `forwardedFrom` string — This is the phone number from which the call was forwarded. Undefined if the call was not forwarded.
    - VapiSipTransport
      - `conversationType` 'voice' — This is the conversation type of the call (ie, voice or chat).
      - `provider` 'vapi.sip', required — Vapi SIP transport provider
      - `dialTimeout` number — This sets the timeout for outbound dial operations in seconds. This is the duration the call will ring before timing out. @default 60
      - `sbcCallSid` string — This is the call SID of the Vapi SIP call.
      - `callSid` string — This is the call ID of the Vapi SIP call.
    - TelnyxTransport
      - `conversationType` 'voice' — This is the conversation type of the call (ie, voice or chat).
      - `provider` 'telnyx', required — Telnyx transport provider
      - `callControlId` string — This is the call control ID of the Telnyx call.
      - `callLegId` string — This is the call leg ID of the Telnyx call.
      - `callSessionId` string — This is the call session ID of the Telnyx call.
    - VapiWebCallTransport
      - `conversationType` 'voice' — This is the conversation type of the call (ie, voice or chat).
      - `provider` 'daily', required — Vapi web call transport provider
      - `roomDeleteOnUserLeaveEnabled` boolean — This determines whether the daily room will be deleted and all participants will be kicked once the user leaves the room. If set to `false`, the room will be kept alive even after the user leaves, allowing clients to reconnect to the same room. If set to `true`, the room will be deleted and reconnection will not be allowed. Defaults to `true`.
      - `callToken` string — This is the meeting token the web client should join the call with. When video recording is enabled, joining with this token starts the cloud recording automatically server-side, which is more reliable than the client starting it after joining. Set by the server; only present when video recording is enabled.
      - `callUrl` string — This is the URL of the web call.
      - `callSipUri` string — This is the SIP URI of the web call.
  - `id` string, required — This is the unique identifier for the call.
  - `orgId` string, required — This is the unique identifier for the org that this call belongs to.
  - `createdAt` string, date-time, required — This is the ISO 8601 date-time string of when the call was created.
  - `updatedAt` string, date-time, required — This is the ISO 8601 date-time string of when the call was last updated.
  - `startedAt` string, date-time — This is the ISO 8601 date-time string of when the call was started.
  - `endedAt` string, date-time — This is the ISO 8601 date-time string of when the call was ended.
  - `cost` number — This is the cost of the call in USD.
  - `costBreakdown` CostBreakdown
    - `transport` number — This is the cost of the transport provider, like Twilio or Vonage.
    - `stt` number — This is the cost of the speech-to-text service.
    - `llm` number — This is the cost of the language model.
    - `tts` number — This is the cost of the text-to-speech service.
    - `vapi` number — This is the cost of Vapi.
    - `chat` number — This is the cost of chat interactions.
    - `total` number — This is the total cost of the call.
    - `llmPromptTokens` number — This is the LLM prompt tokens used for the call.
    - `llmCompletionTokens` number — This is the LLM completion tokens used for the call.
    - `llmCachedPromptTokens` number — This is the LLM cached prompt tokens used for the call.
    - `ttsCharacters` number — This is the TTS characters used for the call.
    - `analysisCostBreakdown` AnalysisCostBreakdown
      - `summary` number — This is the cost to summarize the call.
      - `summaryPromptTokens` number — This is the number of prompt tokens used to summarize the call.
      - `summaryCompletionTokens` number — This is the number of completion tokens used to summarize the call.
      - `summaryCachedPromptTokens` number — This is the number of cached prompt tokens used to summarize the call.
      - `structuredData` number — This is the cost to extract structured data from the call.
      - `structuredDataPromptTokens` number — This is the number of prompt tokens used to extract structured data from the call.
      - `structuredDataCompletionTokens` number — This is the number of completion tokens used to extract structured data from the call.
      - `structuredDataCachedPromptTokens` number — This is the number of cached prompt tokens used to extract structured data from the call.
      - `successEvaluation` number — This is the cost to evaluate if the call was successful.
      - `successEvaluationPromptTokens` number — This is the number of prompt tokens used to evaluate if the call was successful.
      - `successEvaluationCompletionTokens` number — This is the number of completion tokens used to evaluate if the call was successful.
      - `successEvaluationCachedPromptTokens` number — This is the number of cached prompt tokens used to evaluate if the call was successful.
      - `structuredOutput` number — This is the cost to evaluate structuredOutputs from the call.
      - `structuredOutputPromptTokens` number — This is the number of prompt tokens used to evaluate structuredOutputs from the call.
      - `structuredOutputCompletionTokens` number — This is the number of completion tokens used to evaluate structuredOutputs from the call.
      - `structuredOutputCachedPromptTokens` number — This is the number of cached prompt tokens used to evaluate structuredOutputs from the call.
  - `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
      - `enabled` boolean — This determines whether the transcript is stored in `call.artifact.transcript`. Defaults to true. @default true
      - `assistantName` string — This is the name of the assistant in the transcript. Defaults to 'AI'. Usage: - If you want to change the name of the assistant in the transcript, set this. Example, here is what the transcript would look like with `assistantName` set to 'Buyer': ``` User: Hello, how are you? Buyer: I'm fine. User: Do you want to buy a car? Buyer: No. ``` @default 'AI'
      - `userName` string — This is the name of the user in the transcript. Defaults to 'User'. Usage: - If you want to change the name of the user in the transcript, set this. Example, here is what the transcript would look like with `userName` set to 'Seller': ``` Seller: Hello, how are you? AI: I'm fine. Seller: Do you want to buy a car? AI: No. ``` @default 'User'
    - `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.
      - `type` 'ai' | 'regex' — This is the type of structured output. - 'ai': Uses an LLM to extract structured data from the conversation (default). - 'regex': Uses a regex pattern to extract data from the transcript without an LLM. Defaults to 'ai' if not specified.
      - `regex` string — This is the regex pattern to match against the transcript. Only used when type is 'regex'. Supports both raw patterns (e.g. '\d+') and regex literal format (e.g. '/\d+/gi'). Uses RE2 syntax for safety. The result depends on the schema type: - boolean: true if the pattern matches, false otherwise - string: the first match or first capture group - number/integer: the first match parsed as a number - array: all matches
      - `model` union — This is the model that will be used to extract the structured output. To provide your own custom system and user prompts for structured output extraction, populate the messages array with your system and user messages. You can specify liquid templating in your system and user messages. Between the system or user messages, you must reference either 'transcript' or 'messages' with the `{{}}` syntax to access the conversation history. Between the system or user messages, you must reference a variation of the structured output with the `{{}}` syntax to access the structured output definition. i.e.: `{{structuredOutput}}` `{{structuredOutput.name}}` `{{structuredOutput.description}}` `{{structuredOutput.schema}}` If model is not specified, GPT-4.1 will be used by default for extraction, utilizing default system and user prompts. If messages or required fields are not specified, the default system and user prompts will be used.
        - WorkflowOpenAIModel
          - `messages` OpenAIMessage[] — These are the messages used to customize the prompt used for structured output extraction. When provided, these messages replace the default prompts. Message contents support LiquidJS templating with the following variables: - `{{transcript}}` or `{{messages}}` to reference the conversation (one is required) - `{{structuredOutput.name}}`, `{{structuredOutput.description}}`, or `{{structuredOutput.schema}}` to reference the structured output definition (one is required) - `{{systemPrompt}}`, `{{callEndedReason}}`, `{{duration}}`, `{{startedAt}}`, `{{endedAt}}`, and any `assistantOverrides.variableValues` `{{messages}}` is the full message history including tool calls; `{{transcript}}` is the spoken text only, which uses significantly fewer tokens. If not provided, default system and user prompts are used.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `provider` 'openai', required — This is the provider of the model (`openai`).
          - `model` 'gpt-5.6-sol' | 'gpt-5.6-terra' | 'gpt-5.6-luna' | 'gpt-5.5' | 'chat-latest' | 'gpt-5.4' | 'gpt-5.4-mini' | 'gpt-5.4-nano' | 'gpt-5.2' | 'gpt-5.2-chat-latest' | 'gpt-5.1' | 'gpt-5.1-chat-latest' | 'gpt-5' | 'gpt-5-chat-latest' | 'gpt-5-mini' | 'gpt-5-nano' | 'gpt-4.1-2025-04-14' | 'gpt-4.1-mini-2025-04-14' | 'gpt-4.1-nano-2025-04-14' | 'gpt-4.1' | 'gpt-4.1-mini' | 'gpt-4.1-nano' | 'chatgpt-4o-latest' | 'o3' | 'o3-mini' | 'o4-mini' | 'o1-mini' | 'o1-mini-2024-09-12' | 'gpt-4o-mini-2024-07-18' | 'gpt-4o-mini' | 'gpt-4o' | 'gpt-4o-2024-05-13' | 'gpt-4o-2024-08-06' | 'gpt-4o-2024-11-20' | 'gpt-4-turbo' | 'gpt-4-turbo-2024-04-09' | 'gpt-4-turbo-preview' | 'gpt-4-0125-preview' | 'gpt-4-1106-preview' | 'gpt-4' | 'gpt-4-0613' | 'gpt-3.5-turbo' | 'gpt-3.5-turbo-0125' | 'gpt-3.5-turbo-1106' | 'gpt-3.5-turbo-16k' | 'gpt-3.5-turbo-0613' | 'gpt-5.6-luna:westus3' | 'gpt-5.6-terra:westus3' | 'gpt-5.6-sol:westus3' | 'gpt-5.4:eastus2' | 'gpt-5.4:swedencentral' | 'gpt-5.4-mini:eastus2' | 'gpt-5.4-mini:swedencentral' | 'gpt-5.4-nano:eastus2' | 'gpt-5.4-nano:swedencentral' | 'gpt-5.2:eastus2' | 'gpt-5.2:swedencentral' | 'gpt-5.1:eastus2' | 'gpt-5.1:swedencentral' | 'gpt-5:eastus2' | 'gpt-5:swedencentral' | 'gpt-5:canadaeast' | 'gpt-5:eastus' | 'gpt-5:westeurope' | 'gpt-5:germanywestcentral' | 'gpt-5:polandcentral' | 'gpt-5:spaincentral' | 'gpt-5-mini:eastus2' | 'gpt-5-mini:swedencentral' | 'gpt-5-mini:westeurope' | 'gpt-5-mini:germanywestcentral' | 'gpt-5-mini:polandcentral' | 'gpt-5-mini:spaincentral' | 'gpt-5-nano:eastus2' | 'gpt-5-nano:swedencentral' | 'gpt-4.1-2025-04-14:westus' | 'gpt-4.1-2025-04-14:eastus2' | 'gpt-4.1-2025-04-14:eastus' | 'gpt-4.1-2025-04-14:westus3' | 'gpt-4.1-2025-04-14:northcentralus' | 'gpt-4.1-2025-04-14:southcentralus' | 'gpt-4.1-2025-04-14:westeurope' | 'gpt-4.1-2025-04-14:germanywestcentral' | 'gpt-4.1-2025-04-14:polandcentral' | 'gpt-4.1-2025-04-14:spaincentral' | 'gpt-4.1-mini-2025-04-14:westus' | 'gpt-4.1-mini-2025-04-14:eastus2' | 'gpt-4.1-mini-2025-04-14:eastus' | 'gpt-4.1-mini-2025-04-14:westus3' | 'gpt-4.1-mini-2025-04-14:northcentralus' | 'gpt-4.1-mini-2025-04-14:southcentralus' | 'gpt-4.1-mini-2025-04-14:westeurope' | 'gpt-4.1-mini-2025-04-14:germanywestcentral' | 'gpt-4.1-mini-2025-04-14:polandcentral' | 'gpt-4.1-mini-2025-04-14:spaincentral' | 'gpt-4.1-nano-2025-04-14:westus' | 'gpt-4.1-nano-2025-04-14:eastus2' | 'gpt-4.1-nano-2025-04-14:westus3' | 'gpt-4.1-nano-2025-04-14:northcentralus' | 'gpt-4.1-nano-2025-04-14:southcentralus' | 'gpt-4o-2024-11-20:swedencentral' | 'gpt-4o-2024-11-20:westus' | 'gpt-4o-2024-11-20:eastus2' | 'gpt-4o-2024-11-20:eastus' | 'gpt-4o-2024-11-20:westus3' | 'gpt-4o-2024-11-20:southcentralus' | 'gpt-4o-2024-11-20:westeurope' | 'gpt-4o-2024-11-20:germanywestcentral' | 'gpt-4o-2024-11-20:polandcentral' | 'gpt-4o-2024-11-20:spaincentral' | 'gpt-4o-2024-08-06:westus' | 'gpt-4o-2024-08-06:westus3' | 'gpt-4o-2024-08-06:eastus' | 'gpt-4o-2024-08-06:eastus2' | 'gpt-4o-2024-08-06:northcentralus' | 'gpt-4o-2024-08-06:southcentralus' | 'gpt-4o-mini-2024-07-18:westus' | 'gpt-4o-mini-2024-07-18:westus3' | 'gpt-4o-mini-2024-07-18:eastus' | 'gpt-4o-mini-2024-07-18:eastus2' | 'gpt-4o-mini-2024-07-18:northcentralus' | 'gpt-4o-mini-2024-07-18:southcentralus' | 'gpt-4o-2024-05-13:eastus2' | 'gpt-4o-2024-05-13:eastus' | 'gpt-4o-2024-05-13:northcentralus' | 'gpt-4o-2024-05-13:southcentralus' | 'gpt-4o-2024-05-13:westus3' | 'gpt-4o-2024-05-13:westus' | 'gpt-4-turbo-2024-04-09:eastus2' | 'gpt-4-0125-preview:eastus' | 'gpt-4-0125-preview:northcentralus' | 'gpt-4-0125-preview:southcentralus' | 'gpt-4-1106-preview:australiaeast' | 'gpt-4-1106-preview:canadaeast' | 'gpt-4-1106-preview:france' | 'gpt-4-1106-preview:india' | 'gpt-4-1106-preview:norway' | 'gpt-4-1106-preview:swedencentral' | 'gpt-4-1106-preview:uk' | 'gpt-4-1106-preview:westus' | 'gpt-4-1106-preview:westus3' | 'gpt-4-0613:canadaeast' | 'gpt-3.5-turbo-0125:canadaeast' | 'gpt-3.5-turbo-0125:northcentralus' | 'gpt-3.5-turbo-0125:southcentralus' | 'gpt-3.5-turbo-1106:canadaeast' | 'gpt-3.5-turbo-1106:westus' | 'gpt-4.1:australiaeast' | 'gpt-4o:australiaeast' | 'gpt-5.4-mini:australiaeast', required — This is the OpenAI model that will be used. When using Vapi OpenAI or your own Azure Credentials, you have the option to specify the region for the selected model. This shouldn't be specified unless you have a specific reason to do so. Vapi will automatically find the fastest region that make sense. This is helpful when you are required to comply with Data Residency rules. Learn more about Azure regions here https://azure.microsoft.com/en-us/explore/global-infrastructure/data-residency/.
          - `temperature` number — This is the temperature of the model.
          - `maxTokens` number — This is the max tokens of the model.
        - WorkflowAnthropicModel
          - `messages` OpenAIMessage[] — These are the messages used to customize the prompt used for structured output extraction. When provided, these messages replace the default prompts. Message contents support LiquidJS templating with the following variables: - `{{transcript}}` or `{{messages}}` to reference the conversation (one is required) - `{{structuredOutput.name}}`, `{{structuredOutput.description}}`, or `{{structuredOutput.schema}}` to reference the structured output definition (one is required) - `{{systemPrompt}}`, `{{callEndedReason}}`, `{{duration}}`, `{{startedAt}}`, `{{endedAt}}`, and any `assistantOverrides.variableValues` `{{messages}}` is the full message history including tool calls; `{{transcript}}` is the spoken text only, which uses significantly fewer tokens. If not provided, default system and user prompts are used.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `provider` 'anthropic', required — This is the provider of the model (`anthropic`).
          - `model` 'claude-3-opus-20240229' | 'claude-3-sonnet-20240229' | 'claude-3-haiku-20240307' | 'claude-3-5-sonnet-20240620' | 'claude-3-5-sonnet-20241022' | 'claude-3-5-haiku-20241022' | 'claude-3-7-sonnet-20250219' | 'claude-opus-4-20250514' | 'claude-opus-4-5-20251101' | 'claude-opus-4-6' | 'claude-sonnet-4-20250514' | 'claude-sonnet-4-5-20250929' | 'claude-sonnet-4-6' | 'claude-sonnet-5' | 'claude-haiku-4-5-20251001', required — This is the specific model that will be used.
          - `thinking` AnthropicThinkingConfig
            - `type` 'enabled', required
            - `budgetTokens` number, required — The maximum number of tokens to allocate for thinking. Must be between 1024 and 100000 tokens.
          - `temperature` number — This is the temperature of the model.
          - `maxTokens` number — This is the max tokens of the model.
        - WorkflowAnthropicBedrockModel
          - `messages` OpenAIMessage[] — These are the messages used to customize the prompt used for structured output extraction. When provided, these messages replace the default prompts. Message contents support LiquidJS templating with the following variables: - `{{transcript}}` or `{{messages}}` to reference the conversation (one is required) - `{{structuredOutput.name}}`, `{{structuredOutput.description}}`, or `{{structuredOutput.schema}}` to reference the structured output definition (one is required) - `{{systemPrompt}}`, `{{callEndedReason}}`, `{{duration}}`, `{{startedAt}}`, `{{endedAt}}`, and any `assistantOverrides.variableValues` `{{messages}}` is the full message history including tool calls; `{{transcript}}` is the spoken text only, which uses significantly fewer tokens. If not provided, default system and user prompts are used.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `provider` 'anthropic-bedrock', required — This is the provider of the model (`anthropic-bedrock`).
          - `model` 'claude-3-opus-20240229' | 'claude-3-sonnet-20240229' | 'claude-3-haiku-20240307' | 'claude-3-5-sonnet-20240620' | 'claude-3-5-sonnet-20241022' | 'claude-3-5-haiku-20241022' | 'claude-3-7-sonnet-20250219' | 'claude-opus-4-20250514' | 'claude-opus-4-5-20251101' | 'claude-opus-4-6' | 'claude-sonnet-4-20250514' | 'claude-sonnet-4-5-20250929' | 'claude-sonnet-4-6' | 'claude-haiku-4-5-20251001' | 'global.anthropic.claude-haiku-4-5-20251001-v1:0', required — This is the specific model that will be used.
          - `thinking` AnthropicThinkingConfig
            - `type` 'enabled', required
            - `budgetTokens` number, required — The maximum number of tokens to allocate for thinking. Must be between 1024 and 100000 tokens.
          - `temperature` number — This is the temperature of the model.
          - `maxTokens` number — This is the max tokens of the model.
        - WorkflowGoogleModel
          - `messages` OpenAIMessage[] — These are the messages used to customize the prompt used for structured output extraction. When provided, these messages replace the default prompts. Message contents support LiquidJS templating with the following variables: - `{{transcript}}` or `{{messages}}` to reference the conversation (one is required) - `{{structuredOutput.name}}`, `{{structuredOutput.description}}`, or `{{structuredOutput.schema}}` to reference the structured output definition (one is required) - `{{systemPrompt}}`, `{{callEndedReason}}`, `{{duration}}`, `{{startedAt}}`, `{{endedAt}}`, and any `assistantOverrides.variableValues` `{{messages}}` is the full message history including tool calls; `{{transcript}}` is the spoken text only, which uses significantly fewer tokens. If not provided, default system and user prompts are used.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `provider` 'google', required — This is the provider of the model (`google`).
          - `model` 'gemini-3.5-flash' | 'gemini-3.1-flash-lite' | 'gemini-3-flash-preview' | 'gemini-2.5-pro' | 'gemini-2.5-flash' | 'gemini-2.5-flash-lite' | 'gemini-2.0-flash-thinking-exp' | 'gemini-2.0-pro-exp-02-05' | 'gemini-2.0-flash' | 'gemini-2.0-flash-lite' | 'gemini-2.0-flash-exp' | 'gemini-2.0-flash-realtime-exp' | 'gemini-1.5-flash' | 'gemini-1.5-flash-002' | 'gemini-1.5-pro' | 'gemini-1.5-pro-002' | 'gemini-1.0-pro', required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `temperature` number — This is the temperature of the model.
          - `maxTokens` number — This is the max tokens of the model.
        - WorkflowCustomModel
          - `messages` OpenAIMessage[] — These are the messages used to customize the prompt used for structured output extraction. When provided, these messages replace the default prompts. Message contents support LiquidJS templating with the following variables: - `{{transcript}}` or `{{messages}}` to reference the conversation (one is required) - `{{structuredOutput.name}}`, `{{structuredOutput.description}}`, or `{{structuredOutput.schema}}` to reference the structured output definition (one is required) - `{{systemPrompt}}`, `{{callEndedReason}}`, `{{duration}}`, `{{startedAt}}`, `{{endedAt}}`, and any `assistantOverrides.variableValues` `{{messages}}` is the full message history including tool calls; `{{transcript}}` is the spoken text only, which uses significantly fewer tokens. If not provided, default system and user prompts are used.
            - `content` string, nullable, required
            - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
          - `provider` 'custom-llm', required — This is the provider of the model (`custom-llm`).
          - `metadataSendMode` 'off' | 'variable' | 'destructured' — This determines whether metadata is sent in requests to the custom provider. - `off` will not send any metadata. payload will look like `{ messages }` - `variable` will send `assistant.metadata` as a variable on the payload. payload will look like `{ messages, metadata }` - `destructured` will send `assistant.metadata` fields directly on the payload. payload will look like `{ messages, ...metadata }` Further, `variable` and `destructured` will send `call`, `phoneNumber`, and `customer` objects in the payload. Default is `variable`.
          - `url` string, required — These is the URL we'll use for the OpenAI client's `baseURL`. Ex. https://openrouter.ai/api/v1
          - `headers` object — These are the headers we'll use for the OpenAI client's `headers`.
          - `timeoutSeconds` number — This sets the timeout for the connection to the custom provider without needing to stream any tokens back. Default is 20 seconds.
          - `model` string, required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
          - `temperature` number — This is the temperature of the model.
          - `maxTokens` number — This is the max tokens of the model.
      - `compliancePlan` ComplianceOverride
        - `forceStoreOnHipaaEnabled` boolean — Force storage for this output under HIPAA. Only enable if output contains no sensitive data.
      - `conditions` union[], nullable — These are the conditions that gate the execution of this structured output. Every condition must pass for the structured output to run (AND semantics). When omitted or empty, no user-defined conditions gate this output. Send null to clear a previously saved gate.
        - union
          - MinMessagesCondition
            - `type` 'minMessages', required — This is the type discriminator for the minMessages condition.
            - `count` number, required — This is the minimum number of conversation messages required for the structured output to run. A count of 0 removes the runtime default minimum, so the structured output runs regardless of how few messages the conversation has.
          - MinCallDurationCondition
            - `type` 'minCallDuration', required — This is the type discriminator for the minCallDuration condition.
            - `seconds` number, required — This is the minimum call duration in seconds required for the structured output to run. When timestamps are unavailable (for example, chat sessions have no call timestamps), this check passes and does not block the structured output.
          - EndedReasonCondition
            - `type` 'endedReason', required — This is the type discriminator for the endedReason condition.
            - `operator` 'oneOf' | 'notOneOf', required — This is the membership operator applied against `values`. - 'oneOf': the structured output runs only if the call's ended reason is in `values`. - 'notOneOf': the structured output runs only if the call's ended reason is NOT in `values`.
            - `values` string[], required — These are the ended reasons compared against the call's ended reason. Any string is accepted so configurations never break when new ended reasons are introduced. Must contain at least one value.
      - `name` string, required — This is the name of the structured output.
      - `schema` JsonSchema, required
        - `type` 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object', required — This is the type of output you'd like. `string`, `number`, `integer`, `boolean` are the primitive types and should be obvious. `array` and `object` are more interesting and quite powerful. They allow you to define nested structures. For `array`, you can define the schema of the items in the array using the `items` property. For `object`, you can define the properties of the object using the `properties` property.
        - `items` JsonSchema — recursive
        - `properties` object — This is required if the type is "object". This specifies the properties of the object. This is a map of property names to JsonSchema objects.
        - `description` string — This is the description to help the model understand what it needs to output.
        - `pattern` string — This is the pattern of the string. This is a regex that will be used to validate the data in question. To use a common format, use the `format` property instead. OpenAI documentation: https://platform.openai.com/docs/guides/structured-outputs#supported-properties
        - `format` 'date-time' | 'time' | 'date' | 'duration' | 'email' | 'hostname' | 'ipv4' | 'ipv6' | 'uuid' — This is the format of the string. To pass a regex, use the `pattern` property instead. OpenAI documentation: https://platform.openai.com/docs/guides/structured-outputs?api-mode=chat&type-restrictions=string-restrictions
        - `required` string[] — This is a list of properties that are required. This only makes sense if the type is "object".
        - `enum` string[] — This array specifies the allowed values that can be used to restrict the output of the model.
        - `title` string — This is the title of the schema.
      - `description` string — This is the description of what the structured output extracts. Use this to provide context about what data will be extracted and how it will be used.
      - `assistantIds` string[] — These are the assistant IDs that this structured output is linked to. When linked to assistants, this structured output will be available for extraction during those assistant's calls.
      - `workflowIds` string[] — These are the workflow IDs that this structured output is linked to. When linked to workflows, this structured output will be available for extraction during those workflow's execution.
    - `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.
      - `name` string — This is the name of the scorecard. It is only for user reference and will not be used for any evaluation.
      - `description` string — This is the description of the scorecard. It is only for user reference and will not be used for any evaluation.
      - `metrics` ScorecardMetric[], required — These are the metrics that will be used to evaluate the scorecard. Each metric will have a set of conditions and points that will be used to generate the score.
        - `conditions` union[], required — These are the conditions that will be used to evaluate the scorecard. Each condition will have a comparator, value, and points that will be used to calculate the final score. The points will be added to the overall score if the condition is met. The overall score will be normalized to a 100 point scale to ensure uniformity across different scorecards.
          - union
            - NumberComparatorScorecardMetricCondition
              - …
            - BooleanComparatorScorecardMetricCondition
              - …
        - `structuredOutputId` string, required — This is the unique identifier for the structured output that will be used to evaluate the scorecard. The structured output must be of type number or boolean only for now.
      - `assistantIds` string[] — These are the assistant IDs that this scorecard is linked to. When linked to assistants, this scorecard will be available for evaluation during those assistants' calls.
    - `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 '/'
  - `analysis` Analysis
    - `summary` string — This is the summary of the call. Customize by setting `assistant.analysisPlan.summaryPrompt`.
    - `structuredData` object — This is the structured data extracted from the call. Customize by setting `assistant.analysisPlan.structuredDataPrompt` and/or `assistant.analysisPlan.structuredDataSchema`.
    - `structuredDataMulti` object[] — This is the structured data catalog of the call. Customize by setting `assistant.analysisPlan.structuredDataMultiPlan`.
    - `successEvaluation` string — This is the evaluation of the call. Customize by setting `assistant.analysisPlan.successEvaluationPrompt` and/or `assistant.analysisPlan.successEvaluationRubric`.
  - `monitor` Monitor
    - `monitors` MonitorResult[]
      - `monitorId` string, required
      - `filterPassed` boolean, required
    - `listenUrl` string — This is the URL where the assistant's calls can be listened to in real-time. To enable, set `assistant.monitorPlan.listenEnabled` to `true`.
    - `controlUrl` string — This is the URL where the assistant's calls can be controlled in real-time. To enable, set `assistant.monitorPlan.controlEnabled` to `true`.
  - `artifact` Artifact
    - `messages` union[] — These are the messages that were spoken during the call.
      - union
        - UserMessage
          - `role` string, required — The role of the user in the conversation.
          - `message` string, required — The message content from the user.
          - `time` number, required — The timestamp when the message was sent.
          - `endTime` number, required — The timestamp when the message ended.
          - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
          - `duration` number — The duration of the message in seconds.
          - `isFiltered` boolean — Indicates if the message was filtered for security reasons.
          - `detectedThreats` string[] — List of detected security threats if the message was filtered.
          - `originalMessage` string — The original message before filtering (only included if content was filtered).
          - `metadata` object — The metadata associated with the message. Currently used to store the transcriber's word level confidence.
          - `speakerLabel` string — Stable speaker label for diarized user speakers (e.g., "Speaker 1").
        - SystemMessage
          - `role` string, required — The role of the system in the conversation.
          - `message` string, required — The message content from the system.
          - `time` number, required — The timestamp when the message was sent.
          - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
        - BotMessage
          - `role` string, required — The role of the bot in the conversation.
          - `message` string, required — The message content from the bot.
          - `time` number, required — The timestamp when the message was sent.
          - `endTime` number, required — The timestamp when the message ended.
          - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
          - `source` string — The source of the message.
          - `duration` number — The duration of the message in seconds.
          - `assistantName` string — The name of the assistant that produced this message. In a squad or handoff call this is the specific sub-agent active when the message was spoken, letting the transcript label each message by speaker.
          - `assistantId` string — The ID of the assistant that produced this message. Stable reference for the assistant named in `assistantName`.
        - ToolCallMessage
          - `role` string, required — The role of the tool call in the conversation.
          - `toolCalls` object[], required — The list of tool calls made during the conversation.
          - `message` string, required — The message content for the tool call.
          - `time` number, required — The timestamp when the message was sent.
          - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
        - ToolCallResultMessage
          - `role` string, required — The role of the tool call result in the conversation.
          - `toolCallId` string, required — The ID of the tool call.
          - `name` string, required — The name of the tool that returned the result.
          - `result` string, required — The result of the tool call in JSON format.
          - `time` number, required — The timestamp when the message was sent.
          - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
          - `metadata` object — The metadata for the tool call result.
          - `warnings` ToolCallResultMessageWarning[] — Warnings raised for this tool call result, e.g. when the response is larger than recommended for voice AI context windows.
            - `type` 'oversized-tool-response', required — The kind of warning. Currently: - `oversized-tool-response`: the tool's serialized response exceeded the recommended size and is likely to bloat the model context, increasing latency and risking truncation of earlier instructions.
            - `tokenCount` number, required — The estimated number of tokens in the serialized tool response.
            - `threshold` number, required — The threshold (in tokens) above which the warning is raised.
    - `messagesOpenAIFormatted` OpenAIMessage[] — These are the messages that were spoken during the call, formatted for OpenAI.
      - `content` string, nullable, required
      - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
    - `skippedStructuredOutputs` object — Structured outputs skipped because their conditions were not met, keyed by saved or runtime output ID.
    - `transfers` TransferArtifact[] — These are the transfer records for the call's transfer attempts (warm and blind), including destination, mode, and status. Warm transfer records also include transcripts and messages.
      - `destination` union, required — The transfer destination (phone number or SIP URI).
        - TransferDestinationNumber
          - `message` union — This is spoken to the customer before connecting them to the destination. Usage: - If this is not provided and transfer tool messages is not provided, default is "Transferring the call now". - If set to "", nothing is spoken. This is useful when you want to silently transfer. This is especially useful when transferring between assistants in a squad. In this scenario, you likely also want to set `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message` for the destination assistant. This accepts a string or a ToolMessageStart class. Latter is useful if you want to specify multiple messages for different languages through the `contents` field.
            - string
            - CustomMessage
              - …
          - `type` 'number', required
          - `numberE164CheckEnabled` boolean — This is the flag to toggle the E164 check for the `number` field. This is an advanced property which should be used if you know your use case requires it. Use cases: - `false`: To allow non-E164 numbers like `+001234567890`, `1234`, or `abc`. This is useful for dialing out to non-E164 numbers on your SIP trunks. - `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls. If `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\+?[a-zA-Z0-9]+$/`). @default true (E164 check is enabled)
          - `number` string, required — This is the phone number to transfer the call to.
          - `extension` string — This is the extension to dial after transferring the call to the `number`.
          - `callerId` string — This is the caller ID to use when transferring the call to the `number`. Usage: - If not provided, the caller ID will be the number the call is coming **from**. Example: a customer with number +14151111111 calls in to and the assistant transfers out to +16470000000. +16470000000 will see +14151111111 as the caller. For inbound calls, the caller ID is the customer's number. For outbound calls, the caller ID is the phone number of the assistant. - To change this behavior, provide a `callerId`. - Set to '{{customer.number}}' to always use the customer's number as the caller ID. - Set to '{{phoneNumber.number}}' to always use the phone number of the assistant as the caller ID. - Set to any E164 number to always use that number as the caller ID. This needs to be a number that is owned or verified by your Transport provider like Twilio. For Twilio, you can read up more here: https://www.twilio.com/docs/voice/twiml/dial#callerid
          - `transferPlan` TransferPlan
            - `mode` 'blind-transfer' | 'blind-transfer-add-summary-to-sip-header' | 'warm-transfer-say-message' | 'warm-transfer-say-summary' | 'warm-transfer-twiml' | 'warm-transfer-wait-for-operator-to-speak-first-and-then-say-message' | 'warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary' | 'warm-transfer-experimental', required — This configures how transfer is executed and the experience of the destination party receiving the call. Usage: - `blind-transfer`: The assistant forwards the call to the destination without any message or summary. - `blind-transfer-add-summary-to-sip-header`: The assistant forwards the call to the destination and adds a SIP header X-Transfer-Summary to the call to include the summary. - `warm-transfer-say-message`: The assistant dials the destination, delivers the `message` to the destination party, connects the customer, and leaves the call. - `warm-transfer-say-summary`: The assistant dials the destination, provides a summary of the call to the destination party, connects the customer, and leaves the call. - `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`: The assistant dials the destination, waits for the operator to speak, delivers the `message` to the destination party, and then connects the customer. - `warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary`: The assistant dials the destination, waits for the operator to speak, provides a summary of the call to the destination party, and then connects the customer. - `warm-transfer-twiml`: The assistant dials the destination, executes the twiml instructions on the destination call leg, connects the customer, and leaves the call. - `warm-transfer-experimental`: The assistant puts the customer on hold, dials the destination, and if the destination answers (and is human), delivers a message or summary before connecting the customer. If the destination is unreachable or not human (e.g., with voicemail detection), the assistant delivers the `fallbackMessage` to the customer and optionally ends the call. @default 'blind-transfer'
            - `message` union — This is the message the assistant will deliver to the destination party before connecting the customer. Usage: - Used only when `mode` is `blind-transfer-add-summary-to-sip-header`, `warm-transfer-say-message`, `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`, or `warm-transfer-experimental`.
              - …
            - `timeout` number — This is the timeout in seconds for the warm-transfer-wait-for-operator-to-speak-first-and-then-say-message/summary @default 60
            - `sipVerb` object — This specifies the SIP verb to use while transferring the call. - 'refer': Uses SIP REFER to transfer the call (default) - 'bye': Ends current call with SIP BYE - 'dial': Uses SIP DIAL to transfer the call
            - `dialTimeout` number — This sets the timeout for the dial operation in seconds. This is the duration the call will ring before timing out. Only applicable when `sipVerb='dial'`. Not applicable for SIP REFER or BYE. @default 60
            - `holdAudioUrl` string — This is the URL to an audio file played while the customer is on hold during transfer. Usage: - Used only when `mode` is `warm-transfer-experimental`. - Used when transferring calls to play hold audio for the customer. - Must be a publicly accessible URL to an audio file. - Supported formats: MP3 and WAV. - If not provided, the default hold audio will be used.
            - `transferCompleteAudioUrl` string — This is the URL to an audio file played after the warm transfer message or summary is delivered to the destination party. It can be used to play a custom sound like 'beep' to notify that the transfer is complete. Usage: - Used only when `mode` is `warm-transfer-experimental`. - Used when transferring calls to play hold audio for the destination party. - Must be a publicly accessible URL to an audio file. - Supported formats: MP3 and WAV.
            - `contextEngineeringPlan` union — This is the plan for manipulating the message context before initiating the warm transfer. Usage: - Used only when `mode` is `warm-transfer-experimental`. - These messages will automatically be added to the transferAssistant's system message. - If 'none', we will not add any transcript to the transferAssistant's system message. - If you want to provide your own messages, use transferAssistant.model.messages instead. @default { type: 'all' }
              - …
            - `twiml` string — This is the TwiML instructions to execute on the destination call leg before connecting the customer. Usage: - Used only when `mode` is `warm-transfer-twiml`. - Supports only `Play`, `Say`, `Gather`, `Hangup` and `Pause` verbs. - Maximum length is 4096 characters. Example: ``` <Say voice="alice" language="en-US">Hello, transferring a customer to you.</Say> <Pause length="2"/> <Say>They called about billing questions.</Say> ```
            - `summaryPlan` SummaryPlan
              - …
            - `sipHeadersInReferToEnabled` boolean — This flag includes the sipHeaders from above in the refer to sip uri as url encoded query params. @default false
            - `fallbackPlan` TransferFallbackPlan
              - …
          - `name` string — This is the name of the transfer destination. This is just for your own reference. Usage: - Optional. Stored with the destination wherever it is supplied. For `number` and `sip` destinations it is also persisted on the transfer record in the call artifact after a transfer and displayed in the dashboard call log (on the transfer divider in the transcript view) alongside the destination. When omitted, everything behaves exactly as before. - Display-only. Unlike `description`, it is never included in prompts or tool descriptions and has no effect on model behavior or destination choice.
          - `description` string — This is the description of the destination, used by the AI to choose when and how to transfer the call.
        - TransferDestinationSip
          - `message` union — This is spoken to the customer before connecting them to the destination. Usage: - If this is not provided and transfer tool messages is not provided, default is "Transferring the call now". - If set to "", nothing is spoken. This is useful when you want to silently transfer. This is especially useful when transferring between assistants in a squad. In this scenario, you likely also want to set `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message` for the destination assistant. This accepts a string or a ToolMessageStart class. Latter is useful if you want to specify multiple messages for different languages through the `contents` field.
            - string
            - CustomMessage
              - …
          - `type` 'sip', required
          - `sipUri` string, required — This is the SIP URI to transfer the call to.
          - `callerId` string — This is the caller ID to use when transferring the call to the `sipUri`. Usage: - If not provided, the caller ID will be determined by the SIP infrastructure. - Set to '{{customer.number}}' to always use the customer's number as the caller ID. - Set to '{{phoneNumber.number}}' to always use the phone number of the assistant as the caller ID. - Set to any E164 number to always use that number as the caller ID. Only applicable when `transferPlan.sipVerb='dial'`. Not applicable for SIP REFER.
          - `transferPlan` TransferPlan
            - `mode` 'blind-transfer' | 'blind-transfer-add-summary-to-sip-header' | 'warm-transfer-say-message' | 'warm-transfer-say-summary' | 'warm-transfer-twiml' | 'warm-transfer-wait-for-operator-to-speak-first-and-then-say-message' | 'warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary' | 'warm-transfer-experimental', required — This configures how transfer is executed and the experience of the destination party receiving the call. Usage: - `blind-transfer`: The assistant forwards the call to the destination without any message or summary. - `blind-transfer-add-summary-to-sip-header`: The assistant forwards the call to the destination and adds a SIP header X-Transfer-Summary to the call to include the summary. - `warm-transfer-say-message`: The assistant dials the destination, delivers the `message` to the destination party, connects the customer, and leaves the call. - `warm-transfer-say-summary`: The assistant dials the destination, provides a summary of the call to the destination party, connects the customer, and leaves the call. - `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`: The assistant dials the destination, waits for the operator to speak, delivers the `message` to the destination party, and then connects the customer. - `warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary`: The assistant dials the destination, waits for the operator to speak, provides a summary of the call to the destination party, and then connects the customer. - `warm-transfer-twiml`: The assistant dials the destination, executes the twiml instructions on the destination call leg, connects the customer, and leaves the call. - `warm-transfer-experimental`: The assistant puts the customer on hold, dials the destination, and if the destination answers (and is human), delivers a message or summary before connecting the customer. If the destination is unreachable or not human (e.g., with voicemail detection), the assistant delivers the `fallbackMessage` to the customer and optionally ends the call. @default 'blind-transfer'
            - `message` union — This is the message the assistant will deliver to the destination party before connecting the customer. Usage: - Used only when `mode` is `blind-transfer-add-summary-to-sip-header`, `warm-transfer-say-message`, `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`, or `warm-transfer-experimental`.
              - …
            - `timeout` number — This is the timeout in seconds for the warm-transfer-wait-for-operator-to-speak-first-and-then-say-message/summary @default 60
            - `sipVerb` object — This specifies the SIP verb to use while transferring the call. - 'refer': Uses SIP REFER to transfer the call (default) - 'bye': Ends current call with SIP BYE - 'dial': Uses SIP DIAL to transfer the call
            - `dialTimeout` number — This sets the timeout for the dial operation in seconds. This is the duration the call will ring before timing out. Only applicable when `sipVerb='dial'`. Not applicable for SIP REFER or BYE. @default 60
            - `holdAudioUrl` string — This is the URL to an audio file played while the customer is on hold during transfer. Usage: - Used only when `mode` is `warm-transfer-experimental`. - Used when transferring calls to play hold audio for the customer. - Must be a publicly accessible URL to an audio file. - Supported formats: MP3 and WAV. - If not provided, the default hold audio will be used.
            - `transferCompleteAudioUrl` string — This is the URL to an audio file played after the warm transfer message or summary is delivered to the destination party. It can be used to play a custom sound like 'beep' to notify that the transfer is complete. Usage: - Used only when `mode` is `warm-transfer-experimental`. - Used when transferring calls to play hold audio for the destination party. - Must be a publicly accessible URL to an audio file. - Supported formats: MP3 and WAV.
            - `contextEngineeringPlan` union — This is the plan for manipulating the message context before initiating the warm transfer. Usage: - Used only when `mode` is `warm-transfer-experimental`. - These messages will automatically be added to the transferAssistant's system message. - If 'none', we will not add any transcript to the transferAssistant's system message. - If you want to provide your own messages, use transferAssistant.model.messages instead. @default { type: 'all' }
              - …
            - `twiml` string — This is the TwiML instructions to execute on the destination call leg before connecting the customer. Usage: - Used only when `mode` is `warm-transfer-twiml`. - Supports only `Play`, `Say`, `Gather`, `Hangup` and `Pause` verbs. - Maximum length is 4096 characters. Example: ``` <Say voice="alice" language="en-US">Hello, transferring a customer to you.</Say> <Pause length="2"/> <Say>They called about billing questions.</Say> ```
            - `summaryPlan` SummaryPlan
              - …
            - `sipHeadersInReferToEnabled` boolean — This flag includes the sipHeaders from above in the refer to sip uri as url encoded query params. @default false
            - `fallbackPlan` TransferFallbackPlan
              - …
          - `sipHeaders` object — These are custom headers to be added to SIP refer during transfer call.
          - `name` string — This is the name of the transfer destination. This is just for your own reference. Usage: - Optional. Stored with the destination wherever it is supplied. For `number` and `sip` destinations it is also persisted on the transfer record in the call artifact after a transfer and displayed in the dashboard call log (on the transfer divider in the transcript view) alongside the destination. When omitted, everything behaves exactly as before. - Display-only. Unlike `description`, it is never included in prompts or tool descriptions and has no effect on model behavior or destination choice.
          - `description` string — This is the description of the destination, used by the AI to choose when and how to transfer the call.
      - `mode` 'blind-transfer' | 'blind-transfer-add-summary-to-sip-header' | 'warm-transfer-say-message' | 'warm-transfer-say-summary' | 'warm-transfer-twiml' | 'warm-transfer-wait-for-operator-to-speak-first-and-then-say-message' | 'warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary' | 'warm-transfer-experimental' — The transfer mode (e.g. warm-transfer-experimental, blind-transfer).
      - `transcript` string — Flat-text transcript / announcement preview of the transfer.
      - `status` 'connected' | 'no-answer' | 'busy' | 'voicemail' | 'failed' | 'completed' | 'cancelled' — The terminal status of the transfer, rendered as the status line.
      - `messages` union[] — The agent↔operator conversation captured during a warm-transfer-experimental, rendered as bubbles.
        - union
          - UserMessage
            - `role` string, required — The role of the user in the conversation.
            - `message` string, required — The message content from the user.
            - `time` number, required — The timestamp when the message was sent.
            - `endTime` number, required — The timestamp when the message ended.
            - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
            - `duration` number — The duration of the message in seconds.
            - `isFiltered` boolean — Indicates if the message was filtered for security reasons.
            - `detectedThreats` string[] — List of detected security threats if the message was filtered.
            - `originalMessage` string — The original message before filtering (only included if content was filtered).
            - `metadata` object — The metadata associated with the message. Currently used to store the transcriber's word level confidence.
            - `speakerLabel` string — Stable speaker label for diarized user speakers (e.g., "Speaker 1").
          - SystemMessage
            - `role` string, required — The role of the system in the conversation.
            - `message` string, required — The message content from the system.
            - `time` number, required — The timestamp when the message was sent.
            - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
          - BotMessage
            - `role` string, required — The role of the bot in the conversation.
            - `message` string, required — The message content from the bot.
            - `time` number, required — The timestamp when the message was sent.
            - `endTime` number, required — The timestamp when the message ended.
            - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
            - `source` string — The source of the message.
            - `duration` number — The duration of the message in seconds.
            - `assistantName` string — The name of the assistant that produced this message. In a squad or handoff call this is the specific sub-agent active when the message was spoken, letting the transcript label each message by speaker.
            - `assistantId` string — The ID of the assistant that produced this message. Stable reference for the assistant named in `assistantName`.
          - ToolCallMessage
            - `role` string, required — The role of the tool call in the conversation.
            - `toolCalls` object[], required — The list of tool calls made during the conversation.
              - …
            - `message` string, required — The message content for the tool call.
            - `time` number, required — The timestamp when the message was sent.
            - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
          - ToolCallResultMessage
            - `role` string, required — The role of the tool call result in the conversation.
            - `toolCallId` string, required — The ID of the tool call.
            - `name` string, required — The name of the tool that returned the result.
            - `result` string, required — The result of the tool call in JSON format.
            - `time` number, required — The timestamp when the message was sent.
            - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
            - `metadata` object — The metadata for the tool call result.
            - `warnings` ToolCallResultMessageWarning[] — Warnings raised for this tool call result, e.g. when the response is larger than recommended for voice AI context windows.
              - …
    - `recordingUrl` string — This is the recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`.
    - `stereoRecordingUrl` string — This is the stereo recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`.
    - `videoRecordingUrl` string — This is video recording url for the call. To enable, set `assistant.artifactPlan.videoRecordingEnabled`.
    - `videoRecordingStartDelaySeconds` number — This is video recording start delay in ms. To enable, set `assistant.artifactPlan.videoRecordingEnabled`. This can be used to align the playback of the recording with artifact.messages timestamps.
    - `recording` Recording
      - `stereoUrl` string — This is the stereo recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`.
      - `videoUrl` string — This is the video recording url for the call. To enable, set `assistant.artifactPlan.videoRecordingEnabled`.
      - `videoRecordingStartDelaySeconds` number — This is video recording start delay in ms. To enable, set `assistant.artifactPlan.videoRecordingEnabled`. This can be used to align the playback of the recording with artifact.messages timestamps.
      - `mono` Mono
        - `combinedUrl` string — This is the combined recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`.
        - `assistantUrl` string — This is the mono recording url for the assistant. To enable, set `assistant.artifactPlan.recordingEnabled`.
        - `customerUrl` string — This is the mono recording url for the customer. To enable, set `assistant.artifactPlan.recordingEnabled`.
    - `transcript` string — This is the transcript of the call. This is derived from `artifact.messages` but provided for convenience.
    - `pcapUrl` string — This is the packet capture url for the call. This is only available for `phone` type calls where phone number's provider is `vapi` or `byo-phone-number`.
    - `logUrl` string — This is the url for the call logs. This includes all logging output during the call for debugging purposes.
    - `nodes` NodeArtifact[] — This is the history of workflow nodes that were executed during the call.
      - `messages` union[] — These are the messages that were spoken during the node.
        - union
          - UserMessage
            - `role` string, required — The role of the user in the conversation.
            - `message` string, required — The message content from the user.
            - `time` number, required — The timestamp when the message was sent.
            - `endTime` number, required — The timestamp when the message ended.
            - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
            - `duration` number — The duration of the message in seconds.
            - `isFiltered` boolean — Indicates if the message was filtered for security reasons.
            - `detectedThreats` string[] — List of detected security threats if the message was filtered.
            - `originalMessage` string — The original message before filtering (only included if content was filtered).
            - `metadata` object — The metadata associated with the message. Currently used to store the transcriber's word level confidence.
            - `speakerLabel` string — Stable speaker label for diarized user speakers (e.g., "Speaker 1").
          - SystemMessage
            - `role` string, required — The role of the system in the conversation.
            - `message` string, required — The message content from the system.
            - `time` number, required — The timestamp when the message was sent.
            - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
          - BotMessage
            - `role` string, required — The role of the bot in the conversation.
            - `message` string, required — The message content from the bot.
            - `time` number, required — The timestamp when the message was sent.
            - `endTime` number, required — The timestamp when the message ended.
            - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
            - `source` string — The source of the message.
            - `duration` number — The duration of the message in seconds.
            - `assistantName` string — The name of the assistant that produced this message. In a squad or handoff call this is the specific sub-agent active when the message was spoken, letting the transcript label each message by speaker.
            - `assistantId` string — The ID of the assistant that produced this message. Stable reference for the assistant named in `assistantName`.
          - ToolCallMessage
            - `role` string, required — The role of the tool call in the conversation.
            - `toolCalls` object[], required — The list of tool calls made during the conversation.
              - …
            - `message` string, required — The message content for the tool call.
            - `time` number, required — The timestamp when the message was sent.
            - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
          - ToolCallResultMessage
            - `role` string, required — The role of the tool call result in the conversation.
            - `toolCallId` string, required — The ID of the tool call.
            - `name` string, required — The name of the tool that returned the result.
            - `result` string, required — The result of the tool call in JSON format.
            - `time` number, required — The timestamp when the message was sent.
            - `secondsFromStart` number, required — The number of seconds from the start of the conversation.
            - `metadata` object — The metadata for the tool call result.
            - `warnings` ToolCallResultMessageWarning[] — Warnings raised for this tool call result, e.g. when the response is larger than recommended for voice AI context windows.
              - …
      - `nodeName` string — This is the node name.
      - `variableValues` object — These are the variable values that were extracted from the node.
    - `assistantActivations` AssistantActivation[] — Ordered list of assistants that were active during the call, including after transfers and handoffs.
      - `assistantVersion` string, nullable — This is the version label (e.g. `v3`) of the assistant active when the activation row was recorded. `null` for inline assistants, orgs not on assistant versioning, and parent assistants that have not yet been published under it.
      - `assistantName` string, required — This is the name of the assistant that was active during the call.
      - `assistantId` string — This is the ID of the assistant that was active during the call.
    - `variableValues` object — These are the variable values at the end of the workflow execution.
    - `performanceMetrics` PerformanceMetrics
      - `turnLatencies` TurnLatency[] — These are the individual latencies for each turn.
        - `modelLatency` number — This is the model latency for the first token.
        - `voiceLatency` number — This is the voice latency from the model output.
        - `transcriberLatency` number — This is the transcriber latency from the user speech.
        - `endpointingLatency` number — This is the endpointing latency.
        - `turnLatency` number — This is the latency for the whole turn.
      - `modelLatencyAverage` number — This is the average latency for the model to output the first token.
      - `voiceLatencyAverage` number — This is the average latency for the text to speech.
      - `transcriberLatencyAverage` number — This is the average latency for the transcriber.
      - `endpointingLatencyAverage` number — This is the average latency for the endpointing.
      - `turnLatencyAverage` number — This is the average latency for complete turns.
      - `fromTransportLatencyAverage` number — This is the average latency for packets received from the transport provider in milliseconds.
      - `toTransportLatencyAverage` number — This is the average latency for packets sent to the transport provider in milliseconds.
      - `numUserInterrupted` number — This is the number of times the user was interrupted by the assistant during the call.
      - `numAssistantInterrupted` number — This is the number of times the assistant was interrupted by the user during the call.
    - `structuredOutputs` object — These are the structured outputs that will be extracted from the call. To enable, set `assistant.artifactPlan.structuredOutputIds` with the IDs of the structured outputs you want to extract.
    - `scorecards` object — These are the scorecards that have been evaluated based on the structured outputs extracted during the call. To enable, set `assistant.artifactPlan.scorecardIds` or `assistant.artifactPlan.scorecards` with the IDs or objects of the scorecards you want to evaluate.
    - `structuredOutputsLastUpdatedAt` string, date-time — This is when the structured outputs were last updated
    - `presignedMonoUrl` string — This is a presigned URL to download the mono recording without authentication. Populated on API responses and server messages; never stored. Expires at `presignedUrlsExpiresAt` — after that, use `GET /call/{id}/mono-recording`.
    - `presignedStereoUrl` string — This is a presigned URL to download the stereo recording without authentication. Expires at `presignedUrlsExpiresAt` — after that, use `GET /call/{id}/stereo-recording`.
    - `presignedVideoUrl` string — This is a presigned URL to download the video recording without authentication. Expires at `presignedUrlsExpiresAt` — after that, use `GET /call/{id}/video-recording`.
    - `presignedAssistantUrl` string — This is a presigned URL to download the assistant-channel mono recording without authentication. Expires at `presignedUrlsExpiresAt`.
    - `presignedCustomerUrl` string — This is a presigned URL to download the customer-channel mono recording without authentication. Expires at `presignedUrlsExpiresAt`.
    - `presignedPcapUrl` string — This is a presigned URL to download the packet capture without authentication. Expires at `presignedUrlsExpiresAt`.
    - `presignedLogUrl` string — This is a presigned URL to download the call logs without authentication. Expires at `presignedUrlsExpiresAt`.
    - `presignedUrlsExpiresAt` string — This is when the presigned URLs above expire, as an ISO 8601 timestamp. The raw `*Url` fields remain the stable identifiers and do not expire. Presigned URLs are regenerated per response and per webhook delivery, so values differ across retries.
  - `compliance` Compliance
    - `recordingConsent` RecordingConsent
      - `type` 'stay-on-line' | 'verbal', required — This is the type of recording consent.
      - `grantedAt` string, date-time — This is the date and time the recording consent was granted. If not specified, it means the recording consent was not granted.
  - `phoneCallProviderId` string — The ID of the call as provided by the phone number service. callSid in Twilio. conversationUuid in Vonage. callControlId in Telnyx. Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type.
  - `campaignId` string — This is the campaign ID that the call belongs to.
  - `assistantId` string — This is the assistant ID that will be used for the call. To use a transient assistant, use `assistant` instead. To start a call with: - Assistant, use `assistantId` or `assistant` - Squad, use `squadId` or `squad` - Workflow, use `workflowId` or `workflow`
  - `assistant` CreateAssistantDTO
    - `transcriber` union — These are the options for the assistant's transcriber.
      - AssemblyAITranscriber
        - `provider` 'assembly-ai', required — This is the transcription provider that will be used.
        - `language` 'multi' | 'en' — This is the language that will be set for the transcription.
        - `confidenceThreshold` number — Transcripts below this confidence threshold will be discarded. @default 0.4
        - `formatTurns` boolean — This enables formatting of transcripts. @default true
        - `endOfTurnConfidenceThreshold` number — This is the end of turn confidence threshold. The minimum confidence that the end of turn is detected. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @min 0 @max 1 @default 0.7
        - `minEndOfTurnSilenceWhenConfident` number — This is the minimum end of turn silence when confident in milliseconds. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @default 160
        - `wordFinalizationMaxWaitTime` number
        - `maxTurnSilence` number — This is the maximum turn silence time in milliseconds. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @default 400
        - `vadAssistedEndpointingEnabled` boolean — Use VAD to assist with endpointing decisions from the transcriber. When enabled, transcriber endpointing will be buffered if VAD detects the user is still speaking, preventing premature turn-taking. When disabled, transcriber endpointing will be used immediately regardless of VAD state, allowing for quicker but more aggressive turn-taking. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @default true
        - `mode` 'max_accuracy' | 'min_latency' | 'balanced' — This is the transcription mode used by the `universal-3-5-pro` speech model. Only applies to the `universal-3-5-pro` speech model. @default 'balanced'
        - `prompt` string — This is a prompt that provides additional context to the transcription model. Only applies to the `universal-3-5-pro` speech model.
        - `agentContext` string — This is context about the voice agent that guides the transcription model. Only applies to the `universal-3-5-pro` speech model.
        - `languageCodes` string[] — These are language codes used to steer automatic language detection. Only applies to the `universal-3-5-pro` speech model.
        - `speechModel` 'universal-streaming-english' | 'universal-streaming-multilingual' | 'universal-3-5-pro' — This is the speech model used for the streaming session. Keyterms prompting is supported on universal-streaming-english and universal-3-5-pro. universal-3-5-pro is AssemblyAI's most accurate voice-agent model. @default 'universal-streaming-english'
        - `realtimeUrl` string — The WebSocket URL that the transcriber connects to.
        - `wordBoost` string[] — Add up to 2500 characters of custom vocabulary.
        - `keytermsPrompt` string[] — Keyterms prompting improves recognition accuracy for specific words and phrases. Can include up to 100 keyterms, each up to 50 characters. Costs an additional $0.04/hour on universal-streaming-english and is included at no extra cost on universal-3-5-pro.
        - `endUtteranceSilenceThreshold` number — The duration of the end utterance silence threshold in milliseconds.
        - `disablePartialTranscripts` boolean — Disable partial transcripts. Set to `true` to not receive partial transcripts. Defaults to `false`.
        - `fallbackPlan` FallbackTranscriberPlan
          - `transcribers` union[]
            - union
              - …
      - AzureSpeechTranscriber
        - `provider` 'azure', required — This is the transcription provider that will be used.
        - `language` 'af-ZA' | 'am-ET' | 'ar-AE' | 'ar-BH' | 'ar-DZ' | 'ar-EG' | 'ar-IL' | 'ar-IQ' | 'ar-JO' | 'ar-KW' | 'ar-LB' | 'ar-LY' | 'ar-MA' | 'ar-OM' | 'ar-PS' | 'ar-QA' | 'ar-SA' | 'ar-SY' | 'ar-TN' | 'ar-YE' | 'az-AZ' | 'bg-BG' | 'bn-IN' | 'bs-BA' | 'ca-ES' | 'cs-CZ' | 'cy-GB' | 'da-DK' | 'de-AT' | 'de-CH' | 'de-DE' | 'el-GR' | 'en-AU' | 'en-CA' | 'en-GB' | 'en-GH' | 'en-HK' | 'en-IE' | 'en-IN' | 'en-KE' | 'en-NG' | 'en-NZ' | 'en-PH' | 'en-SG' | 'en-TZ' | 'en-US' | 'en-ZA' | 'es-AR' | 'es-BO' | 'es-CL' | 'es-CO' | 'es-CR' | 'es-CU' | 'es-DO' | 'es-EC' | 'es-ES' | 'es-GQ' | 'es-GT' | 'es-HN' | 'es-MX' | 'es-NI' | 'es-PA' | 'es-PE' | 'es-PR' | 'es-PY' | 'es-SV' | 'es-US' | 'es-UY' | 'es-VE' | 'et-EE' | 'eu-ES' | 'fa-IR' | 'fi-FI' | 'fil-PH' | 'fr-BE' | 'fr-CA' | 'fr-CH' | 'fr-FR' | 'ga-IE' | 'gl-ES' | 'gu-IN' | 'he-IL' | 'hi-IN' | 'hr-HR' | 'hu-HU' | 'hy-AM' | 'id-ID' | 'is-IS' | 'it-CH' | 'it-IT' | 'ja-JP' | 'jv-ID' | 'ka-GE' | 'kk-KZ' | 'km-KH' | 'kn-IN' | 'ko-KR' | 'lo-LA' | 'lt-LT' | 'lv-LV' | 'mk-MK' | 'ml-IN' | 'mn-MN' | 'mr-IN' | 'ms-MY' | 'mt-MT' | 'my-MM' | 'nb-NO' | 'ne-NP' | 'nl-BE' | 'nl-NL' | 'pa-IN' | 'pl-PL' | 'ps-AF' | 'pt-BR' | 'pt-PT' | 'ro-RO' | 'ru-RU' | 'si-LK' | 'sk-SK' | 'sl-SI' | 'so-SO' | 'sq-AL' | 'sr-RS' | 'sv-SE' | 'sw-KE' | 'sw-TZ' | 'ta-IN' | 'te-IN' | 'th-TH' | 'tr-TR' | 'uk-UA' | 'ur-IN' | 'uz-UZ' | 'vi-VN' | 'wuu-CN' | 'yue-CN' | 'zh-CN' | 'zh-CN-shandong' | 'zh-CN-sichuan' | 'zh-HK' | 'zh-TW' | 'zu-ZA' — This is the language that will be set for the transcription. The list of languages Azure supports can be found here: https://learn.microsoft.com/en-us/azure/ai-services/speech-service/language-support?tabs=stt
        - `segmentationStrategy` 'Default' | 'Time' | 'Semantic' — Controls how phrase boundaries are detected, enabling either simple time/silence heuristics or more advanced semantic segmentation.
        - `segmentationSilenceTimeoutMs` number — Duration of detected silence after which the service finalizes a phrase. Configure to adjust sensitivity to pauses in speech.
        - `segmentationMaximumTimeMs` number — Maximum duration a segment can reach before being cut off when using time-based segmentation.
        - `fallbackPlan` FallbackTranscriberPlan
          - `transcribers` union[]
            - union
              - …
      - CustomTranscriber
        - `provider` 'custom-transcriber', required — This is the transcription provider that will be used. Use `custom-transcriber` for providers that are not natively supported.
        - `server` Server, required
          - `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
            - `type` object, required — This is the type of backoff plan to use. Defaults to fixed. @default fixed
            - `maxRetries` number, required — This is the maximum number of retries to attempt if the request fails. Defaults to 0 (no retries). @default 0
            - `baseDelaySeconds` number, required — This is the base delay in seconds. For linear backoff, this is the delay between each retry. For exponential backoff, this is the initial delay.
            - `excludedStatusCodes` object[] — This is the excluded status codes. If the response status code is in this list, the request will not be retried. By default, the request will be retried for any non-2xx status code.
              - …
        - `fallbackPlan` FallbackTranscriberPlan
          - `transcribers` union[]
            - union
              - …
      - DeepgramTranscriber
        - `provider` 'deepgram', required — This is the transcription provider that will be used.
        - `model` union — This is the Deepgram model that will be used. A list of models can be found here: https://developers.deepgram.com/docs/models-languages-overview
          - 'nova-3' | 'nova-3-general' | 'nova-3-medical' | 'nova-2' | 'nova-2-general' | 'nova-2-meeting' | 'nova-2-phonecall' | 'nova-2-finance' | 'nova-2-conversationalai' | 'nova-2-voicemail' | 'nova-2-video' | 'nova-2-medical' | 'nova-2-drivethru' | 'nova-2-automotive' | 'nova' | 'nova-general' | 'nova-phonecall' | 'nova-medical' | 'enhanced' | 'enhanced-general' | 'enhanced-meeting' | 'enhanced-phonecall' | 'enhanced-finance' | 'base' | 'base-general' | 'base-meeting' | 'base-phonecall' | 'base-finance' | 'base-conversationalai' | 'base-voicemail' | 'base-video' | 'whisper' | 'flux-general-en' | 'flux-general-multi'
          - string
        - `language` 'ar' | 'az' | 'ba' | 'be' | 'bg' | 'bn' | 'br' | 'bs' | 'ca' | 'cs' | 'da' | 'da-DK' | 'de' | 'de-CH' | 'el' | 'en' | 'en-AU' | 'en-CA' | 'en-GB' | 'en-IE' | 'en-IN' | 'en-NZ' | 'en-US' | 'es' | 'es-419' | 'es-LATAM' | 'et' | 'eu' | 'fa' | 'fi' | 'fr' | 'fr-CA' | 'ha' | 'haw' | 'he' | 'hi' | 'hi-Latn' | 'hr' | 'hu' | 'id' | 'is' | 'it' | 'ja' | 'jw' | 'kn' | 'ko' | 'ko-KR' | 'ln' | 'lt' | 'lv' | 'mk' | 'mr' | 'ms' | 'multi' | 'nl' | 'nl-BE' | 'no' | 'pl' | 'pt' | 'pt-BR' | 'pt-PT' | 'ro' | 'ru' | 'sk' | 'sl' | 'sn' | 'so' | 'sr' | 'su' | 'sv' | 'sv-SE' | 'ta' | 'taq' | 'te' | 'th' | 'th-TH' | 'tl' | 'tr' | 'tt' | 'uk' | 'ur' | 'vi' | 'yo' | 'zh' | 'zh-CN' | 'zh-HK' | 'zh-Hans' | 'zh-Hant' | 'zh-TW' — This is the language that will be set for the transcription. The list of languages Deepgram supports can be found here: https://developers.deepgram.com/docs/models-languages-overview
        - `smartFormat` boolean — This will be use smart format option provided by Deepgram. It's default disabled because it can sometimes format numbers as times but it's getting better.
        - `mipOptOut` boolean — If set to true, this will add mip_opt_out=true as a query parameter of all API requests. See https://developers.deepgram.com/docs/the-deepgram-model-improvement-partnership-program#want-to-opt-out This will only be used if you are using your own Deepgram API key. @default false
        - `numerals` boolean — If set to true, this will cause deepgram to convert spoken numbers to literal numerals. For example, "my phone number is nine-seven-two..." would become "my phone number is 972..." @default false
        - `profanityFilter` boolean — If set to true, Deepgram will replace profanity in transcripts with surrounding asterisks, e.g. "f***". @default false
        - `redaction` string[] — Enables redaction of sensitive information from transcripts. Options include: - "pci": Redacts credit card numbers, expiration dates, and CVV. - "pii": Redacts personally identifiable information (names, locations, identifying numbers, etc.). - "phi": Redacts protected health information (medical conditions, drugs, injuries, etc.). - "numbers": Redacts numerical and identifying entities (dates, account numbers, SSNs, etc.). Multiple values can be provided to redact different categories simultaneously. Redacted content is replaced with entity labels like [CREDIT_CARD_1], [SSN_1], etc. See https://developers.deepgram.com/docs/redaction for details.
        - `confidenceThreshold` number — Transcripts below this confidence threshold will be discarded. @default 0.4
        - `eotThreshold` number — End-of-turn confidence required to finish a turn. Only used with Flux models. @default 0.7
        - `eotTimeoutMs` number — A turn will be finished when this much time has passed after speech, regardless of EOT confidence. Only used with Flux models. @default 5000
        - `languages` string[] — Language hints to bias Flux Multilingual (`flux-general-multi`) toward specific languages. Provide BCP-47 language codes (e.g. "en", "es", "fr"). Multiple hints can be given for multilingual or code-switching scenarios. Omit for auto-detection. Only used with `flux-general-multi`.
        - `keywords` string[] — These keywords are passed to the transcription model to help it pick up use-case specific words. Anything that may not be a common word, like your company name, should be added here.
        - `keyterm` string[] — Keyterm Prompting allows you improve Keyword Recall Rate (KRR) for important keyterms or phrases up to 90%.
        - `endpointing` number — This is the timeout after which Deepgram will send transcription on user silence. You can read in-depth documentation here: https://developers.deepgram.com/docs/endpointing. Here are the most important bits: - Defaults to 10. This is recommended for most use cases to optimize for latency. - 10 can cause some missing transcriptions since because of the shorter context. This mostly happens for one-word utterances. For those uses cases, it's recommended to try 300. It will add a bit of latency but the quality and reliability of the experience will be better. - If neither 10 nor 300 work, contact support@vapi.ai and we'll find another solution. @default 10
        - `fallbackPlan` FallbackTranscriberPlan
          - `transcribers` union[]
            - union
              - …
      - ElevenLabsTranscriber
        - `provider` '11labs', required — This is the transcription provider that will be used.
        - `model` 'scribe_v1' | 'scribe_v2' | 'scribe_v2_realtime' — This is the model that will be used for the transcription.
        - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu' — This is the language that will be used for the transcription.
        - `silenceThresholdSeconds` number — This is the number of seconds of silence before VAD commits (0.3-3.0).
        - `confidenceThreshold` number — This is the VAD sensitivity (0.1-0.9, lower indicates more sensitive).
        - `minSpeechDurationMs` number — This is the minimum speech duration for VAD (50-2000ms).
        - `minSilenceDurationMs` number — This is the minimum silence duration for VAD (50-2000ms).
        - `fallbackPlan` FallbackTranscriberPlan
          - `transcribers` union[]
            - union
              - …
      - GladiaTranscriber
        - `provider` 'gladia', required — This is the transcription provider that will be used.
        - `model` 'fast' | 'accurate' | 'solaria-1' — This is the Gladia model that will be used. Default is 'fast'
        - `languageBehaviour` 'manual' | 'automatic single language' | 'automatic multiple languages' — Defines how the transcription model detects the audio language. Default value is 'automatic single language'.
        - `language` 'af' | 'sq' | 'am' | 'ar' | 'hy' | 'as' | 'az' | 'ba' | 'eu' | 'be' | 'bn' | 'bs' | 'br' | 'bg' | 'ca' | 'zh' | 'hr' | 'cs' | 'da' | 'nl' | 'en' | 'et' | 'fo' | 'fi' | 'fr' | 'gl' | 'ka' | 'de' | 'el' | 'gu' | 'ht' | 'ha' | 'haw' | 'he' | 'hi' | 'hu' | 'is' | 'id' | 'it' | 'ja' | 'jv' | 'kn' | 'kk' | 'km' | 'ko' | 'lo' | 'la' | 'lv' | 'ln' | 'lt' | 'lb' | 'mk' | 'mg' | 'ms' | 'ml' | 'mt' | 'mi' | 'mr' | 'mn' | 'my' | 'ne' | 'no' | 'nn' | 'oc' | 'ps' | 'fa' | 'pl' | 'pt' | 'pa' | 'ro' | 'ru' | 'sa' | 'sr' | 'sn' | 'sd' | 'si' | 'sk' | 'sl' | 'so' | 'es' | 'su' | 'sw' | 'sv' | 'tl' | 'tg' | 'ta' | 'tt' | 'te' | 'th' | 'bo' | 'tr' | 'tk' | 'uk' | 'ur' | 'uz' | 'vi' | 'cy' | 'yi' | 'yo' — Defines the language to use for the transcription. Required when languageBehaviour is 'manual'.
        - `languages` string[] — Defines the languages to use for the transcription. Required when languageBehaviour is 'manual'.
        - `transcriptionHint` string — Provides a custom vocabulary to the model to improve accuracy of transcribing context specific words, technical terms, names, etc. If empty, this argument is ignored. ⚠️ Warning ⚠️: Please be aware that the transcription_hint field has a character limit of 600. If you provide a transcription_hint longer than 600 characters, it will be automatically truncated to meet this limit.
        - `prosody` boolean — If prosody is true, you will get a transcription that can contain prosodies i.e. (laugh) (giggles) (malefic laugh) (toss) (music)… Default value is false.
        - `audioEnhancer` boolean — If true, audio will be pre-processed to improve accuracy but latency will increase. Default value is false.
        - `confidenceThreshold` number — Transcripts below this confidence threshold will be discarded. @default 0.4
        - `endpointing` number — Endpointing time in seconds - time to wait before considering speech ended
        - `speechThreshold` number — Speech threshold - sensitivity configuration for speech detection (0.0 to 1.0)
        - `customVocabularyEnabled` boolean — Enable custom vocabulary for improved accuracy
        - `customVocabularyConfig` GladiaCustomVocabularyConfigDTO
          - `vocabulary` union[], required — Array of vocabulary items (strings or objects with value, pronunciations, intensity, language)
            - union
              - …
          - `defaultIntensity` number — Default intensity for vocabulary items (0.0 to 1.0)
        - `region` 'us-west' | 'eu-west' — Region for processing audio (us-west or eu-west)
        - `receivePartialTranscripts` boolean — Enable partial transcripts for low-latency streaming transcription
        - `fallbackPlan` FallbackTranscriberPlan
          - `transcribers` union[]
            - union
              - …
      - GoogleTranscriber
        - `provider` 'google', required — This is the transcription provider that will be used.
        - `model` 'gemini-3.5-flash' | 'gemini-3.1-flash-lite' | 'gemini-3-flash-preview' | 'gemini-2.5-pro' | 'gemini-2.5-flash' | 'gemini-2.5-flash-lite' | 'gemini-2.0-flash-thinking-exp' | 'gemini-2.0-pro-exp-02-05' | 'gemini-2.0-flash' | 'gemini-2.0-flash-lite' | 'gemini-2.0-flash-exp' | 'gemini-2.0-flash-realtime-exp' | 'gemini-1.5-flash' | 'gemini-1.5-flash-002' | 'gemini-1.5-pro' | 'gemini-1.5-pro-002' | 'gemini-1.0-pro' — This is the model that will be used for the transcription.
        - `language` 'Multilingual' | 'Arabic' | 'Bengali' | 'Bulgarian' | 'Chinese' | 'Croatian' | 'Czech' | 'Danish' | 'Dutch' | 'English' | 'Estonian' | 'Finnish' | 'French' | 'German' | 'Greek' | 'Hebrew' | 'Hindi' | 'Hungarian' | 'Indonesian' | 'Italian' | 'Japanese' | 'Korean' | 'Latvian' | 'Lithuanian' | 'Norwegian' | 'Polish' | 'Portuguese' | 'Romanian' | 'Russian' | 'Serbian' | 'Slovak' | 'Slovenian' | 'Spanish' | 'Swahili' | 'Swedish' | 'Thai' | 'Turkish' | 'Ukrainian' | 'Vietnamese' — This is the language that will be set for the transcription.
        - `fallbackPlan` FallbackTranscriberPlan
          - `transcribers` union[]
            - union
              - …
      - SpeechmaticsTranscriber
        - `provider` 'speechmatics', required — This is the transcription provider that will be used.
        - `model` 'default' — This is the model that will be used for the transcription.
        - `language` 'auto' | 'ar' | 'ar_en' | 'ba' | 'eu' | 'be' | 'bn' | 'bg' | 'yue' | 'ca' | 'hr' | 'cs' | 'da' | 'nl' | 'en' | 'eo' | 'et' | 'fi' | 'fr' | 'gl' | 'de' | 'el' | 'he' | 'hi' | 'hu' | 'id' | 'ia' | 'ga' | 'it' | 'ja' | 'ko' | 'lv' | 'lt' | 'ms' | 'en_ms' | 'mt' | 'cmn' | 'cmn_en' | 'mr' | 'mn' | 'no' | 'fa' | 'pl' | 'pt' | 'ro' | 'ru' | 'sk' | 'sl' | 'es' | 'en_es' | 'sw' | 'sv' | 'tl' | 'ta' | 'en_ta' | 'th' | 'tr' | 'uk' | 'ur' | 'ug' | 'vi' | 'cy'
        - `operatingPoint` 'standard' | 'enhanced' — This is the operating point for the transcription. Choose between `standard` for faster turnaround with strong accuracy or `enhanced` for highest accuracy when precision is critical. @default 'enhanced'
        - `region` 'eu' | 'us' — This is the region for the Speechmatics API. Choose between EU (Europe) and US (United States) regions for lower latency and data sovereignty compliance. @default 'eu'
        - `enableDiarization` boolean — This enables speaker diarization, which identifies and separates speakers in the transcription. Essential for multi-speaker conversations and conference calls. @default false
        - `maxDelay` number — This sets the maximum delay in milliseconds for partial transcripts. Balances latency and accuracy. @default 3000
        - `customVocabulary` SpeechmaticsCustomVocabularyItem[], required
          - `content` string, required — The word or phrase to add to the custom vocabulary.
          - `soundsLike` string[] — Alternative phonetic representations of how the word might sound. This helps recognition when the word might be pronounced differently.
        - `numeralStyle` 'written' | 'spoken' — This controls how numbers, dates, currencies, and other entities are formatted in the transcription output. @default 'written'
        - `endOfTurnSensitivity` number — This is the sensitivity level for end-of-turn detection, which determines when a speaker has finished talking. Higher values are more sensitive. @default 0.5
        - `removeDisfluencies` boolean — This enables removal of disfluencies (um, uh) from the transcript to create cleaner, more professional output. This is only supported for the English language transcriber. @default false
        - `minimumSpeechDuration` number — This is the minimum duration in seconds for speech segments. Shorter segments will be filtered out. Helps remove noise and improve accuracy. @default 0.0
        - `fallbackPlan` FallbackTranscriberPlan
          - `transcribers` union[]
            - union
              - …
      - TalkscriberTranscriber
        - `provider` 'talkscriber', required — This is the transcription provider that will be used.
        - `model` 'whisper' — This is the model that will be used for the transcription.
        - `language` 'en' | 'zh' | 'de' | 'es' | 'ru' | 'ko' | 'fr' | 'ja' | 'pt' | 'tr' | 'pl' | 'ca' | 'nl' | 'ar' | 'sv' | 'it' | 'id' | 'hi' | 'fi' | 'vi' | 'he' | 'uk' | 'el' | 'ms' | 'cs' | 'ro' | 'da' | 'hu' | 'ta' | 'no' | 'th' | 'ur' | 'hr' | 'bg' | 'lt' | 'la' | 'mi' | 'ml' | 'cy' | 'sk' | 'te' | 'fa' | 'lv' | 'bn' | 'sr' | 'az' | 'sl' | 'kn' | 'et' | 'mk' | 'br' | 'eu' | 'is' | 'hy' | 'ne' | 'mn' | 'bs' | 'kk' | 'sq' | 'sw' | 'gl' | 'mr' | 'pa' | 'si' | 'km' | 'sn' | 'yo' | 'so' | 'af' | 'oc' | 'ka' | 'be' | 'tg' | 'sd' | 'gu' | 'am' | 'yi' | 'lo' | 'uz' | 'fo' | 'ht' | 'ps' | 'tk' | 'nn' | 'mt' | 'sa' | 'lb' | 'my' | 'bo' | 'tl' | 'mg' | 'as' | 'tt' | 'haw' | 'ln' | 'ha' | 'ba' | 'jw' | 'su' | 'yue' — This is the language that will be set for the transcription. The list of languages Whisper supports can be found here: https://github.com/openai/whisper/blob/main/whisper/tokenizer.py
        - `fallbackPlan` FallbackTranscriberPlan
          - `transcribers` union[]
            - union
              - …
      - OpenAITranscriber
        - `provider` 'openai', required — This is the transcription provider that will be used.
        - `model` 'gpt-4o-transcribe' | 'gpt-4o-mini-transcribe', required — This is the model that will be used for the transcription.
        - `language` 'af' | 'ar' | 'hy' | 'az' | 'be' | 'bs' | 'bg' | 'ca' | 'zh' | 'hr' | 'cs' | 'da' | 'nl' | 'en' | 'et' | 'fi' | 'fr' | 'gl' | 'de' | 'el' | 'he' | 'hi' | 'hu' | 'is' | 'id' | 'it' | 'ja' | 'kn' | 'kk' | 'ko' | 'lv' | 'lt' | 'mk' | 'ms' | 'mr' | 'mi' | 'ne' | 'no' | 'fa' | 'pl' | 'pt' | 'ro' | 'ru' | 'sr' | 'sk' | 'sl' | 'es' | 'sw' | 'sv' | 'tl' | 'ta' | 'th' | 'tr' | 'uk' | 'ur' | 'vi' | 'cy' — This is the language that will be set for the transcription.
        - `fallbackPlan` FallbackTranscriberPlan
          - `transcribers` union[]
            - union
              - …
      - CartesiaTranscriber
        - `provider` 'cartesia', required
        - `model` 'ink-whisper' | 'ink-2'
        - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu'
        - `fallbackPlan` FallbackTranscriberPlan
          - `transcribers` union[]
            - union
              - …
      - SonioxTranscriber
        - `provider` 'soniox', required
        - `model` 'stt-rt-v4' | 'stt-rt-v5' — The Soniox model to use for transcription.
        - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu' — Single language for transcription as an ISO 639-1 code (e.g., `en`, `es`). For multi-language hints or to enable Soniox auto-detect, use `languages` instead — when `languages` is set (including to an empty array), this field is ignored when building the Soniox request. Defaults to `en` if neither this nor `languages` is set.
        - `languages` string[] — Language hints sent to Soniox as `language_hints`. Provide `[lang1, lang2, ...]` (ISO 639-1 codes) to bias recognition toward specific languages, or provide an explicit empty array `[]` to enable Soniox auto-detect across all 60+ supported languages. When set (including the empty array), this field takes precedence over the singular `language` field. When omitted, falls back to the singular `language` (which defaults to `en` if also unset). Best accuracy is achieved with a single language.
        - `languageHintsStrict` boolean — When `true`, Soniox strictly restricts transcription to the languages in `languages` (or the singular `language` if `languages` is unset). When `false`, Soniox biases toward those languages but still allows transcription in other languages. Has no effect when no language hints are sent (e.g., `languages: []` for auto-detect). Defaults to `true` (strict mode).
        - `maxEndpointDelayMs` number — Maximum delay in milliseconds between when the speaker stops and when the endpoint is detected. Lower values mean faster turn-taking but more false endpoints. Range: 500-3000. Default: 500.
        - `endpointSensitivity` number — How likely Soniox is to emit an endpoint (end the caller turn). Higher values make endpoints more likely for faster turn-taking; negative values make them less likely, which helps when callers pause mid-sentence (e.g. reading numbers group by group). Range: -1.0 to 1.0. Default: 0.3 (the platform low-latency voice profile; Soniox's own default is 0.0). Supported by stt-rt-v5; omitted from the Soniox request on explicit stt-rt-v4. Soniox recommends tuning endpointLatencyAdjustmentLevel first, and advises against negative sensitivity while the level is above 0 (the settings work against each other).
        - `endpointLatencyAdjustmentLevel` number — How aggressively Soniox reduces endpoint latency. 0 is Soniox's default semantic endpointing; 3 is the most aggressive. Higher levels return endpoints sooner but may split speech into more segments and slightly reduce accuracy. Integer. Range: 0-3. Default: 2 (the platform low-latency voice profile; Soniox's own default is 0). Supported by stt-rt-v5; omitted from the Soniox request on explicit stt-rt-v4.
        - `customVocabulary` string[] — Custom vocabulary terms to boost recognition accuracy. Useful for brand names, product names, and domain-specific terminology. Maps to Soniox context.terms.
        - `contextGeneral` SonioxContextGeneralItem[] — General context key-value pairs that guide the AI model during transcription. Helps adapt vocabulary to the correct domain, improving accuracy. Recommended: 10 or fewer pairs. Maps to Soniox context.general.
          - `key` string, required — The key describing the type of context (e.g., "domain", "topic", "doctor", "organization").
          - `value` string, required — The value for the context key (e.g., "Healthcare", "Diabetes management consultation").
        - `fallbackPlan` FallbackTranscriberPlan
          - `transcribers` union[]
            - union
              - …
      - XaiTranscriber
        - `provider` 'xai', required
        - `model` 'default' — The xAI speech-to-text model to use. xAI currently exposes a single STT model — placeholder for future model selection.
        - `language` 'ar' | 'cs' | 'da' | 'nl' | 'en' | 'fil' | 'fr' | 'de' | 'hi' | 'id' | 'it' | 'ja' | 'ko' | 'mk' | 'ms' | 'fa' | 'pl' | 'pt' | 'ro' | 'ru' | 'es' | 'sv' | 'th' | 'tr' | 'vi' — Single language for transcription as an ISO 639-1 code (e.g., `en`, `es`). Defaults to `en` if not set. xAI auto-detects when omitted via the API but Vapi defaults to English for deterministic behavior.
        - `fallbackPlan` FallbackTranscriberPlan
          - `transcribers` union[]
            - union
              - …
      - VapiTranscriber
        - `provider` 'vapi', required
        - `version` 'latest' | '1' — This is the version of the Vapi transcriber. Vapi manages the underlying model and routing. When omitted, the latest version is used. Managed version params are additive-only and `'latest'` is an auto-update channel — see the param-evolution INVARIANT in `vapiManaged/types.ts`.
        - `language` 'aa' | 'ab' | 'ae' | 'af' | 'ak' | 'am' | 'an' | 'ar' | 'as' | 'av' | 'ay' | 'az' | 'ba' | 'be' | 'bg' | 'bh' | 'bi' | 'bm' | 'bn' | 'bo' | 'br' | 'bs' | 'ca' | 'ce' | 'ch' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cy' | 'da' | 'de' | 'dv' | 'dz' | 'ee' | 'el' | 'en' | 'eo' | 'es' | 'et' | 'eu' | 'fa' | 'ff' | 'fi' | 'fj' | 'fo' | 'fr' | 'fy' | 'ga' | 'gd' | 'gl' | 'gn' | 'gu' | 'gv' | 'ha' | 'he' | 'hi' | 'ho' | 'hr' | 'ht' | 'hu' | 'hy' | 'hz' | 'ia' | 'id' | 'ie' | 'ig' | 'ii' | 'ik' | 'io' | 'is' | 'it' | 'iu' | 'ja' | 'jv' | 'ka' | 'kg' | 'ki' | 'kj' | 'kk' | 'kl' | 'km' | 'kn' | 'ko' | 'kr' | 'ks' | 'ku' | 'kv' | 'kw' | 'ky' | 'la' | 'lb' | 'lg' | 'li' | 'ln' | 'lo' | 'lt' | 'lu' | 'lv' | 'mg' | 'mh' | 'mi' | 'mk' | 'ml' | 'mn' | 'mr' | 'ms' | 'mt' | 'my' | 'na' | 'nb' | 'nd' | 'ne' | 'ng' | 'nl' | 'nn' | 'no' | 'nr' | 'nv' | 'ny' | 'oc' | 'oj' | 'om' | 'or' | 'os' | 'pa' | 'pi' | 'pl' | 'ps' | 'pt' | 'qu' | 'rm' | 'rn' | 'ro' | 'ru' | 'rw' | 'sa' | 'sc' | 'sd' | 'se' | 'sg' | 'si' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sq' | 'sr' | 'ss' | 'st' | 'su' | 'sv' | 'sw' | 'ta' | 'te' | 'tg' | 'th' | 'ti' | 'tk' | 'tl' | 'tn' | 'to' | 'tr' | 'ts' | 'tt' | 'tw' | 'ty' | 'ug' | 'uk' | 'ur' | 'uz' | 've' | 'vi' | 'vo' | 'wa' | 'wo' | 'xh' | 'yi' | 'yue' | 'yo' | 'za' | 'zh' | 'zu' — This is the language for transcription as an ISO 639-1 code (e.g. `en`). Selecting a language locks transcription to it. For multiple languages, use `languages` instead. When neither `language` nor `languages` is set, the transcriber auto-detects the spoken language.
        - `languages` string[] — These are the languages for transcription as ISO 639-1 codes. Set one or more codes to restrict and bias recognition to those languages. An empty array `[]` (or omitting both this and `language`) enables auto-detection of the spoken language.
        - `keywords` string[] — These are custom keywords/vocabulary to boost recognition of use-case specific words (company names, product names, jargon).
        - `turnTaking` 'intelligent' | 'manual' — This is the turn-taking mode. `intelligent` uses the underlying model's native end-of-turn detection; `manual` ignores it and waits a fixed end-of-turn delay. Defaults to `intelligent`.
    - `model` union — These are the options for the assistant's LLM.
      - AnthropicModel
        - `messages` OpenAIMessage[] — This is the starting state for the conversation.
          - `content` string, nullable, required
          - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
        - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
          - union
            - CreateApiRequestToolDTO
              - …
            - CreateBashToolDTO
              - …
            - CreateCodeToolDTO
              - …
            - CreateComputerToolDTO
              - …
            - CreateDtmfToolDTO
              - …
            - CreateEndCallToolDTO
              - …
            - CreateFunctionToolDTO
              - …
            - CreateGoHighLevelCalendarAvailabilityToolDTO
              - …
            - CreateGoHighLevelCalendarEventCreateToolDTO
              - …
            - CreateGoHighLevelContactCreateToolDTO
              - …
            - CreateGoHighLevelContactGetToolDTO
              - …
            - CreateGoogleCalendarCheckAvailabilityToolDTO
              - …
            - CreateGoogleCalendarCreateEventToolDTO
              - …
            - CreateGoogleSheetsRowAppendToolDTO
              - …
            - CreateHandoffToolDTO
              - …
            - CreateMcpToolDTO
              - …
            - CreateQueryToolDTO
              - …
            - CreateSlackSendMessageToolDTO
              - …
            - CreateSmsToolDTO
              - …
            - CreateTextEditorToolDTO
              - …
            - CreateTransferCallToolDTO
              - …
            - CreateSipRequestToolDTO
              - …
            - CreateVoicemailToolDTO
              - …
        - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
        - `toolRefs` ToolRef[] — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time).
          - `toolId` string, uuid, required — This is the unique identifier of the tool whose version is being pinned.
          - `version` string, required — Public version label of the tool, e.g. "v3"
        - `knowledgeBase` CreateCustomKnowledgeBaseDTO
          - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
          - `server` Server, required
            - `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
              - …
        - `model` 'claude-3-opus-20240229' | 'claude-3-sonnet-20240229' | 'claude-3-haiku-20240307' | 'claude-3-5-sonnet-20240620' | 'claude-3-5-sonnet-20241022' | 'claude-3-5-haiku-20241022' | 'claude-3-7-sonnet-20250219' | 'claude-opus-4-20250514' | 'claude-opus-4-5-20251101' | 'claude-opus-4-6' | 'claude-sonnet-4-20250514' | 'claude-sonnet-4-5-20250929' | 'claude-sonnet-4-6' | 'claude-sonnet-5' | 'claude-haiku-4-5-20251001', required — The specific Anthropic/Claude model that will be used.
        - `provider` 'anthropic', required — The provider identifier for Anthropic.
        - `thinking` AnthropicThinkingConfig
          - `type` 'enabled', required
          - `budgetTokens` number, required — The maximum number of tokens to allocate for thinking. Must be between 1024 and 100000 tokens.
        - `temperature` number — This is the temperature that will be used for calls. Default is 0.5.
        - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
        - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
        - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
      - AnthropicBedrockModel
        - `messages` OpenAIMessage[] — This is the starting state for the conversation.
          - `content` string, nullable, required
          - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
        - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
          - union
            - CreateApiRequestToolDTO
              - …
            - CreateBashToolDTO
              - …
            - CreateCodeToolDTO
              - …
            - CreateComputerToolDTO
              - …
            - CreateDtmfToolDTO
              - …
            - CreateEndCallToolDTO
              - …
            - CreateFunctionToolDTO
              - …
            - CreateGoHighLevelCalendarAvailabilityToolDTO
              - …
            - CreateGoHighLevelCalendarEventCreateToolDTO
              - …
            - CreateGoHighLevelContactCreateToolDTO
              - …
            - CreateGoHighLevelContactGetToolDTO
              - …
            - CreateGoogleCalendarCheckAvailabilityToolDTO
              - …
            - CreateGoogleCalendarCreateEventToolDTO
              - …
            - CreateGoogleSheetsRowAppendToolDTO
              - …
            - CreateHandoffToolDTO
              - …
            - CreateMcpToolDTO
              - …
            - CreateQueryToolDTO
              - …
            - CreateSlackSendMessageToolDTO
              - …
            - CreateSmsToolDTO
              - …
            - CreateTextEditorToolDTO
              - …
            - CreateTransferCallToolDTO
              - …
            - CreateSipRequestToolDTO
              - …
            - CreateVoicemailToolDTO
              - …
        - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
        - `toolRefs` ToolRef[] — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time).
          - `toolId` string, uuid, required — This is the unique identifier of the tool whose version is being pinned.
          - `version` string, required — Public version label of the tool, e.g. "v3"
        - `knowledgeBase` CreateCustomKnowledgeBaseDTO
          - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
          - `server` Server, required
            - `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
              - …
        - `provider` 'anthropic-bedrock', required — The provider identifier for Anthropic via AWS Bedrock.
        - `model` 'claude-3-opus-20240229' | 'claude-3-sonnet-20240229' | 'claude-3-haiku-20240307' | 'claude-3-5-sonnet-20240620' | 'claude-3-5-sonnet-20241022' | 'claude-3-5-haiku-20241022' | 'claude-3-7-sonnet-20250219' | 'claude-opus-4-20250514' | 'claude-opus-4-5-20251101' | 'claude-opus-4-6' | 'claude-sonnet-4-20250514' | 'claude-sonnet-4-5-20250929' | 'claude-sonnet-4-6' | 'claude-haiku-4-5-20251001' | 'global.anthropic.claude-haiku-4-5-20251001-v1:0', required — The specific Anthropic/Claude model that will be used via Bedrock.
        - `thinking` AnthropicThinkingConfig
          - `type` 'enabled', required
          - `budgetTokens` number, required — The maximum number of tokens to allocate for thinking. Must be between 1024 and 100000 tokens.
        - `temperature` number — This is the temperature that will be used for calls. Default is 0.5.
        - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
        - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
        - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
      - AnyscaleModel
        - `messages` OpenAIMessage[] — This is the starting state for the conversation.
          - `content` string, nullable, required
          - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
        - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
          - union
            - CreateApiRequestToolDTO
              - …
            - CreateBashToolDTO
              - …
            - CreateCodeToolDTO
              - …
            - CreateComputerToolDTO
              - …
            - CreateDtmfToolDTO
              - …
            - CreateEndCallToolDTO
              - …
            - CreateFunctionToolDTO
              - …
            - CreateGoHighLevelCalendarAvailabilityToolDTO
              - …
            - CreateGoHighLevelCalendarEventCreateToolDTO
              - …
            - CreateGoHighLevelContactCreateToolDTO
              - …
            - CreateGoHighLevelContactGetToolDTO
              - …
            - CreateGoogleCalendarCheckAvailabilityToolDTO
              - …
            - CreateGoogleCalendarCreateEventToolDTO
              - …
            - CreateGoogleSheetsRowAppendToolDTO
              - …
            - CreateHandoffToolDTO
              - …
            - CreateMcpToolDTO
              - …
            - CreateQueryToolDTO
              - …
            - CreateSlackSendMessageToolDTO
              - …
            - CreateSmsToolDTO
              - …
            - CreateTextEditorToolDTO
              - …
            - CreateTransferCallToolDTO
              - …
            - CreateSipRequestToolDTO
              - …
            - CreateVoicemailToolDTO
              - …
        - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
        - `toolRefs` ToolRef[] — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time).
          - `toolId` string, uuid, required — This is the unique identifier of the tool whose version is being pinned.
          - `version` string, required — Public version label of the tool, e.g. "v3"
        - `knowledgeBase` CreateCustomKnowledgeBaseDTO
          - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
          - `server` Server, required
            - `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
              - …
        - `provider` 'anyscale', required
        - `model` string, required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
        - `temperature` number — This is the temperature that will be used for calls. Default is 0.5.
        - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
        - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
        - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
      - CerebrasModel
        - `messages` OpenAIMessage[] — This is the starting state for the conversation.
          - `content` string, nullable, required
          - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
        - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
          - union
            - CreateApiRequestToolDTO
              - …
            - CreateBashToolDTO
              - …
            - CreateCodeToolDTO
              - …
            - CreateComputerToolDTO
              - …
            - CreateDtmfToolDTO
              - …
            - CreateEndCallToolDTO
              - …
            - CreateFunctionToolDTO
              - …
            - CreateGoHighLevelCalendarAvailabilityToolDTO
              - …
            - CreateGoHighLevelCalendarEventCreateToolDTO
              - …
            - CreateGoHighLevelContactCreateToolDTO
              - …
            - CreateGoHighLevelContactGetToolDTO
              - …
            - CreateGoogleCalendarCheckAvailabilityToolDTO
              - …
            - CreateGoogleCalendarCreateEventToolDTO
              - …
            - CreateGoogleSheetsRowAppendToolDTO
              - …
            - CreateHandoffToolDTO
              - …
            - CreateMcpToolDTO
              - …
            - CreateQueryToolDTO
              - …
            - CreateSlackSendMessageToolDTO
              - …
            - CreateSmsToolDTO
              - …
            - CreateTextEditorToolDTO
              - …
            - CreateTransferCallToolDTO
              - …
            - CreateSipRequestToolDTO
              - …
            - CreateVoicemailToolDTO
              - …
        - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
        - `toolRefs` ToolRef[] — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time).
          - `toolId` string, uuid, required — This is the unique identifier of the tool whose version is being pinned.
          - `version` string, required — Public version label of the tool, e.g. "v3"
        - `knowledgeBase` CreateCustomKnowledgeBaseDTO
          - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
          - `server` Server, required
            - `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
              - …
        - `model` 'llama3.1-8b' | 'llama-3.3-70b', required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
        - `provider` 'cerebras', required
        - `temperature` number — This is the temperature that will be used for calls. Default is 0.5.
        - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
        - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
        - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
      - CustomLLMModel
        - `messages` OpenAIMessage[] — This is the starting state for the conversation.
          - `content` string, nullable, required
          - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
        - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
          - union
            - CreateApiRequestToolDTO
              - …
            - CreateBashToolDTO
              - …
            - CreateCodeToolDTO
              - …
            - CreateComputerToolDTO
              - …
            - CreateDtmfToolDTO
              - …
            - CreateEndCallToolDTO
              - …
            - CreateFunctionToolDTO
              - …
            - CreateGoHighLevelCalendarAvailabilityToolDTO
              - …
            - CreateGoHighLevelCalendarEventCreateToolDTO
              - …
            - CreateGoHighLevelContactCreateToolDTO
              - …
            - CreateGoHighLevelContactGetToolDTO
              - …
            - CreateGoogleCalendarCheckAvailabilityToolDTO
              - …
            - CreateGoogleCalendarCreateEventToolDTO
              - …
            - CreateGoogleSheetsRowAppendToolDTO
              - …
            - CreateHandoffToolDTO
              - …
            - CreateMcpToolDTO
              - …
            - CreateQueryToolDTO
              - …
            - CreateSlackSendMessageToolDTO
              - …
            - CreateSmsToolDTO
              - …
            - CreateTextEditorToolDTO
              - …
            - CreateTransferCallToolDTO
              - …
            - CreateSipRequestToolDTO
              - …
            - CreateVoicemailToolDTO
              - …
        - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
        - `toolRefs` ToolRef[] — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time).
          - `toolId` string, uuid, required — This is the unique identifier of the tool whose version is being pinned.
          - `version` string, required — Public version label of the tool, e.g. "v3"
        - `knowledgeBase` CreateCustomKnowledgeBaseDTO
          - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
          - `server` Server, required
            - `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
              - …
        - `provider` 'custom-llm', required — This is the provider that will be used for the model. Any service, including your own server, that is compatible with the OpenAI API can be used.
        - `metadataSendMode` 'off' | 'variable' | 'destructured' — This determines whether metadata is sent in requests to the custom provider. - `off` will not send any metadata. payload will look like `{ messages }` - `variable` will send `assistant.metadata` as a variable on the payload. payload will look like `{ messages, metadata }` - `destructured` will send `assistant.metadata` fields directly on the payload. payload will look like `{ messages, ...metadata }` Further, `variable` and `destructured` will send `call`, `phoneNumber`, and `customer` objects in the payload. Default is `variable`.
        - `headers` object — Custom headers to send with requests. These headers can override default OpenAI headers except for Authorization (which should be specified using a custom-llm credential).
        - `url` string, required — These is the URL we'll use for the OpenAI client's `baseURL`. Ex. https://openrouter.ai/api/v1
        - `wordLevelConfidenceEnabled` boolean — This determines whether the transcriber's word level confidence is sent in requests to the custom provider. Default is false. This only works for Deepgram transcribers.
        - `timeoutSeconds` number — This sets the timeout for the connection to the custom provider without needing to stream any tokens back. Default is 20 seconds.
        - `model` string, required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
        - `temperature` number — This is the temperature that will be used for calls. Default is 0.5.
        - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
        - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
        - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
      - DeepInfraModel
        - `messages` OpenAIMessage[] — This is the starting state for the conversation.
          - `content` string, nullable, required
          - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
        - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
          - union
            - CreateApiRequestToolDTO
              - …
            - CreateBashToolDTO
              - …
            - CreateCodeToolDTO
              - …
            - CreateComputerToolDTO
              - …
            - CreateDtmfToolDTO
              - …
            - CreateEndCallToolDTO
              - …
            - CreateFunctionToolDTO
              - …
            - CreateGoHighLevelCalendarAvailabilityToolDTO
              - …
            - CreateGoHighLevelCalendarEventCreateToolDTO
              - …
            - CreateGoHighLevelContactCreateToolDTO
              - …
            - CreateGoHighLevelContactGetToolDTO
              - …
            - CreateGoogleCalendarCheckAvailabilityToolDTO
              - …
            - CreateGoogleCalendarCreateEventToolDTO
              - …
            - CreateGoogleSheetsRowAppendToolDTO
              - …
            - CreateHandoffToolDTO
              - …
            - CreateMcpToolDTO
              - …
            - CreateQueryToolDTO
              - …
            - CreateSlackSendMessageToolDTO
              - …
            - CreateSmsToolDTO
              - …
            - CreateTextEditorToolDTO
              - …
            - CreateTransferCallToolDTO
              - …
            - CreateSipRequestToolDTO
              - …
            - CreateVoicemailToolDTO
              - …
        - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
        - `toolRefs` ToolRef[] — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time).
          - `toolId` string, uuid, required — This is the unique identifier of the tool whose version is being pinned.
          - `version` string, required — Public version label of the tool, e.g. "v3"
        - `knowledgeBase` CreateCustomKnowledgeBaseDTO
          - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
          - `server` Server, required
            - `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
              - …
        - `provider` 'deepinfra', required
        - `model` string, required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
        - `temperature` number — This is the temperature that will be used for calls. Default is 0.5.
        - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
        - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
        - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
      - DeepSeekModel
        - `messages` OpenAIMessage[] — This is the starting state for the conversation.
          - `content` string, nullable, required
          - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
        - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
          - union
            - CreateApiRequestToolDTO
              - …
            - CreateBashToolDTO
              - …
            - CreateCodeToolDTO
              - …
            - CreateComputerToolDTO
              - …
            - CreateDtmfToolDTO
              - …
            - CreateEndCallToolDTO
              - …
            - CreateFunctionToolDTO
              - …
            - CreateGoHighLevelCalendarAvailabilityToolDTO
              - …
            - CreateGoHighLevelCalendarEventCreateToolDTO
              - …
            - CreateGoHighLevelContactCreateToolDTO
              - …
            - CreateGoHighLevelContactGetToolDTO
              - …
            - CreateGoogleCalendarCheckAvailabilityToolDTO
              - …
            - CreateGoogleCalendarCreateEventToolDTO
              - …
            - CreateGoogleSheetsRowAppendToolDTO
              - …
            - CreateHandoffToolDTO
              - …
            - CreateMcpToolDTO
              - …
            - CreateQueryToolDTO
              - …
            - CreateSlackSendMessageToolDTO
              - …
            - CreateSmsToolDTO
              - …
            - CreateTextEditorToolDTO
              - …
            - CreateTransferCallToolDTO
              - …
            - CreateSipRequestToolDTO
              - …
            - CreateVoicemailToolDTO
              - …
        - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
        - `toolRefs` ToolRef[] — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time).
          - `toolId` string, uuid, required — This is the unique identifier of the tool whose version is being pinned.
          - `version` string, required — Public version label of the tool, e.g. "v3"
        - `knowledgeBase` CreateCustomKnowledgeBaseDTO
          - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
          - `server` Server, required
            - `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
              - …
        - `model` 'deepseek-chat' | 'deepseek-reasoner', required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
        - `provider` 'deep-seek', required
        - `temperature` number — This is the temperature that will be used for calls. Default is 0.5.
        - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
        - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
        - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
      - GoogleModel
        - `messages` OpenAIMessage[] — This is the starting state for the conversation.
          - `content` string, nullable, required
          - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
        - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
          - union
            - CreateApiRequestToolDTO
              - …
            - CreateBashToolDTO
              - …
            - CreateCodeToolDTO
              - …
            - CreateComputerToolDTO
              - …
            - CreateDtmfToolDTO
              - …
            - CreateEndCallToolDTO
              - …
            - CreateFunctionToolDTO
              - …
            - CreateGoHighLevelCalendarAvailabilityToolDTO
              - …
            - CreateGoHighLevelCalendarEventCreateToolDTO
              - …
            - CreateGoHighLevelContactCreateToolDTO
              - …
            - CreateGoHighLevelContactGetToolDTO
              - …
            - CreateGoogleCalendarCheckAvailabilityToolDTO
              - …
            - CreateGoogleCalendarCreateEventToolDTO
              - …
            - CreateGoogleSheetsRowAppendToolDTO
              - …
            - CreateHandoffToolDTO
              - …
            - CreateMcpToolDTO
              - …
            - CreateQueryToolDTO
              - …
            - CreateSlackSendMessageToolDTO
              - …
            - CreateSmsToolDTO
              - …
            - CreateTextEditorToolDTO
              - …
            - CreateTransferCallToolDTO
              - …
            - CreateSipRequestToolDTO
              - …
            - CreateVoicemailToolDTO
              - …
        - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
        - `toolRefs` ToolRef[] — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time).
          - `toolId` string, uuid, required — This is the unique identifier of the tool whose version is being pinned.
          - `version` string, required — Public version label of the tool, e.g. "v3"
        - `knowledgeBase` CreateCustomKnowledgeBaseDTO
          - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
          - `server` Server, required
            - `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
              - …
        - `model` 'gemini-3.5-flash' | 'gemini-3.1-flash-lite' | 'gemini-3-flash-preview' | 'gemini-2.5-pro' | 'gemini-2.5-flash' | 'gemini-2.5-flash-lite' | 'gemini-2.0-flash-thinking-exp' | 'gemini-2.0-pro-exp-02-05' | 'gemini-2.0-flash' | 'gemini-2.0-flash-lite' | 'gemini-2.0-flash-exp' | 'gemini-2.0-flash-realtime-exp' | 'gemini-1.5-flash' | 'gemini-1.5-flash-002' | 'gemini-1.5-pro' | 'gemini-1.5-pro-002' | 'gemini-1.0-pro', required — This is the Google model that will be used.
        - `provider` 'google', required
        - `realtimeConfig` GoogleRealtimeConfig
          - `topP` number — This is the nucleus sampling parameter that controls the cumulative probability of tokens considered during text generation. Only applicable with the Gemini Flash 2.0 Multimodal Live API.
          - `topK` number — This is the top-k sampling parameter that limits the number of highest probability tokens considered during text generation. Only applicable with the Gemini Flash 2.0 Multimodal Live API.
          - `presencePenalty` number — This is the presence penalty parameter that influences the model's likelihood to repeat information by penalizing tokens based on their presence in the text. Only applicable with the Gemini Flash 2.0 Multimodal Live API.
          - `frequencyPenalty` number — This is the frequency penalty parameter that influences the model's likelihood to repeat tokens by penalizing them based on their frequency in the text. Only applicable with the Gemini Flash 2.0 Multimodal Live API.
          - `speechConfig` GeminiMultimodalLiveSpeechConfig
            - `voiceConfig` GeminiMultimodalLiveVoiceConfig, required
              - …
        - `temperature` number — This is the temperature that will be used for calls. Default is 0.5.
        - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
        - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
        - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
      - GroqModel
        - `messages` OpenAIMessage[] — This is the starting state for the conversation.
          - `content` string, nullable, required
          - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
        - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
          - union
            - CreateApiRequestToolDTO
              - …
            - CreateBashToolDTO
              - …
            - CreateCodeToolDTO
              - …
            - CreateComputerToolDTO
              - …
            - CreateDtmfToolDTO
              - …
            - CreateEndCallToolDTO
              - …
            - CreateFunctionToolDTO
              - …
            - CreateGoHighLevelCalendarAvailabilityToolDTO
              - …
            - CreateGoHighLevelCalendarEventCreateToolDTO
              - …
            - CreateGoHighLevelContactCreateToolDTO
              - …
            - CreateGoHighLevelContactGetToolDTO
              - …
            - CreateGoogleCalendarCheckAvailabilityToolDTO
              - …
            - CreateGoogleCalendarCreateEventToolDTO
              - …
            - CreateGoogleSheetsRowAppendToolDTO
              - …
            - CreateHandoffToolDTO
              - …
            - CreateMcpToolDTO
              - …
            - CreateQueryToolDTO
              - …
            - CreateSlackSendMessageToolDTO
              - …
            - CreateSmsToolDTO
              - …
            - CreateTextEditorToolDTO
              - …
            - CreateTransferCallToolDTO
              - …
            - CreateSipRequestToolDTO
              - …
            - CreateVoicemailToolDTO
              - …
        - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
        - `toolRefs` ToolRef[] — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time).
          - `toolId` string, uuid, required — This is the unique identifier of the tool whose version is being pinned.
          - `version` string, required — Public version label of the tool, e.g. "v3"
        - `knowledgeBase` CreateCustomKnowledgeBaseDTO
          - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
          - `server` Server, required
            - `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
              - …
        - `model` 'openai/gpt-oss-20b' | 'openai/gpt-oss-120b' | 'deepseek-r1-distill-llama-70b' | 'llama-3.3-70b-versatile' | 'llama-3.1-405b-reasoning' | 'llama-3.1-8b-instant' | 'llama3-8b-8192' | 'llama3-70b-8192' | 'gemma2-9b-it' | 'moonshotai/kimi-k2-instruct-0905' | 'meta-llama/llama-4-scout-17b-16e-instruct' | 'mistral-saba-24b' | 'compound-beta' | 'compound-beta-mini', required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
        - `provider` 'groq', required
        - `temperature` number — This is the temperature that will be used for calls. Default is 0.5.
        - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
        - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
        - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
      - InflectionAIModel
        - `messages` OpenAIMessage[] — This is the starting state for the conversation.
          - `content` string, nullable, required
          - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
        - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
          - union
            - CreateApiRequestToolDTO
              - …
            - CreateBashToolDTO
              - …
            - CreateCodeToolDTO
              - …
            - CreateComputerToolDTO
              - …
            - CreateDtmfToolDTO
              - …
            - CreateEndCallToolDTO
              - …
            - CreateFunctionToolDTO
              - …
            - CreateGoHighLevelCalendarAvailabilityToolDTO
              - …
            - CreateGoHighLevelCalendarEventCreateToolDTO
              - …
            - CreateGoHighLevelContactCreateToolDTO
              - …
            - CreateGoHighLevelContactGetToolDTO
              - …
            - CreateGoogleCalendarCheckAvailabilityToolDTO
              - …
            - CreateGoogleCalendarCreateEventToolDTO
              - …
            - CreateGoogleSheetsRowAppendToolDTO
              - …
            - CreateHandoffToolDTO
              - …
            - CreateMcpToolDTO
              - …
            - CreateQueryToolDTO
              - …
            - CreateSlackSendMessageToolDTO
              - …
            - CreateSmsToolDTO
              - …
            - CreateTextEditorToolDTO
              - …
            - CreateTransferCallToolDTO
              - …
            - CreateSipRequestToolDTO
              - …
            - CreateVoicemailToolDTO
              - …
        - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
        - `toolRefs` ToolRef[] — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time).
          - `toolId` string, uuid, required — This is the unique identifier of the tool whose version is being pinned.
          - `version` string, required — Public version label of the tool, e.g. "v3"
        - `knowledgeBase` CreateCustomKnowledgeBaseDTO
          - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
          - `server` Server, required
            - `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
              - …
        - `model` 'inflection_3_pi', required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
        - `provider` 'inflection-ai', required
        - `temperature` number — This is the temperature that will be used for calls. Default is 0.5.
        - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
        - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
        - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
      - MinimaxLLMModel
        - `messages` OpenAIMessage[] — This is the starting state for the conversation.
          - `content` string, nullable, required
          - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
        - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
          - union
            - CreateApiRequestToolDTO
              - …
            - CreateBashToolDTO
              - …
            - CreateCodeToolDTO
              - …
            - CreateComputerToolDTO
              - …
            - CreateDtmfToolDTO
              - …
            - CreateEndCallToolDTO
              - …
            - CreateFunctionToolDTO
              - …
            - CreateGoHighLevelCalendarAvailabilityToolDTO
              - …
            - CreateGoHighLevelCalendarEventCreateToolDTO
              - …
            - CreateGoHighLevelContactCreateToolDTO
              - …
            - CreateGoHighLevelContactGetToolDTO
              - …
            - CreateGoogleCalendarCheckAvailabilityToolDTO
              - …
            - CreateGoogleCalendarCreateEventToolDTO
              - …
            - CreateGoogleSheetsRowAppendToolDTO
              - …
            - CreateHandoffToolDTO
              - …
            - CreateMcpToolDTO
              - …
            - CreateQueryToolDTO
              - …
            - CreateSlackSendMessageToolDTO
              - …
            - CreateSmsToolDTO
              - …
            - CreateTextEditorToolDTO
              - …
            - CreateTransferCallToolDTO
              - …
            - CreateSipRequestToolDTO
              - …
            - CreateVoicemailToolDTO
              - …
        - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
        - `toolRefs` ToolRef[] — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time).
          - `toolId` string, uuid, required — This is the unique identifier of the tool whose version is being pinned.
          - `version` string, required — Public version label of the tool, e.g. "v3"
        - `knowledgeBase` CreateCustomKnowledgeBaseDTO
          - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
          - `server` Server, required
            - `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
              - …
        - `provider` 'minimax', required
        - `model` 'MiniMax-M2.7', required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
        - `temperature` number — This is the temperature that will be used for calls. Default is 0.5.
        - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
        - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
        - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
      - OpenAIModel
        - `messages` OpenAIMessage[] — This is the starting state for the conversation.
          - `content` string, nullable, required
          - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
        - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
          - union
            - CreateApiRequestToolDTO
              - …
            - CreateBashToolDTO
              - …
            - CreateCodeToolDTO
              - …
            - CreateComputerToolDTO
              - …
            - CreateDtmfToolDTO
              - …
            - CreateEndCallToolDTO
              - …
            - CreateFunctionToolDTO
              - …
            - CreateGoHighLevelCalendarAvailabilityToolDTO
              - …
            - CreateGoHighLevelCalendarEventCreateToolDTO
              - …
            - CreateGoHighLevelContactCreateToolDTO
              - …
            - CreateGoHighLevelContactGetToolDTO
              - …
            - CreateGoogleCalendarCheckAvailabilityToolDTO
              - …
            - CreateGoogleCalendarCreateEventToolDTO
              - …
            - CreateGoogleSheetsRowAppendToolDTO
              - …
            - CreateHandoffToolDTO
              - …
            - CreateMcpToolDTO
              - …
            - CreateQueryToolDTO
              - …
            - CreateSlackSendMessageToolDTO
              - …
            - CreateSmsToolDTO
              - …
            - CreateTextEditorToolDTO
              - …
            - CreateTransferCallToolDTO
              - …
            - CreateSipRequestToolDTO
              - …
            - CreateVoicemailToolDTO
              - …
        - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
        - `toolRefs` ToolRef[] — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time).
          - `toolId` string, uuid, required — This is the unique identifier of the tool whose version is being pinned.
          - `version` string, required — Public version label of the tool, e.g. "v3"
        - `knowledgeBase` CreateCustomKnowledgeBaseDTO
          - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
          - `server` Server, required
            - `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
              - …
        - `provider` 'openai', required — This is the provider that will be used for the model.
        - `model` 'gpt-5.6-sol' | 'gpt-5.6-terra' | 'gpt-5.6-luna' | 'gpt-5.5' | 'chat-latest' | 'gpt-5.4' | 'gpt-5.4-mini' | 'gpt-5.4-nano' | 'gpt-5.2' | 'gpt-5.2-chat-latest' | 'gpt-5.1' | 'gpt-5.1-chat-latest' | 'gpt-5' | 'gpt-5-chat-latest' | 'gpt-5-mini' | 'gpt-5-nano' | 'gpt-4.1-2025-04-14' | 'gpt-4.1-mini-2025-04-14' | 'gpt-4.1-nano-2025-04-14' | 'gpt-4.1' | 'gpt-4.1-mini' | 'gpt-4.1-nano' | 'chatgpt-4o-latest' | 'o3' | 'o3-mini' | 'o4-mini' | 'o1-mini' | 'o1-mini-2024-09-12' | 'gpt-4o-realtime-preview-2024-10-01' | 'gpt-4o-realtime-preview-2024-12-17' | 'gpt-4o-mini-realtime-preview-2024-12-17' | 'gpt-realtime-2025-08-28' | 'gpt-realtime-mini-2025-12-15' | 'gpt-realtime-2' | 'gpt-4o-mini-2024-07-18' | 'gpt-4o-mini' | 'gpt-4o' | 'gpt-4o-2024-05-13' | 'gpt-4o-2024-08-06' | 'gpt-4o-2024-11-20' | 'gpt-4-turbo' | 'gpt-4-turbo-2024-04-09' | 'gpt-4-turbo-preview' | 'gpt-4-0125-preview' | 'gpt-4-1106-preview' | 'gpt-4' | 'gpt-4-0613' | 'gpt-3.5-turbo' | 'gpt-3.5-turbo-0125' | 'gpt-3.5-turbo-1106' | 'gpt-3.5-turbo-16k' | 'gpt-3.5-turbo-0613' | 'gpt-5.6-luna:westus3' | 'gpt-5.6-terra:westus3' | 'gpt-5.6-sol:westus3' | 'gpt-5.4:eastus2' | 'gpt-5.4:swedencentral' | 'gpt-5.4-mini:eastus2' | 'gpt-5.4-mini:swedencentral' | 'gpt-5.4-nano:eastus2' | 'gpt-5.4-nano:swedencentral' | 'gpt-5.2:eastus2' | 'gpt-5.2:swedencentral' | 'gpt-5.1:eastus2' | 'gpt-5.1:swedencentral' | 'gpt-5:eastus2' | 'gpt-5:swedencentral' | 'gpt-5:canadaeast' | 'gpt-5:eastus' | 'gpt-5:westeurope' | 'gpt-5:germanywestcentral' | 'gpt-5:polandcentral' | 'gpt-5:spaincentral' | 'gpt-5-mini:eastus2' | 'gpt-5-mini:swedencentral' | 'gpt-5-mini:westeurope' | 'gpt-5-mini:germanywestcentral' | 'gpt-5-mini:polandcentral' | 'gpt-5-mini:spaincentral' | 'gpt-5-nano:eastus2' | 'gpt-5-nano:swedencentral' | 'gpt-4.1-2025-04-14:westus' | 'gpt-4.1-2025-04-14:eastus2' | 'gpt-4.1-2025-04-14:eastus' | 'gpt-4.1-2025-04-14:westus3' | 'gpt-4.1-2025-04-14:northcentralus' | 'gpt-4.1-2025-04-14:southcentralus' | 'gpt-4.1-2025-04-14:westeurope' | 'gpt-4.1-2025-04-14:germanywestcentral' | 'gpt-4.1-2025-04-14:polandcentral' | 'gpt-4.1-2025-04-14:spaincentral' | 'gpt-4.1-mini-2025-04-14:westus' | 'gpt-4.1-mini-2025-04-14:eastus2' | 'gpt-4.1-mini-2025-04-14:eastus' | 'gpt-4.1-mini-2025-04-14:westus3' | 'gpt-4.1-mini-2025-04-14:northcentralus' | 'gpt-4.1-mini-2025-04-14:southcentralus' | 'gpt-4.1-mini-2025-04-14:westeurope' | 'gpt-4.1-mini-2025-04-14:germanywestcentral' | 'gpt-4.1-mini-2025-04-14:polandcentral' | 'gpt-4.1-mini-2025-04-14:spaincentral' | 'gpt-4.1-nano-2025-04-14:westus' | 'gpt-4.1-nano-2025-04-14:eastus2' | 'gpt-4.1-nano-2025-04-14:westus3' | 'gpt-4.1-nano-2025-04-14:northcentralus' | 'gpt-4.1-nano-2025-04-14:southcentralus' | 'gpt-4o-2024-11-20:swedencentral' | 'gpt-4o-2024-11-20:westus' | 'gpt-4o-2024-11-20:eastus2' | 'gpt-4o-2024-11-20:eastus' | 'gpt-4o-2024-11-20:westus3' | 'gpt-4o-2024-11-20:southcentralus' | 'gpt-4o-2024-11-20:westeurope' | 'gpt-4o-2024-11-20:germanywestcentral' | 'gpt-4o-2024-11-20:polandcentral' | 'gpt-4o-2024-11-20:spaincentral' | 'gpt-4o-2024-08-06:westus' | 'gpt-4o-2024-08-06:westus3' | 'gpt-4o-2024-08-06:eastus' | 'gpt-4o-2024-08-06:eastus2' | 'gpt-4o-2024-08-06:northcentralus' | 'gpt-4o-2024-08-06:southcentralus' | 'gpt-4o-mini-2024-07-18:westus' | 'gpt-4o-mini-2024-07-18:westus3' | 'gpt-4o-mini-2024-07-18:eastus' | 'gpt-4o-mini-2024-07-18:eastus2' | 'gpt-4o-mini-2024-07-18:northcentralus' | 'gpt-4o-mini-2024-07-18:southcentralus' | 'gpt-4o-2024-05-13:eastus2' | 'gpt-4o-2024-05-13:eastus' | 'gpt-4o-2024-05-13:northcentralus' | 'gpt-4o-2024-05-13:southcentralus' | 'gpt-4o-2024-05-13:westus3' | 'gpt-4o-2024-05-13:westus' | 'gpt-4-turbo-2024-04-09:eastus2' | 'gpt-4-0125-preview:eastus' | 'gpt-4-0125-preview:northcentralus' | 'gpt-4-0125-preview:southcentralus' | 'gpt-4-1106-preview:australiaeast' | 'gpt-4-1106-preview:canadaeast' | 'gpt-4-1106-preview:france' | 'gpt-4-1106-preview:india' | 'gpt-4-1106-preview:norway' | 'gpt-4-1106-preview:swedencentral' | 'gpt-4-1106-preview:uk' | 'gpt-4-1106-preview:westus' | 'gpt-4-1106-preview:westus3' | 'gpt-4-0613:canadaeast' | 'gpt-3.5-turbo-0125:canadaeast' | 'gpt-3.5-turbo-0125:northcentralus' | 'gpt-3.5-turbo-0125:southcentralus' | 'gpt-3.5-turbo-1106:canadaeast' | 'gpt-3.5-turbo-1106:westus' | 'gpt-4.1:australiaeast' | 'gpt-4o:australiaeast' | 'gpt-5.4-mini:australiaeast', required — This is the OpenAI model that will be used. When using Vapi OpenAI or your own Azure Credentials, you have the option to specify the region for the selected model. This shouldn't be specified unless you have a specific reason to do so. Vapi will automatically find the fastest region that make sense. This is helpful when you are required to comply with Data Residency rules. Learn more about Azure regions here https://azure.microsoft.com/en-us/explore/global-infrastructure/data-residency/. @default undefined
        - `fallbackModels` string[] — These are the fallback models that will be used if the primary model fails. This shouldn't be specified unless you have a specific reason to do so. Vapi will automatically find the fastest fallbacks that make sense.
        - `toolStrictCompatibilityMode` 'strip-parameters-with-unsupported-validation' | 'strip-unsupported-validation' — Azure OpenAI doesn't support `maxLength` right now https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/structured-outputs?tabs=python-secure%2Cdotnet-entra-id&pivots=programming-language-csharp#unsupported-type-specific-keywords. Need to strip. - `strip-parameters-with-unsupported-validation` will strip parameters with unsupported validation. - `strip-unsupported-validation` will keep the parameters but strip unsupported validation. @default `strip-unsupported-validation`
        - `promptCacheRetention` 'in_memory' | '24h' — This controls the prompt cache retention policy for models that support extended caching (GPT-4.1, GPT-5 series). - `in_memory`: Default behavior, cache retained in GPU memory only - `24h`: Extended caching, keeps cached prefixes active for up to 24 hours by offloading to GPU-local storage Only applies to models: gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna, gpt-5.5, chat-latest, gpt-5.4, gpt-5.4-mini, gpt-5.4-nano, gpt-5.2, gpt-5.1, gpt-5.1-codex, gpt-5.1-codex-mini, gpt-5.1-chat-latest, gpt-5, gpt-5-codex, gpt-4.1 @default undefined (uses API default which is 'in_memory')
        - `promptCacheKey` string — This is the prompt cache key for models that support extended caching (GPT-4.1, GPT-5 series). Providing a cache key allows you to share cached prefixes across requests. @default undefined
        - `reasoningEffort` 'minimal' | 'none' | 'low' | 'medium' | 'high' | 'xhigh' — Reasoning effort for reasoning-capable OpenAI models. For `gpt-realtime-2`: forwarded to V2 stream's session.update as `reasoning.effort`. For non-realtime OpenAI models, model-aware validation limits newly public values while preserving the existing four-value storage contract.
        - `temperature` number — This is the temperature that will be used for calls. Default is 0.5.
        - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
        - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
        - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
      - OpenRouterModel
        - `messages` OpenAIMessage[] — This is the starting state for the conversation.
          - `content` string, nullable, required
          - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
        - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
          - union
            - CreateApiRequestToolDTO
              - …
            - CreateBashToolDTO
              - …
            - CreateCodeToolDTO
              - …
            - CreateComputerToolDTO
              - …
            - CreateDtmfToolDTO
              - …
            - CreateEndCallToolDTO
              - …
            - CreateFunctionToolDTO
              - …
            - CreateGoHighLevelCalendarAvailabilityToolDTO
              - …
            - CreateGoHighLevelCalendarEventCreateToolDTO
              - …
            - CreateGoHighLevelContactCreateToolDTO
              - …
            - CreateGoHighLevelContactGetToolDTO
              - …
            - CreateGoogleCalendarCheckAvailabilityToolDTO
              - …
            - CreateGoogleCalendarCreateEventToolDTO
              - …
            - CreateGoogleSheetsRowAppendToolDTO
              - …
            - CreateHandoffToolDTO
              - …
            - CreateMcpToolDTO
              - …
            - CreateQueryToolDTO
              - …
            - CreateSlackSendMessageToolDTO
              - …
            - CreateSmsToolDTO
              - …
            - CreateTextEditorToolDTO
              - …
            - CreateTransferCallToolDTO
              - …
            - CreateSipRequestToolDTO
              - …
            - CreateVoicemailToolDTO
              - …
        - `toolIds` string[] — These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.
        - `toolRefs` ToolRef[] — These are version-pinned references to tools. Each entry pins a specific version of a tool by `(toolId, version)`. When the same `toolId` appears in both `toolIds` and `toolRefs[]`, the `toolRefs` pin wins (the `toolIds` entry is dropped at write time).
          - `toolId` string, uuid, required — This is the unique identifier of the tool whose version is being pinned.
          - `version` string, required — Public version label of the tool, e.g. "v3"
        - `knowledgeBase` CreateCustomKnowledgeBaseDTO
          - `provider` 'custom-knowledge-base', required — This knowledge base is bring your own knowledge base implementation.
          - `server` Server, required
            - `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
              - …
        - `provider` 'openrouter', required
        - `model` string, required — This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b
        - `temperature` number — This is the temperature that will be used for calls. Default is 0.5.
        - `maxTokens` number — This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.
        - `emotionRecognitionEnabled` boolean — This determines whether we detect user's emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user's emotion from text. @default false
        - `numFastTurns` number — This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. Default is 0. @default 0
      - PerplexityAIModel
        - `messages` OpenAIMessage[] — This is the starting state for the conversation.
          - `content` string, nullable, required
          - `role` 'assistant' | 'function' | 'user' | 'system' | 'tool', required
        - `tools` union[] — These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.
          - union
            - CreateApiRequestToolDTO
              - …
            - CreateBashToolDTO
              - …
            - CreateCodeToolDTO
              - …
            - CreateComputerToolDTO
              - …
            - CreateDtmfToolDTO
              - …
            - CreateEndCallToolDTO
              - …
            - CreateFunctionToolDTO
              - …
- … truncated; see the full OpenAPI document linked below

## Changes

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

- **2026-04-22** `1b35309094b5` — 1 info
  - added the optional property `items/subscriptionLimits` to the response with the `200` status
- **2026-03-17** `de411bfe008a` — 1 warning, 1235 info
  - added the new `call.in-progress.error-providerfault-outbound-sip-408-request-timeout` enum value to the `items/endedReason` response property for the response status `200`
  - added the optional property `items/artifact/allOf[#/components/schemas/Artifact]/assistantActivations` to the response with the `200` status
  - added the optional property `items/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 `items/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
  - …1232 more
  - …this revision’s changelog is incomplete
- …earlier changes not shown

[Full history](https://skmtc.dev/vapiai/apis/vapi-api/changes/call/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)
