What’s new and what changed across the SignalWire platform.
To follow along in a feed reader, append .rss to this page’s URL.
Search added to the Set an Emergency Address screen
Search your E911 addresses by label and address on the Set an Emergency Address screen in the Dashboard, instead of scrolling through every record to find the one to assign.
To manage emergency addresses and assign them to phone numbers, read Set up E911 in the Dashboard.
transport added to dial requests for external SIP destinations
Choose UDP, TCP, or TLS for SIP signaling when you dial a SIP URI outside SignalWire with
Send call commands. The transport also controls media
encryption: udp and tcp send unencrypted RTP, while tls offers SRTP. A request returns
422 when transport conflicts with a ;transport= parameter in the to URI.
Self-service move of Platform Free Trial numbers to your own 10DLC Campaign added
Move the US 10DLC number you used for Platform Free Trial to your own approved 10DLC Campaign yourself: assign the number to the Campaign, and SignalWire moves it off Platform Free Trial with no Support ticket needed. Once moved, the trial restrictions no longer apply, and the number’s messaging limits are those of the Campaign you assigned it to.
Fixed: WhatsApp document template headers sent with the wrong id when the URL contained "id"
WhatsApp template messages
with a document HEADER were sent with the wrong id when the document URL contained “id”.
This is now fixed.
Fixed: A phone number kept its old handler Resource after switching handlers
Switching a phone number’s handler to a different Resource left the number linked to the Resource it used before, so you couldn’t delete that Resource. The number now releases its previous handler Resource, and you can delete it.
Fixed: Using send_sms in a messaging SWML script returned an unclear error
Using the voice-only send_sms method in a
messaging SWML script returned an error message that didn’t
explain what went wrong. This is now fixed.
Fixed: Relay calling.pay ignored play prompts and used the default prompts
Relay calling.pay silently ignored a play prompt and used the default prompts instead.
This is now fixed.
Set custom prompts with the prompts parameter of pay in the
Python or
TypeScript Relay SDK.
Project API token list and regenerate endpoints added to the REST API
Rotate a Project API token without recreating it: Regenerate API token replaces a token’s value and keeps its ID, name, and permissions. The previous value stops working immediately, and the new one is returned only in that response. To find the ID of each token you can manage, use List API tokens, which never returns token values.
Every REST API Project token response, including
Create API token and
Update API token, now includes last_used_at,
the time the token last authenticated a request, and revoked_at, the time SignalWire revoked
the token’s value. A revoked token no longer authenticates until you regenerate it.
Semantic gates added to SWAIG functions
Require a yes/no check on the conversation before your AI agent can run a SWAIG function. You attach a question, such as “Has the caller explicitly asked to cancel their ride?”, and a decision model answers it before the function runs. If the answer doesn’t clear your threshold, the function doesn’t run and the agent gets a response you wrote instead.
Fixed: Platform Free Trial is including Canadian 10DLC numbers
Automated Platform Free Trial campaign registration has been corrected to trigger for US-10DLC numbers only.
Phone number release allowance changed to two early releases per month
Non-trial accounts can release up to two phone numbers each month within 14 days of purchase. Any additional number you release that month is subject to the standard 14-day hold after purchase, with no exceptions, to help prevent fraud and abuse.
Release a number from its page in the Phone Numbers section of the Dashboard.
Fixed: Dashboard SIP codec configuration had unclear Opus bitrate options
The Dashboard SIP codec configuration had unclear Opus bitrate options. This is now fixed.
Fixed: SWML errors when a YAML document contains an alias to an anchor
SWML errored when a YAML document contained an alias to an anchor. This is now fixed.
AI Sidecar added to SWML
Attach an AI observer to a live call with the
ai_sidecar SWML method. The sidecar listens to
both sides, evaluates the conversation after each customer turn, and sends agent-facing output
to your application as webhook callbacks. It never speaks on the call.
- Define what to watch for with
prompt, and set which leg is the customer withcustomer_role. - Output arrives as webhook events, including
insight,turn,tool_call, andfinal. - Tool calling through SWAIG functions and MCP servers lets the sidecar act on your systems mid-call.
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 Server SDKs 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.
Failed status callback added for calls blocked before dialing
Your StatusCallback URL now receives a final callback with CallStatus set to failed when SignalWire
stops a call you created with Create a call before dialing it,
as long as StatusCallbackEvent includes completed. Previously, these calls sent no callback.
Rate-limited calls include ErrorCode 20429, and the
voice status callback lists every reason.
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.