Markdown source view
The fullscreen global prompt and playbook instruction editors can now be switched to their markdown source and edited as plain text, so you can see and change exactly what the agent will read. Use Show markdown source in the floating actions, and Show rendered markdown to switch back.
Source mode has syntax highlighting and tab indentation, and your choice is remembered per editor. The rendered view is still the default, so nothing changes unless you switch. Copying from the rendered view now gives you markdown.

Transcript keyword search
You can now find transcripts by what was actually said in them. Search for a phrase and the list narrows to conversations containing it, with each result showing how many messages matched and a short excerpt around the first hit.
You can also narrow to just what the user said, or just the agent. Search terms can be up to 256 characters, and the same filter is available on the transcript search API.

Max conversation duration
Voice conversations can now run up to sixty minutes, double the previous ceiling. You can set the limit from Behaviour → Session & timeout.
Agents that had the setting switched off move to a thirty-minute default. If you previously entered a value above thirty minutes, note that it was silently capped before and will now apply in full.

MCP token authentication
The Voiceflow MCP server now accepts a personal access token as a bearer credential, so a client that cannot open a browser for OAuth can connect using the same token that authenticates the REST API and the CLI. Send it in the Authorization header instead of completing the browser sign-in. The OAuth flow is unchanged.
Trace filtering on the conversation endpoint
A caller of the stable conversation endpoint can now list trace types to drop from the response, so an integration only receives the traces it renders. Send a config object alongside the action with excludeTypes listing the types to drop. Omit it and every trace comes back as before.
One trace is always returned even when its type is excluded: the debug trace reporting that the credit limit was reached.
Late variable writes
A variable set after the agent has already replied, which is the normal case for an asynchronous tool that finishes late, now survives into the following turn instead of being quietly reverted. The agent reads what was actually written.
Nothing to configure. If your agent was built to expect late writes to be discarded, note that it will now see the updated values instead.
Multilingual Cartesia voices
Cartesia text-to-speech now covers over forty languages, up from fifteen. Each voice declares which languages it speaks, and the preview sample plays in the language you selected. Choose a provider, voice and language from Settings → Behaviour → Voice output.
The voice menu now filters by language, so a voice that does not support the language you pick will not appear in the list. Existing selections are untouched.
Knowledge base logs in evaluations
Knowledge base logs joins Playbook, Workflow and Tool logs in an evaluation’s Log visibility settings. With it on, the evaluating model can see the knowledge base searches your agent ran, so a criterion about whether an answer came from your content is something it can actually check. As with the other log types, including them makes each prompt longer and raises the average cost per evaluation.

Parallel tool calls
When an agent makes several tool calls in a single turn, all of them now run and every result comes back. Previously all but the last were discarded, so an agent that searched the knowledge base three times answered from one search.
Nothing to configure. This covers every kind of tool call an agent makes in a turn, including knowledge base searches, API tools, functions and integrations. Each result is matched back to the call that asked for it, and turns that make several calls are faster.
Tool message traces
The message an agent speaks while a slow tool runs now reaches applications that call the API without streaming. It arrives as an ordinary text trace for chat or a speak trace for voice, generated through the same path as any other agent message. Previously it was dropped.
Nothing to configure. If your integration consumes completion events, it keeps receiving the message as a completion sequence. If it does not, responses from non-streaming endpoints now carry one additional trace.
Out-of-credit call handling
Phone calls are now declined when your organization has run out of credits, instead of connecting to an agent that cannot respond. The caller hears that no agents are available. A test call from the builder tells you to add credits.
Organization admins are emailed when this occurs.
Personal access tokens
You can now create a personal access token with an expiry you choose, and use it in place of the shared project API key for Voiceflow’s APIs and the CLI. Create and revoke tokens from Settings → Access tokens. Project API keys will keep working.
Pick an expiry when you create a token, and copy the value once. A searchable table lists your tokens with their expiry and the actions available for each.

Live transcripts
You can now follow a conversation while it is still in progress. Open Transcripts and click a conversation that has not ended, and each turn appears as it happens while the view scrolls itself, so you no longer have to wait for a conversation to finish before you can read it.
The view refreshes every four seconds and pauses while the browser tab is in the background. Once the conversation closes it keeps listening briefly so the final message still arrives, then settles.

Tag tools, playbooks, and workflows in your instructions
You can now reference a resource directly instead of naming it in plain text. Press / in the global prompt, agent instructions, or playbook instructions, choose a type (playbook, workflow, system tool, or tool), then pick from your project. It’s inserted as a chip bound to that resource. Variables continue to be referenced using {.
If a tagged resource isn’t available in that context, the chip flags it rather than silently failing.

Markdown editor
The global prompt, agent instructions, and playbook instructions now use a Markdown editor. Structure your instructions with headings, lists, bold and italic, either with standard Markdown shortcuts (## for a heading, **bold**, > for a quote) or by pressing / to open the formatting menu. Agents built from a prompt come back formatted this way by default.
Existing instructions migrate automatically. The underlying data is unchanged, only how it’s rendered and edited.

Session lifecycle webhook: richer payloads, .v2 events deprecated
All four session lifecycle events (runtime.session.start, runtime.session.end, runtime.call.start and runtime.call.end) now carry the metadata that previously appeared only on their .v2 variants: versionID, transcriptID, versionVariant, projectEnvironmentID and projectEnvironmentAlias, plus endReason on runtime.session.end and sessionID on the call events. sessionID on call events is new information: call and session events can now be correlated with each other for the first time.
These fields are optional and nullable. The .v2 events only fired when every one of them was known, whereas the standard events fire on every session and call, so your handler should tolerate null. versionID carries the same value as environmentID.
Deprecation: runtime.session.start.v2, runtime.call.start.v2 and runtime.call.end.v2 will stop firing on October 9, 2026. Until then they continue to be delivered alongside their replacements, so you can migrate at your own pace. Switch to the event name without the .v2 suffix.
runtime.session.end.v2 has been removed. It never fired, because its trigger condition depended on data that was never recorded, so it had no subscribers.
We’ve also clarified a point that causes recurring confusion: session events fire on every channel, chat included. A voice conversation emits both runtime.call.* and runtime.session.* because a call and a session are different things with different end conditions. See Session lifecycle webhook for the full breakdown.
Generative tool messages
In addition to scripted tool messages, you can now provide generative tool messages that use the conversation history to provide a contextually correct tool message at that point in the conversation. You can accompany generative tool messages with examples as hints for how your agent should reply. Generative tool messages also work nicely in multilingual agents and will reply in the language of the current conversation.

Handoff configuration
A Live agent handoff step’s Configuration field now controls the wait-time message and can hide file upload for the duration of a handoff. waitTimeMessage takes None, Delay, Time or Position; a mode your provider cannot render falls back to that provider’s default rather than turning the message off. disableFileUpload hides the widget’s upload control, and it stays hidden if the visitor reopens the chat.
Variables can now be written into the Configuration JSON the normal quoted way without voiding the rest of the object, and an invalid key drops only itself rather than the whole object. If you use Kustomer, Genesys, Ujet or Dixa, note that this changes what an untouched step sends to them.
Project Analytics Updates
We made it easier to understand your agent’s performance and ROI, by introducing a summary section on the Analytics page. Key evaluations and metrics now sit at the top: resolution rate and customer satisfaction are surfaced by default, alongside total conversations, spend, and average cost per conversation.
A number of new metrics were also added. This includes:
- LLM Cost
- TTS Cost
- SST Cost
Environment Protection
You can now lock down individual environments so only admins or owners can publish or merge into them. Turn on Environment protection from the environment’s ••• menu in Settings → Environments. Everyone else keeps their normal access to build and test - they just can’t merge changes into that environment.
This is most useful on Main and on any environment carrying live traffic. Anyone can still create a new environment, this protects production environments from accidental or unauthorized changes.

Cost limit per conversation
You can now set a maximum spend per conversation. Define a dollar amount, and once a session’s cost exceeds it, Voiceflow ends the session automatically - a hard ceiling on any single conversation, no matter how long it runs or how many tools it calls.
For voice calls, this pairs with Max conversation duration: duration caps how long a conversation lasts, while cost limit caps what it spends. A short conversation that hammers an expensive model can cost more than a long, quiet one, so the two guardrails catch different failure modes.
As with duration, you can set an optional End message that’s sent before the session closes.
This setting is off by default. Find it in Settings → Behaviour.


