Widget delivered from cdn.speechify.ai; ‘flow_budget_exhausted’ call end reason documented

The voice-agent widget now ships from cdn.speechify.ai

New widget embeds load the bundle from cdn.speechify.ai:

https://cdn.speechify.ai/widget/agents.js

That URL tracks the current release and is cached for five minutes, so a correction reaches a returning visitor quickly. It is what the docs and console snippets now hand you.

If your change-control process needs a bundle that never moves, request an exact version instead - https://cdn.speechify.ai/widget/v<MAJOR>.<MINOR>.<PATCH>/agents.js is immutable, cached for a year, and safe to protect with integrity=. Pin the version you actually tested: a pin never receives later fixes, and a version we do not serve returns 404 rather than falling back to a different build. The embed guide has the current release.

The existing https://api.speechify.ai/v1/widget/agents.js URL keeps working. Both hosts serve the same features: immutable versioned builds, subresource integrity, source maps, and a build stamp at window.__SPEECHIFY_WIDGET_VERSION__.

For strict content-security policies, add cdn.speechify.ai to the script-src directive.

flow_budget_exhausted added to end_reason

Every conversation carries an end_reason field on the Conversation resource. One of the existing values, flow_budget_exhausted, is now documented in the Conversation schema:

The agent’s flow ran for longer than the total per-call flow-execution budget and was ended by the runtime. A backstop above every call-duration ceiling; a call that reaches it has been looping rather than conversing.

This is a runtime safety net, not a call-duration policy. The per-call duration limit on your plan (or the agent-level max_call_duration_seconds) is the primary cap; flow_budget_exhausted catches calls where the flow runtime itself exceeds its execution budget - typically a loop the duration watchdog couldn’t intercept. If you see this reason on a conversation, check the agent’s flow definition for a node that may be running unbounded iterations.