Archive.
Posts originally published elsewhere, collected here with their canonical source.
108 posts
2026
Voice agent multilingual language list is now server-drivenGET /v1/agents/voices now returns a multilingual_languages field listing every language an agent may declare in additional_languages, so language pickers render from the live set instead of a hard-coded list that drifts out of date.Voice Agentsvia speechify.ai
Widget error reporting and startAgent connect-failure contractThe voice-agent widget now reports real failure codes on widget.error instead of always-unknown, and startAgent() connect failures arrive on the promise rejection rather than duplicating across onError and the rejection channel.Widgetvia speechify.ai
Models list now reports per-model endpoints and curated-voice flagGET /v1/audio/models now returns endpoints and curated_voices per model, so a model picker can show only valid synthesis routes and reject unsuitable voice selections before the request reaches the server.TTSvia speechify.ai
Multilingual voiceover with the Speechify API and simba-3.0Generate the same script in English, German, Spanish, French, Italian, and Portuguese with the Speechify TTS API. Pick a simba-3.0 voice for each locale, call POST /v1/audio/speech per language, keep the key server-side.TTSvia speechify.ai
Widget now served from cdn.speechify.ai; new flow_budget_exhausted call end reasonNew 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.Widgetvia speechify.ai
Widget bundle compression and session spend-limit 402The voice-agent widget is now served compressed - 676 kB down to 190 kB when it was measured - supports version-pinned URLs with subresource integrity, and session creation returns 402 when a spend limit or budget is hit rather than a 500.Widgetvia speechify.ai
TTS 404s now name the fix instead of a generic not-foundPOST /v1/audio/speech, /stream, and /stream/with-timestamps now return voice_not_found or a model-not-found message on a missing voice or model, instead of an opaque passthrough 404.TTSvia speechify.ai
Speech generation in the Vercel AI SDK with SpeechifyThe AI SDK ships generateSpeech() but no Speechify provider. So we wrote one: a dependency-free custom speech model that maps POST /v1/audio/speech onto the SDK's SpeechModelV4 interface, key held server-side in a Next.js route.Next.jsvia speechify.ai
Free tier TTS requests get a burst allowanceFree-tier /v1/audio/* requests get a 10-request burst bucket instead of capping at the 1 req/s sustained rate, so a first quickstart script no longer 429s on its second call.APIvia speechify.ai
Every public API header now has one canonical, un-prefixed nameSpeechify-Request-Id and RateLimit-* are now the canonical header names across the public API; the old X-prefixed spellings keep working until 2027-07-24.APIvia speechify.ai