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.
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.