What’s new and what changed across the SignalWire platform.
To follow along in a feed reader, append .rss to this page’s URL.
Fixed: Dashboard SIP codec configuration had unclear Opus bitrate options
The Dashboard SIP codec configuration had unclear Opus bitrate options. This is now fixed.
Project API token format changed to a swapi_ prefix
New Project API tokens begin with swapi_ and are 42 characters long, replacing the previous
PT prefix and 50-character length. Personal Access Tokens and Project Signing Keys keep
their existing format.
Every token created before this change keeps working, with no deprecation and no end date, so there is nothing to migrate. A Project can hold tokens in both formats at once, and both authenticate identically through HTTP Basic auth. Treat a token as an opaque string rather than matching it against a pattern or assuming a fixed length.
Phone number address management added to the REST API
Link, re-point, or remove the resource that handles a phone number’s calls or messages
without opening the Dashboard. Every number you own has one address per channel, so
List phone number addresses
shows each number’s calling and messaging addresses and the resource assigned to each.
Link a resource to a phone number
assigns a resource to an unassigned channel,
Update the resource for a phone number
re-points or renames it, and
Remove the resource from a phone number
unassigns it while keeping the number.
Default AI voice changed to ElevenLabs "Mark"
AI agents that don’t specify a voice now speak with ElevenLabs’ “Mark”, a higher quality voice included in the regular AI agent price. The default voice can change over time, so applications that need a specific voice should set one explicitly.
Set a voice in the AI Agent SDK or with
voice strings in SWML,
and browse and audition available voices.
Caller ID name management added to the REST API
Set, check, and remove the caller ID name (CNAM) shown to call recipients for your project’s phone numbers,
without opening the Dashboard.
Request a caller ID name queues the name for compliance review,
Get the caller ID name returns its status while you wait for a decision,
and Clear the caller ID name removes an applied name.
Caller ID name is available only for numbers whose carrier offers it; requests for other numbers return 422.
See Caller ID & CNAM for how the name reaches call recipients.
Space Administration API added to the REST API
Manage your Space over REST instead of in the Dashboard: rename it, set its geographic permissions,
invite and remove members and choose which Projects each member can reach, read the balance and top it up,
configure low balance notifications and auto top-up, maintain the billing profile, list and download monthly
statements as JSON, CSV, or PDF, and read usage, payment history, and payment methods.
Every endpoint lives under /api/space, so none takes a Project in its path.
Personal access tokens accepted on the Projects and Project Tokens APIs
Create and delete root Projects over the API by authenticating
Create a project and
Delete a project with a Personal access token; omit
parent_project_id to create a root Project. A root Project can be deleted only after its Subprojects
are removed (subprojects_must_be_removed), and the last Project in a Space can’t be deleted
(last_project_cannot_be_deleted). Then give the new Project its first credential with
Create API token, naming it in project_id.
With a Project API token, both APIs behave as before and remain limited to Subprojects.
Multilingual agents that switch languages and voices in real time
The new multilingual AI parameter accepts an array of language-voice pairs.
The AI agent continuously detects the other party’s language,
and switches to the configured TTS voice (and language) whenever it changes.
The multilingual and languages objects within the AI method are mutually exclusive.
See ai.multilingual.
AI agent text chat added
You can now chat by text with AI agents that were previously reachable only by voice. In the REST API, AI Chat is a single, unified JSON-RPC-style Send AI chat methods endpoint with six methods.
The Python Server SDK wraps the endpoint in AIChatClient
and ChatGateway.
JSON-RPC errors are listed with the rest of the error codes.
Default TTS engine changed from Google to ElevenLabs
Voice id strings
that don’t specify an engine now resolves against elevenlabs instead of gcloud.
Default engines can change. Ensure your agent continues using its configured voice by always declaring the engine explicitly.
E911 self-service added to the REST API
Registering an emergency address and enabling E911 on a US phone number is now self-service, and no longer requires a support ticket.
Create a carrier-validated address, assign it to the number, then poll until e911_status reads active.
To get started, read the E911 guide and review the API reference.
Six new text-to-speech engines
You can now use the Groq, Mistral, Grok, Smallest.ai, Fish Audio, and Speechify TTS engines on the SignalWire platform.
playai-turbo is now groq-tts
Groq retired PlayAI in December 2025.
The engine is renamed groq-tts and repointed at Canopy Labs’ Orpheus, defaulting to canopylabs/orpheus-v1-english.
Arabic voices are available by selecting the canopylabs/orpheus-arabic-saudi model, or its shorthand arabic.
See Groq for the voice list.
Rime's arcana model is deprecated, falls back to coda
Rime retired its arcana model.
Applications that invoke it will fall back to coda, which shares voice names.
Additionally, the coda model now uses the same sampling parameters as other Rime models:
repetition_penalty, temperature, top_p, and max_tokens.
See Rime.
Alias address management added to the REST API
Create, rename, and delete alias addresses from your own code instead of the Dashboard.
An alias is a named route in the public or private context, such as /public/support,
that forwards calls and messages to the resource you point it at.
Create alias address takes a name and the resource_id of its handler,
Update alias address renames it or changes its channels, codecs, or context,
and Delete alias address removes it.
The handler can’t be changed after creation: delete the alias and create a new one instead.