> This page is for Platform.

> Fetch clean Markdown by appending `.md` to any page URL under https://signalwire.com/docs or requesting it with the HTTP header `Accept: text/markdown`. The root index at https://signalwire.com/docs/llms.txt lists the available documentation indexes.

# Changelog

> New capabilities, changed defaults, and deprecations across the SignalWire platform, newest first.

What's new and what changed across the SignalWire platform.

To follow along in a feed reader, append `.rss` to this page's URL.

## September 28, 2026

## 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](/docs/platform/phone-numbers) section of
the Dashboard.

## September 21, 2026

## Fixed: Dashboard SIP codec configuration had unclear Opus bitrate options

The Dashboard SIP codec configuration had unclear Opus bitrate options. This is now fixed.

## September 14, 2026

## 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](/docs/apis/authorization). Treat a token as
an opaque string rather than matching it against a pattern or assuming a fixed length.

Find and create tokens under [API credentials](/docs/platform/your-signalwire-api-space) in the
Dashboard, or with [Create API token](/docs/apis/rest/project-tokens/create-token).

## 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](/docs/apis/rest/phone-number-addresses/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](/docs/apis/rest/phone-number-addresses/create-phone-number-address)
assigns a resource to an unassigned channel,
[Update the resource for a phone number](/docs/apis/rest/phone-number-addresses/update-phone-number-address)
re-points or renames it, and
[Remove the resource from a phone number](/docs/apis/rest/phone-number-addresses/delete-phone-number-address)
unassigns it while keeping the number.

The API is in beta and may change. It assigns handlers only and never purchases or releases a number.

## September 5, 2026

## 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](/docs/server-sdks/guides/voice-language) or with
[`voice` strings in SWML](/docs/swml/reference/calling/ai/languages#use-voice-strings),
and [browse and audition available voices](/docs/platform/voice/tts).

## August 31, 2026

## 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](/docs/apis/rest/caller-id-name/request-caller-id-name) queues the name for compliance review,
[Get the caller ID name](/docs/apis/rest/caller-id-name/retrieve-caller-id-name) returns its `status` while you wait for a decision,
and [Clear the caller ID name](/docs/apis/rest/caller-id-name/clear-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](/docs/platform/voice/how-to-set-caller-id-or-cnam) for how the name reaches call recipients.

## August 20, 2026

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

The API authenticates with a [Personal access token](/docs/apis/authorization#personal-access-tokens),
a user-level credential created from your user menu in the Dashboard that carries your owner or admin role
rather than a Project's scopes. Start with [Retrieve the space](/docs/apis/rest/space/get-space),
[List members](/docs/apis/rest/space/members/list-members), and
[Retrieve the balance](/docs/apis/rest/space/balance/get-balance).

## Personal access tokens accepted on the Projects and Project Tokens APIs

Create and delete root Projects over the API by authenticating
[Create a project](/docs/apis/rest/projects/create-subproject) and
[Delete a project](/docs/apis/rest/projects/delete-subproject) 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](/docs/apis/rest/project-tokens/create-token), naming it in `project_id`.
With a Project API token, both APIs behave as before and remain limited to Subprojects.

## August 19, 2026

## 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`](/docs/swml/reference/calling/ai/multilingual).

## August 17, 2026

## 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](/docs/apis/rest/ai-chat/chat-methods) endpoint with six methods.

The Python Server SDK wraps the endpoint in [`AIChatClient`](/docs/server-sdks/reference/python/agents/ai-chat-client)
and [`ChatGateway`](/docs/server-sdks/reference/python/agents/chat-gateway).
JSON-RPC errors are listed with the rest of the [error codes](/docs/apis/error-codes).

## August 13, 2026

## Default TTS engine changed from Google to ElevenLabs

[Voice id strings](/docs/platform/voice/tts#use-voice-identifier-strings)
that don't specify an engine now resolves against `elevenlabs` instead of `gcloud`.

> **Always declare your engine**
>
> Default engines can change. Ensure your agent continues using its configured voice by always declaring the engine explicitly.

## August 6, 2026

## 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](/docs/platform/e911)
and review the [API reference](/docs/apis/rest/e-911-addresses/assign-e-911-address).

## August 5, 2026

## Six new text-to-speech engines

You can now use the [Groq](/docs/platform/voice/tts/groq-tts),
[Mistral](/docs/platform/voice/tts/mistral),
[Grok](/docs/platform/voice/tts/grok),
[Smallest.ai](/docs/platform/voice/tts/smallest),
[Fish Audio](/docs/platform/voice/tts/fish), and
[Speechify](/docs/platform/voice/tts/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](/docs/platform/voice/tts/groq-tts) 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](/docs/platform/voice/tts/rime).

## July 21, 2026

## 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](/docs/apis/rest/alias-addresses/create-alias-address) takes a `name` and the `resource_id` of its handler,
[Update alias address](/docs/apis/rest/alias-addresses/update-alias-address) renames it or changes its channels, codecs, or context,
and [Delete alias address](/docs/apis/rest/alias-addresses/delete-alias-address) removes it.
The handler can't be changed after creation: delete the alias and create a new one instead.

Two new validation codes, `invalid_channels` and `invalid_codecs`, are listed with the other [error codes](/docs/apis/error-codes).
See [Addresses](/docs/platform/addresses) for how contexts and aliases resolve.