Widget now served from cdn.speechify.ai; new flow_budget_exhausted call end reason

New widget embeds load from cdn.speechify.ai - a floating URL that tracks the current release, plus immutable version pins for change-controlled sites - and the Conversation resource's end_reason field now documents flow_budget_exhausted, a runtime backstop for looping calls.

Developer Relations · SpeechifyAI Labs
1 min read

New widget embeds now point at cdn.speechify.ai instead of the API host:

<script src="https://cdn.speechify.ai/widget/agents.js"></script>

That tracks the current release, cached for five minutes, so a fix reaches a returning visitor in minutes rather than a day. It’s what the docs and the console snippet hand you.

If your change-control process needs a bundle that never moves, request an exact version - 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 tested and understand the trade: a pin never receives later fixes, and a version we don’t serve returns 404 rather than quietly falling back to another build. The embed guide carries the current release.

The existing https://api.speechify.ai/v1/widget/agents.js URL keeps working. If you use a strict CSP, add cdn.speechify.ai to script-src.

On the conversations side, the end_reason field on every conversation resource now documents flow_budget_exhausted. This is a runtime safety net above every call-duration ceiling: if the flow execution engine exceeds its total per-call budget (typically a loop the duration watchdog couldn’t intercept), the call ends cleanly with this reason instead of running indefinitely. If you see it, check your agent’s flow for a node that may be stuck in unbounded iterations.

See the docs changelog entry for the full Conversation schema reference.