- Enhanced Artifact Plans: All
Artifact Plans
now support the following properties:
loggingEnabled
- Toggle to enable call logsloggingPath
- Custom path for call log uploadsstructuredOutputs
- Toggle for structured output extraction
-
Enhanced Artifact Management: You can now extract structured data during calls with the new
structuredOutputs
property inArtifact
. -
Improved Cost Analysis: You can now view detailed call costs with new fields in
Analysis Cost Breakdown
:
structuredOutput
- Cost for structured output evaluationstructuredOutputPromptTokens
- Prompt tokens for structured outputstructuredOutputCompletionTokens
- Completion tokens for structured output
- Phone Number Hooks: You can now configure hooks for call ending events with the new
Call Ending hook for phone numbers
and exclude events to exclude from the hook withthe relevant filter
- Handoff Tool and Dynamic Agent Routing: You can now hand off conversations when building multi-agent systems with
Assistant.model.tools[type=handoff]
. Supported destinations include:
- Assistant Destinations: Directly hand off to a specific assistant by assistantId or assistantName.
- Dynamic Destinations: Route handoffs dynamically via a webhook to your server, which can determine the destination assistant in real time. Custom parameters such as customer intent, sentiment, or area code can be passed to the webhook for advanced routing logic.
- Multiple Destinations: Support for both single handoff destination per tool with multiple tools (recommended for OpenAI) and multiple handoff destinations with one tool (recommended for Anthropic).
You can read more about how to configure the handoff tool in the API Reference
- Context Engineering for Handoffs: When handing off a conversation, you can now control what context is passed to the next assistant:
- All Messages: Pass the entire conversation history. Refer to Context Engineering Plan All
- Last N Messages: Pass only the most recent N messages. Refer to Context Engineering Plan LastNMessages
- None: Pass no prior context. Refer to Context Engineering Plan None This gives you fine-grained control over privacy, relevance, and prompt size during agent transitions.
-
Message Metadata: Tool Messages, Assistant Messages, and Developer Messages objects now support an optional metadata field, allowing you to attach arbitrary metadata to messages for downstream processing or analytics.
-
Pagination Meta Enhancement: You can now reference
itemsBeyondRetention
boolean in paginated responses to indicate if additional items exist beyond the retention window.
New: Call Metrics & Artifact Improvements
You can now access detailed call performance metrics and structured output IDs directly from your call artifacts.
Call.artifact.performanceMetrics.turnLatencies
Call.artifact.performanceMetrics.modelLatencyAverage
Call.artifact.performanceMetrics.voiceLatencyAverage
Call.artifact.performanceMetrics.transcriberLatencyAverage
Call.artifact.performanceMetrics.endpointingLatencyAverage
Call.artifact.performanceMetrics.turnLatencyAverage
During call: Access array of output IDs
Call.artifactPlan.structuredOutputIds
After call: Extracted outputs are stored here
Call.artifact.structuredOutputs
These improvements help you monitor, debug, and analyze your calls with greater detail.
New: Smarter Conditions & Security Filters
- New Condition & Filter Types: You can now use the following new condition and filter types to build more robust rejection plans and security filter plans:
- MessageTarget: Target specific messages by role and position for conditions using
Assistant.hooks.do[type=tool].tool.rejectionPlan.conditions[type=regex].target
. - GroupCondition: Combine multiple conditions using AND/OR logic, with support for recursive nesting using
Assistant.hooks.do[type=tool].tool.rejectionPlan.conditions[type=group]
. - RegexCondition: Flexible pattern matching, with full support for JavaScript regex and negation using
Assistant.hooks.do[type=tool].tool.rejectionPlan.conditions[type=regex]
. - LiquidCondition: Use Liquid templates for complex, context-aware logic using
Assistant.hooks.do[type=tool].tool.rejectionPlan.conditions[type=liquid]
. - Security Filters: New filter types for RCE, XSS, SSRF, SQL injection, prompt injection, and regex-based filtering using
Assistant.compliancePlan.securityFilterPlan.filters
.
- Tool Rejection Plans: You can now use
Assistant.hooks.do[type=tool].tool.rejectionPlan
in all tool calls to prevent accidental tool execution, enforce confirmation steps, and build more robust conversation flows. This helps you to define complex logic for when a tool call should be rejected, enhancing both safety and call experience. Rejection plans can be built using regex conditions, Liquid templates, or logical groups (AND/OR). For example, you can prevent anendCall
tool from executing unless the user says goodbye, or block a transfer if the user is actually asking a question.
Example:
- Security Filter Plans for Transcripts and Messages: You can now use
Assistant.compliancePlan.securityFilterPlan
to define how transcripts and messages are filtered against threats like SQL injection, XSS, prompt injection, and more. Choose betweensanitize
,reject
, orreplace
when threats are detected, and specify custom replacement text. User messages and transcript objects now include:
isFiltered
: Indicates if content was filtered for security.detectedThreats
: Lists detected threats.originalMessage
/originalTranscript
: Preserves original content if filtering occurred.
🎤 New Gladia Transcription Provider Support
-
Custom vocabulary support: Enable a custom vocabulary with
Gladia
usingAssistant.transcriber[provider="GladiaTranscriber"].customVocabularyEnabled
. You can also specify simple strings or detailed objects with fields for value, language, intensity, and alternative pronunciations usingAssistant.transcriber[provider="GladiaTranscriber"].customVocabularyConfig
- letting you fine-tune recognition of domain-specific terms. -
Endpointing & Speech Threshold: Configure endpointing time (wait time before considering speech ended) and speech sensitivity, enabling more accurate and responsive transcription with
Assistant.transcriber[provider="GladiaTranscriber"].endpointing
andAssistant.transcriber[provider="GladiaTranscriber"].speechThreshold
. -
Prosody & Audio Enhancer: Optionally enable prosody (for transcribing non-verbal cues like laughter) and audio enhancement for improved accuracy with
Assistant.transcriber[provider="GladiaTranscriber"].prosodyEnabled
andAssistant.transcriber[provider="GladiaTranscriber"].audioEnhancerEnabled
. -
Flexible Language Detection: Choose between manual and automatic language detection modes with
Assistant.transcriber[provider="GladiaTranscriber"].languageDetectionMode
. -
Confidence Thresholds & Hints: Discard low-confidence transcripts and provide context hints for improved accuracy with
Assistant.transcriber[provider="GladiaTranscriber"].confidenceThreshold
andAssistant.transcriber[provider="GladiaTranscriber"].hints
.
💳 Subscription Updates
Role-based access control (RBAC):
Enable RBAC for your subscription using Subscription.rbacEnabled
.
Retention settings:
Configure how long calls and chats are stored with Subscription.callRetentionDays
and Subscription.chatRetentionDays
.
Reset frequency:
Set how often included minutes reset using Subscription.minutesIncludedResetFrequency
.
Azure Speech Segmentation Strategy Tuning
- You can now tune
Assistant.transcriber[provider="AzureSpeechTranscriber"].segmentationStrategy
using"Default"
,"Time"
, and"Semantic"
strategies, offering more control over phrase boundary detection.
New Features & Enhancements
- Enhanced Call
Artifacts
: You can now store detailed information about call workflows and outcomes usingArtifact
objects. Key properties include:nodes
: History of workflow nodes executed during the call.messages
: All messages spoken during the call.logUrl
: New! Direct URL to detailed call logs for debugging.pcapUrl
: Packet capture URL for phone calls (provider:vapi
orbyo-phone-number
).recording
: Recording URL (requiresassistant.artifactPlan.recordingEnabled
).transcript
: Convenient full call transcript.variableValues
: Final workflow variable states.messagesOpenAIFormatted
: Spoken messages, formatted for OpenAI.
recordingUrl
, videoRecordingUrl
, stereoRecordingUrl
, and videoRecordingStartDelaySeconds
are now deprecated in favor of the new recording
and related properties within the Artifact
object.
- Improved Azure Speech Segmentation Tuning: You can now fine-tune speech segmentation in your
Azure Speech Transcriber
usingsegmentationStrategy
,segmentationMaximumTimeMs
, andsegmentationSilenceTimeoutMs
properties for better transcription control. This applies to bothAzure Speech Transcriber
andFallback Azure Speech Transcriber
.
The segmentationMaxTimeMs
property in AzureSpeechTranscriber
has been replaced by segmentationMaximumTimeMs
for consistency.
Deprecations
messagePlan
and backgroundDenoisingEnabled
are now part of Assistant.backgroundSpeechDenoisingPlan
instead of Assistant
and AssistantOverrides
directly.
stripeCustomerId
is now part of Subscription
instead of Org
.
segmentationMaxTimeMs
property has been renamed to segmentationMaximumTimeMs
for consistency.
-
Artifact Logging: You can now access call logs directly through the new
logUrl
property in theArtifact
schema, providing a direct URL to call logs for each workflow execution to aid in debugging and compliance. -
Azure Speech Transcriber Segmentation: You can now fine-tune speech segmentation in
AzureSpeechTranscriber
usingsegmentationStrategy
,segmentationMaximumTimeMs
, andsegmentationSilenceTimeoutMs
properties for better transcription control.
Breaking Changes
The following changes may require updates to your existing integrations:
-
The
messagePlan
andbackgroundDenoisingEnabled
properties have been removed fromAssistant
,AssistantOverrides
,CreateAssistantDTO
, andUpdateAssistantDTO
. UsebackgroundSpeechDenoisingPlan
instead for background denoising configuration. -
The
segmentationMaxTimeMs
property inAzureSpeechTranscriber
has been replaced bysegmentationMaximumTimeMs
for consistency. -
The
variables
field inArtifact
andNodeArtifact
has been replaced byvariableValues
to standardize how extracted data is stored and referenced.
-
Minimax Voice Provider Integration and Error Handling: You can now use MinimaxVoice as a voice provider in your assistants and workflows, with support for Minimax credentials for seamless authentication and integration. Additionally, calls can now terminate with Minimax-specific error reasons such as
pipeline-error-minimax-voice-failed
andcall.in-progress.error-vapifault-minimax-voice-failed
. This gives you access to customizable voice characteristics like pitch, speed, and emotion for more natural-sounding conversations. -
AssemblyAI Transcriber Updates: The AssemblyAITranscriber configuration has been simplified:
- The
enableUniversalStreamingApi
property has been removed. - The
formatTurns
property now defaults totrue
and no longer depends on the universal streaming API setting. - Several properties have updated descriptions and defaults, with references to the deprecated universal streaming API removed.
- The
-
Enhanced Chat and Session Events: New message types have been added for handling chat and session events:
chat.created
,chat.deleted
,session.created
,session.updated
, andsession.deleted
. These events are available in both ClientMessage and ServerMessage objects, giving you better control over interactive conversations. -
Expanded API Request Tool Capabilities: The ApiRequestTool now supports
PUT
,PATCH
, andDELETE
HTTP methods alongside the existingGET
andPOST
methods. This enables your tools to perform full CRUD operations on external APIs. -
Targeted Call Analysis: You can now specify
outcomeIds
in your AnalysisPlan to calculate specific outcomes during call analysis. This allows for more focused analytics based on your defined metrics and KPIs.
- Custom headers for custom LLM models: You can now add custom
headers
to bothCustom LLM Models
andWorkflow Custom Models
(including in assistants, squads, and workflows). This lets you send custom HTTP headers—such as for authentication or extra metadata—when Vapi calls your custom LLM API. Theheaders
property overrides default headers (exceptAuthorization
, which should be set via your custom-llm credential).