Appearance
Voice
FreshVoice
For AI agents: a documentation index is available at the root level at /llms.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Whether building a UCaaS solution, modernizing a legacy IVR, augmenting CX with AI, or migrating from another provider’s APIs, our comprehensive technical references and guides have you covered.
Get started
Buy a phone number\ \ SignalWire phone numbers in the Dashboard Quickstart with AI\ \ Deploy a serverless voice AI Agent and call it over the PSTN in under 5 minutes with SWML Make your first phone calls\ \ The fundamentals of your first calling app Migrate a Twilio* application\ \ Get started with our Compatibility API No-code apps with Call Flow Builder\ \ Create a drag-and-drop calling application
Choose an API
SignalWire’s advanced APIs and elastic cloud infrastructure make it a breeze to build modern and powerful voice applications using both PSTN and SIP endpoints.
- SignalWire REST API: A robust, modern and flexible API for building integrated, advanced communications applications.
- Compatibility API: Ideal for porting code from other providers. It can run serverless, but it also supports Python, PHP, Node.js, and other languages.
- Realtime API: This API is ideal if you are an advanced developer and you want flexible, modern and realtime SDKs for Node.js.
SignalWire API\ \ High-quality, scalable, and secure voice API Compatibility API & cXML\ \ Easily migrate from Twilio and other providers RELAY SDK\ \ Next-gen server telephony applications powered by our RELAY WebSocket API RELAY Browser SDK\ \ Bring telephone capabilities to the browser with our Node.js SDK
Low-code and no-code solutions
Call Flow Builder\ \ Drag-and-drop, no-code call application builder SWML\ \ Write realtime, AI-integrated calling applications using simple JSON or YAML scripts
Popular guides
SIP trunking\ \ Route SIP traffic through the SignalWire platform to your PBX system. Make and receive phone calls with SWML\ \ Guide that focuses on how to make and receive phone calls via a SWML script.
Frequently asked questions
How many calls per second can I send?
You can send up to 1 CPS (Call Per Second) across your SignalWire Space.
Consult our Guide to Rate Limits for more information. Customers can also request additional increases to their Space limits.
Are calls queued as they go out?
Every Space has a default call backlog of 10k. SignalWire will send calls out at 1 call per second per phone number. If your backlog fills up past 10k, you will not be able to queue any more calls until it decreases. You can request an increase to this backlog here.
How do I enable higher throughput calling?
We do have offerings available for high throughput toll-free calling and high throughput SIP calling. Please reach out to Support@signalwire.com to get this process started.
Can you build an IVR (Interactive Voice Response) with SignalWire?
Yes, SignalWire has all the components to build a very powerful IVR! You could use SWML, the Compatibility SDK, or even build a video/voice solution using our Javascript SDKs.
Does SignalWire offer phone numbers to purchase?
Yes! You can purchase local long code, toll-free, and shortcode numbers from our carrier partners through the SignalWire platform. You can read about how to purchase numbers here.
What do I do if I can't find the specific area code or phone number that I need?
SignalWire is a communications platform, not a carrier. To make our customers’ lives easier, we integrate with our carrier peers so that you can buy numbers directly through us from them. That being said, the availability of numbers is totally reliant on our carrier. If you cannot find the area code you need, please create a Support ticket via the help link in your SignalWire Space and our team will do their best to get you the numbers you need. You can also port any number into SignalWire from another provider!
What is PSTN?
Public Switched Telephone Network (PSTN) is the network that carries your voice call when you call from a landline, cell phone, or DID (such as those SignalWire owns). This uses regular telephone infrastructure rather than SIP or other protocols.
What is SIP?
SIP (Session Initiation Protocol) refers to the process through which phone calls can take place over the internet (i.e. VOIP) instead of physical regular phone lines. This allows for greater worldwide reach, less physical requirements, and is more affordable/scalable for businesses.
How is SIP on SignalWire different from traditional SIP trunking?
A SIP trunk is just a container that holds multiple SIP lines. In a sense, it’s just an abstract version of traditional trunks, bundles of wire connecting switches.
What is BYOC (Bring Your Own Carrier)?
BYOC allows you to use SignalWire’s APIs, services, and programmability all while keeping your current SIP providers for outbound/inbound calling. If you are interested in BYOC, see our full guide to get started.
How many SIP channels can you have for each phone number?
You have unlimited inbound and 1CPS per phone number outbound. If you would like to send more than 1 SIP call per second per phone number, you can reach out to Support@signalwire.com to talk about raising your max throughput.
How many legs are in a SIP call?
The number of call legs is dependent on the call flow. A call is made up of multiple call legs where a call leg represents a relationship between two user agents. If you directly forward a call to a SIP endpoint, that is only two legs (inbound and outbound). If a call comes into SignalWire and is then forwarded to 4 SIP endpoints, that would be 5 legs.
Do you have Answering Machine Detection?
Yes, SignalWire will allow you to easily implement Answering Machine Detection (AMD) on your calls! AMD listens to the call to determine if the party that picked up is a real person or a voicemail machine. You can use this information to determine whether to leave a voicemail message or begin interacting with a real person. You can use AMD through detect_machine in SWML or detect_answering_machine using the Realtime SDK.
Do you have call recording capabilities?
Yes, call recording is possible through the Realtime SDK or SWML. Check out our guide on Recording Calls.
Do you have transcription capabilities?
Yes - transcription is possible using the Realtime SDK or through SWML’s AI agent capabilities. You can also set a callback in order to do something with your transcriptions when they’re received.
Do you have text-to-speech capabilities?
Yes - text to speech is simple with either the RELAY SDK or SWML’s play method.
What about speech-to-text capabilities?
Speech to text is available through SWML’s prompt method or you can collect speech and transcribe with Node.js using the RELAY SDK.
Do you have call whisper?
Call Whisper involves playing a short message before the callee accepts the call and connects to the caller. At this time, the caller will still hear ringing. This allows for the callee to screen the call and choose to accept/reject or gather additional information before connecting with the caller. Check out our Call Whisper guide for a SWML example.
How do I set Caller ID/CNAM?
The Caller Name (CNAM) is a feature that displays your Name or Company Name on the Caller ID display of the party you are calling. When it is set up, your Caller ID Name will display as text along with your Caller ID Number. The Caller ID is the actual phone number calling in, whereas the accompanying text that provides the identifying name for that number is called CNAM (a.k.a. “Caller Name”). Follow the steps here to get CNAM or caller ID set up.
Do you support ringless voicemail?
While it is possible to create ringless voicemail using SignalWire APIs, we do not provide support in creating this feature. Ringless voicemail is most commonly associated with spam to the carriers and therefore may not be able to be corrected if you run into problems.
Where are your nearest data hubs/centers?
We have an elastic swarm of servers all across the world and across different providers to ensure minimum latency and maximum uptime. If you are looking for more details or would like to request a node in a specific location, please reach out to sales@signalwire.com.
Is SignalWire PCI compliant?
Yes, SignalWire is PCI compliant. All applications built using SignalWire will also have to be built to maintain this compliance, for example: pausing/terminating any recording or transcription before accepting sensitive information.
Are there prohibited Voice use cases?
Yes, phishing and scam calls or calls to numbers that have been listed on a “Do Not Call” registry will be flagged as fraudulent. See the SignalWire Cloud Agreement for more details.
*Twilio and TwiML are trademarks of Twilio, Inc. SignalWire, Inc. and its products are not affiliated with or endorsed by Twilio, Inc.
Caller ID & CNAM
For AI agents: a documentation index is available at the root level at /llms.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Caller ID vs. caller name
The Caller ID is the phone number displayed to the called party; CNAM is the accompanying text (name or company) that some carriers display alongside it. CNAM only works on PSTN calls, for SIP-to-SIP calls, the displayed identity comes from the Caller ID field on your SIP endpoint.
When a phone call is made, the Caller ID (CLID) is routed to the destination’s carrier for delivery. The Caller Name (CNAM) text data is not sent out by the originating carrier, as they are separate services.
When the call arrives, the carrier for the destination end of the call will reference the inbound number against its local CNAM database. At this point, both a CLID number and CNAM text are usually delivered to the recipient’s (called party’s) phone when it rings through.
Set CNAM for PSTN numbers
To enable or modify a CNAM for a SignalWire phone number, open a support ticket by clicking the Create a ticket option, located under the Support button in the upper right corner of your SignalWire Dashboard. To display a company or personal name, you must provide either a copy of ID for a personal name, or proof of company through documents with your name listed for the company name.
In your ticket, please include the following:
The phone number that needs a CNAM
Name to display for the CNAM
CNAM is disallowed on toll-free numbers.
Canadian carriers do not read from the National CNAM registry, so CNAM will not display on calls to Canadian numbers.
CNAM is limited to 15 characters, including spaces.
Updates take up to 48 hours to propagate.
If your calls are being labeled as spam or scam, updating CNAM is one part of the fix. See Resolving spam labels and updating CNAM for the full remediation path.
Set caller ID for SIP credentials
On a SIP credential, two fields control the displayed identity:
- Calling another SIP endpoint, set the Caller ID field. This is the only way to display caller ID on SIP-to-SIP calls.
- Calling a PSTN number, set the Send As field to a purchased or verified number. If unset, the default behavior is to use a random number from your account.
Configure both fields in your SIP Endpoint settings.
A screenshot of the Sip Endpoint page, showing username, password, caller ID, and Send As fields
To set caller names by extension on SIP-to-SIP calls, configure that within your PBX. For example, Asterisk uses the Outbound Caller ID name option on the dialplan. Check your PBX documentation for details.
Verified caller ID
A verified caller ID is a phone number you already own (such as your mobile or office landline) that has been verified with SignalWire. Verified numbers are not ported, your original provider continues to service them. SignalWire does not charge for the number itself, only for usage on the SignalWire network.
Verified caller ID numbers can only be used for placing outbound calls. They cannot receive inbound calls through SignalWire.
To verify a number:
- In the SignalWire Dashboard, click Phone Numbers in the sidebar.
- Click the Verified tab, then click + New.
- Enter the phone number and click Call Me.
- Enter the verification code you receive via phone call and click Verify.
Once verified, the number appears in your verified numbers list and can be used as the outbound caller ID on any SIP credential. To set it for a specific credential, edit the credential and select the verified number under Send As.
Resolving spam labels
For AI agents: a documentation index is available at the root level at /llms.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Mobile devices sometimes label calls as Spam, Scam Likely, or Spam Risk. If your SignalWire numbers show one of these warnings, the label usually comes from third-party caller-reputation providers used by mobile carriers and device apps. This guide walks through the full remediation path: requesting STIR/SHAKEN “A” attestation, updating your CNAM, and submitting reputation corrections to the major providers.
Spam and scam labels are set by several independent systems: mobile carriers, device manufacturers, caller ID apps, and reputation providers such as Hiya, First Orion, and TNS. SignalWire handles the carrier-side pieces (STIR/SHAKEN attestation and CNAM) and can confirm that your numbers are assigned to you. The reputation providers each maintain their own databases, so you submit correction requests to them directly, and each update propagates on that provider’s own schedule.
How spam labels work
A spam or scam label is not stored in a single database. Several signals feed into it:
- Number history, including reputation inherited from a previous user of the number
- Call patterns, such as volume, call duration, and answer rates
- End-user spam reports
- Your CNAM (caller ID name) record
- STIR/SHAKEN call authentication and your attestation level
- Reputation providers such as Hiya, First Orion, and TNS
Because these signals come from different sources, resolving a label usually takes more than one step. The steps below address each of these signals.
Remediation steps
1
Request A attestation and CNAM from SignalWire Support
SignalWire handles the carrier-side pieces through a single support ticket, STIR/SHAKEN attestation and CNAM.
A attestation is the highest STIR/SHAKEN attestation level. It confirms that SignalWire has identified you and that you are authorized to use the calling numbers. By default, outbound calls receive level C, and levels A and B require vetting. As part of that vetting, SignalWire may ask you to complete Know Your Customer (KYC) identity verification, which confirms account ownership, business identity, your use case, and number authorization.
CNAM is the caller ID name that can display alongside your number on supported networks. A missing, outdated, or generic CNAM, or one inherited from a previous user of the number, makes recipients more likely to distrust the call or report it as spam.
Open a support ticket from the Support button in your SignalWire Dashboard and choose Create a ticket. Include:
- Your SignalWire Space or Project ID
- Your business legal name and website
- The numbers you use for outbound calling
- A short description of your calling use case
- Confirmation that the numbers are assigned to your business or application
- A spreadsheet of the numbers and requested CNAM values (format below)
- Evidence of the label: screenshots, the carrier or app where it appears (such as AT&T, Verizon, T-Mobile, Samsung Smart Call, or Hiya), and an example call date and time
| Phone number | Requested CNAM |
|---|---|
| +15551234567 | BUSINESSNAME |
| +15557654321 | BUSINESSNAME |
Follow these guidelines when choosing a CNAM value:
Use a clear, recognizable business name
Avoid generic names such as “Support,” “Customer Care,” or “Service”
Avoid misleading or unrelated names
Use the same CNAM consistently across related numbers when possible
CNAM is limited to 15 characters, including spaces.
Updates take up to 48 hours to propagate, and times vary by downstream carrier and database.
CNAM is disallowed on toll-free numbers.
Canadian carriers do not read from the National CNAM registry, so CNAM does not display on calls to Canadian numbers.
Once any required KYC is approved, SignalWire Support reviews the account for A attestation and submits your CNAM updates. For full details on caller ID and CNAM, see Caller ID & CNAM.
2
Register with Free Caller Registry
After attestation and CNAM are addressed, register your outbound numbers with Free Caller Registry. A single submission there forwards your business caller information to the major reputation providers, including First Orion, Hiya, and TNS.
Use accurate, consistent information:
- Legal business name
- Customer-facing business name
- Business website
- Contact name and email
- Phone numbers used for outbound calling
- Description of the call purpose
- Expected call volume
- Whether calls are transactional, support-related, appointment-related, billing-related, or sales-related
Be specific about why you call customers. Vague descriptions make it harder for reputation providers to validate the traffic.
3
Correct labels with a specific provider
The Free Caller Registry submission forwards your information to Hiya, First Orion, and TNS. If a specific provider still shows an incorrect label, or you want to register or report directly, use its path below.
Hiya: request a correction
If Hiya is labeling your calls incorrectly, submit a correction request through the Hiya request hub. Include:
- Business name
- Business website
- Affected phone numbers
- Description of the call purpose
- Confirmation that you are the authorized user of the numbers
- A note that the numbers may have inherited reputation from prior use, if applicable
Hiya also offers business number registration and caller reputation review options.
First Orion: register your numbers
First Orion provides free business number registration. Registering supplies business and call-purpose information that influences how your calls are labeled across supported carrier networks. Use the same business name, website, number list, and call-purpose explanation you used with Free Caller Registry.
TNS: report a mischaracterized call
TNS provides a reporting path for mischaracterized calls. Use it when legitimate calls are treated as spam, nuisance, fraud, or robocall traffic. Include:
- The calling number
- The called number, if available
- The date and time of the affected call
- The label shown to the recipient
- Your business name and website
- A short explanation of why the call was legitimate
When contacting a provider, use this template and replace the bracketed values with your own details.
Hello,
We are the current authorized user of the phone number(s) listed below. These numbers are
assigned to [Business Name] and are used for [call purpose, such as customer support callbacks,\
appointment confirmations, billing follow-up, or account notifications].
The numbers appear to be incorrectly labeled as spam, scam, or fraud. We believe this labeling
is inaccurate and may have been inherited from prior use before the numbers were assigned to us.
Please review and remove any inaccurate spam, scam, or fraud labeling associated with these numbers.
Business name: [Business Name]
Website: [Website]
Phone numbers: [List of Numbers]
Call purpose: [Call Purpose]
Carrier/provider: SignalWire
Contact name: [Name]
Contact email: [Email]
Contact phone: [Phone]
Thank you.Outbound Calling Best Practices
Even after CNAM and reputation corrections are submitted, calling behavior can flag numbers again.
Avoid these patterns:
- High-volume calling from newly assigned numbers
- Repeated redial attempts in a short time
- Very short calls and abandoned calls
- Calling people who are not expecting contact
- Inconsistent caller ID usage
- Rotating through large pools of numbers to reach the same recipients
- Calling outside reasonable local hours
- Failing to identify your business at the start of the call
Instead, follow these practices:
- Call only people who expect or have consented to the call
- Clearly identify your business at the beginning of the call
- Use consistent caller ID numbers
- Keep CNAM aligned with your actual business identity
- Monitor answer rates and complaint patterns
- Ramp traffic gradually on newly assigned numbers
Reputation corrections take time to appear across all carriers and devices, because each provider maintains its own systems and update schedule. Consistent calling behavior keeps a corrected number in good standing.
Optional paid reputation and branded calling services
Several reputation providers offer commercial products for businesses that rely heavily on outbound calling.
Paid reputation and branded calling services
Beyond the free registration and correction paths above, these providers offer commercial products. They may include branded caller ID, caller reputation monitoring, spam-label remediation workflows, call analytics, branded call-reason display, logo display, spoofing protection, and enterprise support:
- Hiya Branded Call and Hiya for Businesses
- First Orion INFORM Branded Calling and AFFIRM Number Monitoring
- TNS Enterprise Branded Calling and Call Guardian
- TransUnion TruContact Trusted Call Solutions
- Numeracle Number Reputation Management
These services suit customers with high outbound call volume, contact-center traffic, critical customer notifications, or ongoing reputation management needs. Treat them as an enhancement, not a guaranteed removal mechanism. Spam and scam labels are determined by multiple providers, carriers, devices, apps, and call-behavior signals. Complete KYC, request A attestation where eligible, keep CNAM accurate, register through the free paths above, and follow responsible calling practices alongside any paid service.
Next steps
STIR/SHAKEN\ \ How call authentication and A/B/C attestation levels work. Caller ID & CNAM\ \ Set caller ID and CNAM for your numbers and SIP endpoints. Optimize delivery rates\ \ Parallel guidance for messages flagged as spam.
SIP
For AI agents: a documentation index is available at the root level at /llms.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Session Initiation Protocol (SIP) is a signaling protocol used for initiating, maintaining, and terminating real-time communication sessions. These sessions can include voice and video applications over the Internet.
Overview
SIP is fundamental to modern Voice over IP (VoIP) communications and enables features such as:
- Voice and video calls
- Conference calling
- Presence information
- Multimedia distribution
Getting started with SIP involves understanding a few key components:
- SIP endpoints (phones, softphones, or applications)
- SIP servers (proxies, registrars)
- Network requirements
In traditional telephony, there has always been a very clear distinction between the two phases of a call.
- “Call Setup”, known as Signaling, is the process of getting a voice call to begin and included getting the two phones in question to connect.
- “Data Transfer”, or Media as the name implies, was the process by which data, considered as the voice, moves from one phone to the other.
SIP (Session Initiation Protocol), at its simplest explanation, is a way of transmitting a call through a SIP trunk, which we will cover later. SIP was designed to be a general protocol to set up real-time multimedia sessions between groups of participants. SIP enables users to communicate through all channels, including voice, fax, SMS, MMS, and even video via a given network. In a nutshell, with SIP, one can move their PBX system to the cloud, enabling VoIP (Voice over IP).
How does SIP calling work?
There are three main parts to a traditional phone system.
- PBX (Private Branch Exchange) - the physical system that manages your calls. When you hear PBX, think about the brains of the network and the component that enables different functions to take place like voicemail or call transfer.
- PRI (Primary Rate Interface) Lines - physical lines that connect the PBX to the PSTN.
- PSTN (Public Switched Telephone Network) - the network that routes the calls to their final destination.
SIP allows you to remove that second part and operate a phone system without the need for PRI lines. With SIP, voice calls can now be transferred between the PBX and the PSTN through the cloud as opposed to actual, physical lines. Because a physical connection to a voice provider or phone company is no longer required, you can send data through a SIP trunk, a type of virtual phone line. SIP trunks allow calls to be broken down into digital packets and sent across a network to their final destination, which means you are able to send calls to any phone number worldwide. This is perhaps one of the largest benefits to SIP trunking; as many phone companies charge for international long-range calling, these costs can be avoided through communicating via SIP.
What are the benefits of SIP?
Flexibility
SIP phone systems enable you to perform a wide range of functions that a traditional phone system may not allow you to do. Some of these functions include:
- The capability to identify a user’s location.
- The capability to determine user availability.
- The ability to set up and manage different sessions (i.e. transferring and terminating calls, adding three-way conferences, etc.)
- Enabling instant messaging, multimedia conferences, user presence information, and E911 calls for emergencies.
- Bridging different sets of equipment and software by negotiating common capabilities before the calls start, akin to two people who speak different languages finding a way to communicate. SIP has the benefit of working with diverse vendors and setups as long as they share even a fraction of similar capabilities.
Affordability
As we alluded to earlier, a big benefit of alternating to a SIP trunk is price-oriented. We had mentioned how you save on long-range calls and international calls due to every call being viewed as a local call through SIP. However, there are other areas that a SIP trunk saves money in, including:
- The elimination of regular hardware purchases and the costs to install and maintain the hardware.
- The elimination of monthly subscription fees to a traditional telephone provider.
- The streamlining, downsizing, and possible eliminating of small and/or consequentially obsolete networks.
Scalability
Revisiting the affordability aspect, when a company expands, the hardware and the labor to also expand their traditional phone system becomes expensive as well. On top of the hardware, increasing the number of phones also requires you to buy additional phone lines which normally must be purchased in large quantities, thus requiring you to purchase more phone lines than what you actually need. This can be a huge limiting factor to the capabilities of the company while also increasing the cost of taking in new employees. By using SIP, you can scale at your own pace and only purchase what you need, making the scalability of your business much more practical.
Ease of maintenance and operation
SIP calling consolidates your entire communication network into a handful of devices, making the system easy to troubleshoot. In the event of an issue, SIP trunking enables better failover, as you can have more than one SIP provider in order to provide redundancy and cut down on network downtime.
Sound quality
Most SIP providers offer wideband audio or HD voice with a higher sample rate of telephone audio, giving your phone higher fidelity audio than other systems.
Using a softphone with SignalWire
Any SIP-compatible softphone (such as Zoiper, Bria, Linphone, MicroSIP, or 3CX) can be used with a SignalWire SIP Credential. After creating a SIP credential via the SignalWire Dashboard, configure your softphone with the following settings. All fields are required.
| Setting | Description |
|---|---|
| Domain | Your SIP Credential domain (e.g., your-space.sip.signalwire.com) |
| Username | The username of your SIP Credential. This setting can be adjusted in the URI field when creating a new SIP Credential |
| Password | The password set when creating your SIP Credential |
| Transport | The signaling transport protocol: TLS, TCP, or UDP. Must match the transport configured on your SIP Credential. |
| Encryption type | Controls media encryption (SRTP). Must match your Credential setting: required or optional. |
The Domain, Username, and Password are all found and created via the SIP Credential page of your SignalWire Dashboard.
For app-specific setup steps, refer to your softphone’s official documentation.
SIP gateways
A SIP gateway is a Resource on SignalWire’s Call Fabric platform that forwards calls to external SIP addresses. When you assign a phone number or other Address to a SIP gateway, incoming calls are seamlessly routed to the configured destination with support for configurable encryption and codec settings.
SIP gateways are distinct from SIP Domain Applications, which route inbound calls to SignalWire SIP addresses, and SIP Endpoints, which register your devices to SignalWire SIP addresses. You can create and manage SIP gateways through the SignalWire Dashboard or programmatically via the SIP Gateway REST API endpoint.
Bring your own carrier
For AI agents: a documentation index is available at the root level at /llms.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Overview
Bring Your Own Carrier (BYOC) allows SignalWire users to retain their own carriers for connectivity instead of the vendors that we partner with. This allows you to use any carrier you want while still utilizing the powerful programmatic control for SIP from SignalWire!
This might be a good fit for you if:
- You like your current carrier but want to use our APIs to enhance your call flow
- You want international origination from a country we don’t yet support
- The number cannot be ported into SignalWire
- You want to keep control of the number rather than port it to SignalWire
- You want to SIP trunk to/from a SIP Server (such as Kamailio)
Inbound BYOC
If you would like to do inbound BYOC (i.e. send your carrier traffic to SignalWire), you will need to create a domain application. Domain Apps allow you to send SIP traffic to a custom domain and use SignalWire APIs to manage the incoming request. You can do this under SIP -> Domain Apps -> Create a Domain App, or via the Domain Apps API.
For detailed instructions on how to create a domain application, please follow the SIP Domain Applications guide.
It’s VERY important to whitelist the IPs that you want to allow through - if you do not select this option, anyone who has the URL could send traffic to your custom domain app.
Handling Inbound Calls
Using SWML
If you are using SWML to handle incoming calls, you will need to:
- Go to the settings page for the newly created Domain App, by clicking on the app name in the Domain Apps list.
- Set the HANDLE USING field to SWML Script
- Set the WHEN A CALL COMES IN field to the URL of your SWML script
- Ensure the SWML script is set up to provide instructions on what actions to perform when a call comes in.
To address both of the steps above, we will need to create an SWML script.
Example SWML Script
The following is a simple example of an SWML script that answers the call and plays a TTS message:
version: 1.0.0
sections:
main:
- play:
url: 'say: Hello, welcome to SignalWire!'Using Call-Flow Builder
If you are using a Call Flow to handle incoming calls, you will need to:
- Go to the settings page for the newly created Domain App, by clicking on the app name in the Domain Apps list.
- Set the HANDLE USING field to A Call Flow
- Set the WHEN A CALL COMES IN field to the Call Flow you want to use from the dropdown list.
- Ensure the Call Flow is set up to provide instructions on what actions to perform when a call comes in.
Example Call Flow
In the below example, we have a Call Flow that answers the call and plays a TTS message.
A Call Flow that answers the call and plays a TTS message
A Call Flow that answers the call and plays a TTS message
Using RELAY
To handle incoming calls using a RELAY Application, you will need to:
- Go to the settings page for the newly created Domain App, by clicking on the app name in the Domain Apps list.
- Set the HANDLE USING field to RELAY Application
- Set a topic (V4) or context (V3) in the WHEN A CALL COMES IN field. Let’s use
officeas an example. - Run code listening for calls on that
officetopic/context and then do something with them.
RELAY V3
RELAY V4
RELAY V3 Example
import { Voice } from "@signalwire/realtime-api";
const client = new Voice.Client({
project: "<project-id>",
token: "<api-token>",
contexts: ["office"],
});
client.on("call.received", async (call) => {
console.log("Got call", call.from, call.to);
try {
await call.answer();
console.log("Inbound call answered");
await call.playTTS({ text: "Hello! This is a test call." });
} catch (error) {
console.error("Error answering inbound call", error);
}
});In this example we’re creating a Client and tying it to the office context. Then, we tell it to listen for call.received events, and when a new call comes in we answer it and say “Hello! This is a test call.” to the caller.
To learn more about what you can do with RELAY, have a look at our SDK documentation.
Outbound BYOC
If you are using BYOC to do outbound calls from SignalWire, you will need a SIP URL from your carrier that we can use to route calls to the right SIP trunk. Once you have that, you can create a call using the Calling API or Realtime SDK using the SIP URL, SIP username, and SIP password. Let’s look at some examples so you can see what we’re talking about!
Outbound Call Examples
Using Calling API/SWML
Calling API
To create an outbound call using the Calling API with curl, you can use the Create a Call endpoint with the following format:
curl -L 'https://<YOURSPACENAME>.signalwire.com/api/calling/calls' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Basic Base64-token-here' \
--data-raw '{
"command": "dial",
"params": {
"url": "https://example.com/swml",
"from": "sip:from-sip@example-112233445566.sip.signalwire.com",
"to": "sip:from-sip@example-112233445567.sip.signalwire.com",
"caller_id": "+1234567890",
"fallback_url": "https://example.com/fallback"
}
}'In the params you can specify a url that points to an SWML script, or you can pass a swml key with the SWML script directly.
SWML
To create an outbound call using SWML, you can use the following format:
version: 1.0.0
sections:
main:
- connect:
to: "sip:user@domain.com"
headers:
- name: "x-FROM_NUMBER"
value: "%2B123456789"Using Call-Flow Builder
To create an outbound call using a Call Flow, you can use the Forward to Phone node to dial out to a SIP endpoint:
A Call Flow that forwards a call to a SIP endpoint
A Call Flow that forwards a call to a SIP endpoint
Using RELAY
RELAY Realtime SDK
The RELAY SDK makes dialing out to a SIP endpoint simple:
RELAY V3
RELAY V4
import { Voice } from "@signalwire/realtime-api";
const client = new Voice.Client({
project: "<project-id>",
token: "<api-token>",
contexts: ["office"],
});
try {
const call = await client.dialSip({
from: "sip:xxx@yyy.zz",
to: "sip:ppp@qqq.rr",
timeout: 30,
});
// TODO: Add code to do something with the call object here
} catch (e) {
console.log("Call not answered.");
}How to Get Started
If you are interested in BYOC and need additional assistance getting started, reach out to support@signalwire.com! One of our support technicians can make sure everything gets squared away so you can get up and running in no time.
Sign Up Here
If you would like to test this example out, create a SignalWire account and Space.
Please feel free to reach out to us on our Community Discord or create a Support ticket if you need guidance!
SIP domain applications
For AI agents: a documentation index is available at the root level at /llms.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
A Domain Application is a SignalWire feature that allows you to send SIP traffic to a custom domain and run specified logic. To define that logic, you can set up a handler in the SIP Space of your SignalWire Dashboard.
Domain App page with the option to create a new Domain App
Domain App page with the option to create a new Domain App
RELAY Application
If you are handling incoming SIP traffic with a RELAY Application, you are defining your logic in a separate RELAY application on your own server. RELAY applications run different logic based on the topic (V4) or context (V3) attached to incoming calls, so you will need to choose a topic/context to label your incoming SIP traffic. The following example shows a RELAY client listening for the “office” topic/context then runs the logic inside the event listener callback.
RELAY V4
RELAY V3
import { SignalWire } from "@signalwire/realtime-api";
const client = await SignalWire({
project: "your-project-id",
token: "your-api-token",
// This topic must match the topic you set in your Domain App handler.
topics: ["office"],
});
const voiceClient = client.voice;
await voiceClient.listen({
topics: ["office"],
onCallReceived: async (call) => {
console.log("Call received:", call.id, call.from, call.to);
try {
await call.answer();
console.log("Inbound call answered");
await call.playTTS({ text: "Welcome to SignalWire!" });
} catch (error) {
console.error("Error answering inbound call", error);
}
},
});Find the many options for what you can do with RELAY in our SDK reference.
Video Room
You can immediately connect inbound SIP calls to a video room. To use the Video Room handler, search for the video room name in the settings dropdown and select the video room you would like to use. Inbound calls will be automatically directed to this video room.
For a full guide to creating and configuring new Domain Applications, visit our SIP Space help page.
SIP trunking
For AI agents: a documentation index is available at the root level at /llms.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
SIP trunking is a popular option for customers who have an existing PBX phone system and would like to route SIP traffic through SignalWire without taking advantage of our application-level features. Customers can create SIP endpoints programmatically or in their SignalWire Space and route traffic to those endpoints in the SignalWire network. These endpoints could be many things, such as PBXs / Business Phone Systems, IP Phones, Softphones, Mobile Applications, and IoT devices, just to name a few. The SIP trunk will allow any of these endpoints to connect with other external SIP endpoints or the Public Switched Telephone Network (PSTN).
Creating a SIP Credential
In order to create a SIP Credential you can go to Resources in your SignalWire Space, and create a new SIP Credential.
Alternatively, you can create the endpoint programmatically with an API call.
curl -L -X POST 'https://$SPACE_NAME.signalwire.com/api/relay/rest/endpoints/sip' \
-u '$PROJECT_ID:$API_TOKEN' \
--data-raw '{
"username": "newCompany",
"password": "#SuperSecurePassword",
"caller_id": "New Company",
"encryption": "required"
}'For an in-depth look at what these settings do and all of your SIP Dashboard tools, see the complete guide to your SIP Space.
Note that the endpoint URL depends on the SIP URI that you name in your SIP Profile. Manage your SIP Profile on your Dashboard or via API. The username, password, and URL in your SIP endpoint settings will be used later to connect your SIP device.
After saving your settings, your endpoint is ready to accept traffic via its SIP URL, or you can set up a phone number to accept incoming PSTN calls.
Phone Number to Handle Incoming Calls
To direct incoming traffic to your endpoint, you may wish to purchase a SignalWire phone number (DID) and connect it to your SIP endpoint. Again, you have the option to do this via your Dashboard or programmatically.
See Buying a Phone Number for step-by-step instructions on searching for and purchasing a number, then open its settings by clicking on your new number in your Dashboard’s Phone Numbers Space.
In the number’s setting, click on the “Assign Resource” button and select your SIP endpoint resource.
Assign SIP Endpoint.
What's a Resource?
Resources are the building blocks of SignalWire applications. They include AI Agents, SWML Scripts, cXML Scripts, SIP Endpoints, and more.
If you prefer to use API calls, you will need the Search for Available Phone Numbers, Purchase a Phone Number, and Update a Phone Number endpoints.
Change the Voice and Fax Settings to accept incoming calls as Voice Calls and handle calls using a SIP Endpoint. Then you can search for the endpoint by username.
After saving your settings, incoming calls to this number will be immediately directed to your SIP endpoint.
Configuring a SIP Device
To handle calls after they reach your SIP endpoint, you’ll need to set up a SIP device. Depending on what your SIP device is, be it a PBX or a SIP application or IP Phone, they require many of the same field parameters.
- SIP Username
- SIP Password
- Local SIP Port (In order to avoid malicious behavior, we suggest choosing a local SIP port that is not the typical SIP port.)
- SIP Server
- SIP Server Port
- SIP Server Transport Protocol
- Outbound Proxy
- Outbound Proxy Port
- Outbound Proxy Transport Protocol
Continuing with our earlier example, our parameters for a SIP IP Phone or soft client might be:
- SIP Username: newCompany
- SIP Password: #SuperSecurePassword
- Local SIP Port: 6050
- SIP Server: newCompany @xxx-xxx.sip.signalwire.com (refer to your Dashboard for the correct URL)
- SIP Server Port: 5061 (SIP Port: 5060, TLS Port 5061)
- SIP Server Transport Protocol: TLS
- Outbound Proxy: (supported but not generally needed)
- Outbound Proxy Port: (supported but not generally needed)
- Outbound Proxy Transport Protocol: (supported but not generally needed)
Security
Security is important to us! Communications over the open internet should be secure both in signalling and in media. We feel so strongly about security that we decided to support TLS (Transport Layer Security) and SRTP (Secure Real-time Transport Protocol) by default. When setting up your SIP endpoint, specify which codecs and ciphers to support, but you must choose at least one. Be aware that not all codecs and ciphers are compatible with every SIP device, so refer to your device documentation for compatibility.
Call Logs
All call logs can be viewed in the “Logs” tab of your SignalWire Dashboard. Here, you can see details for each call including the SignalWire resource type and cost. Additional details for each call are available by clicking on the resource name.
Wrap Up
Setting up a SIP trunk like this may be the solution for you if all you need is to direct SIP traffic in and out of your existing system. However, the flip side to that is there will be no features available on the trunk such as recording, IVR or any form of call control. If you want to explore SIP options that take advantage of SignalWire’s services and features, check out our guide to SIP Domain Applications.
In the Legacy Dashboard
Which Dashboard version am I using?
New Dashboard: You have a Resources tab in the left sidebar.
Legacy Dashboard: You have separate tabs for SIP, LaML, RELAY, etc.
If you're on the Legacy UI
Navigate to the Phone Numbers tab, click the phone number that you would like to register, and then click Edit Settings button. From here, in the Handle Incoming Calls section, select SIP Endpoint, then input the SIP address you created.
A screenshot of the edit pane for a phone number in the Phone Numbers tab of a SignalWire Space. The number is titled 'SIP Endpoint' and it is set to accept incoming calls as 'Voice Calls' and handle calls using 'a SIP Endpoint'. The SIP username is indicated in the field labeled 'When a Call Comes In, Forward the Call to'.
Register SIP Endpoint to a SignalWire Phone Number
STIR/SHAKEN
For AI agents: a documentation index is available at the root level at /llms.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
What is STIR/SHAKEN?
STIR/SHAKEN is a VoIP technology framework designed to reduce fraudulent robocalls and illegal phone number spoofing. In short, this is accomplished through the creation of complex tokens that verify the caller’s identity before the destination phone even starts ringing. STIR is an internet regulatory group and stands for S ecure T elephony I dentity R evisited. SHAKEN stands for S ecure H andling of A sserted information using to KEN s, and is the method by which the STIR regulations are being put into practice.
Not only does this acronym make you want to watch a James Bond film, it describes this framework quite well. Let’s discuss the token aspect and STIR/SHAKEN. Similar to how you would use a passport as a higher form of identity for travel, a call uses a PASSporT for increased verification as well. PASSporT is an encryption token transported by SIP identity headers and SSL certificates, which is then set off to other service providers or certificate authorities to ensure that the caller is truly who they say they are.
These tokens are categorized into three tiers (A, B, and C) based upon their trust level. These are referred to as attestation levels. Callers with higher credibility may qualify for level A attestation whereas callers with less credibility will fall lower in the tiers depending on the provider’s knowledge of the customer, use case, and phone number used.
When receiving a call protected with STIR/SHAKEN you can examine the encryption token and determine the amount of trust you should assign to the displayed Caller ID. Robocallers would need to properly identify themselves to be considered trusted, thereby removing much of the motivation to make robocalls in the first place!
Is SignalWire STIR/ SHAKEN compliant?
Yes, SignalWire is STIR/ SHAKEN compliant!
Attestation levels
By default, all outbound calls from phone numbers bought on the SignalWire platform receive attestation level C. Levels A and B attestation require a vetting process. For more information regarding attestation and our vetting process, please create a support ticket with us.
If your numbers are being labeled as spam or scam, see Resolving spam labels and updating CNAM for the full remediation path.
The FCC required that providers lay out their plan of attack through the Robocall Mitigation Database back in April of 2021 and as of June 30th, 2021, the FCC required all providers to implement STIR/ SHAKEN within their networks. Although the telecommunication laws are in place through the FCC for providers, the implementation for carriers has been a lot more gradual.
Robocalling battle plan
Until the day comes that we are not reminded daily of our vehicle’s extended warranty, it is obvious that call verification politics are going to remain commonplace and will not be going away anytime soon.
This is why SignalWire sponsored the creation of debatably the first open source implementation of STIR/SHAKEN under the FreeSWITCH project. The goal of this library was to begin the process of normalizing caller verification by placing it directly into the hands of developers. This library allows for simpler and more cost-efficient creation of security certificates so you can transform your stack into a scalable robo-killing environment.
So call your politicians, complain to your carriers, and spread the word for increased robo-call prevention because redefining the telecommunications space for the better is what being a member of the SignalWire community is all about.
Additional resources
- STIR/ SHAKEN Open Source GitHub
- SignalWire Blog: Robo-calls finally meet their Robocop: libstirshaken
- SignalWire Blog: Stop spoofed robocalls with libstirshaken
STUN vs. TURN vs. ICE
For AI agents: a documentation index is available at the root level at /llms.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
STUN, TURN, and ICE are IETF standard protocols developed to address the Network Address Translator (NAT) traversing problem when establishing peer-to-peer communication sessions. WebRTC and other VoIP stacks implement support for ICE to improve the reliability of IP communications.
Definitions
- Session Travel Utilities for NAT (STUN) - provides a tool for clients to find out their public address and the type of NAT they are behind. It enables users that are behind a NAT to connect to a single peer.
- Traversal Using RELAY around NAT (TURN) - is a protocol that helps in the traversal of NATs or firewalls for multimedia applications. It also supports a connection of a client behind a NAT to a single peer. However, it is used when STUN is not effective.
- Interactive Connectivity Establishment (ICE) - is a standard that illustrates how to coordinate STUN and TURN to make a connection between clients.
How do they work?
Two clients, Alice and Bob are using a WebRTC video chatting application to communicate. Alice wants to call Bob using this application.
Alice’s browser has to generate a Session Description Protocol (SDP) offer to connect to Bob’s browser. The SDP offer provides information on the session established by Alice’s browser. For example, it contains a list of ICE candidates or the available methods a peer is able to communicate, that Bob’s browser can use to connect to Alice.
To connect to Bob’s browser, Alice’s browser needs to generate a Session Description Protocol (SDP) offer. The SDP generation process begins when the application she’s using calls createOffer on an RTCPeerConnection object.
An SDP offer contains a bunch of information about the session Alice’s browser wants to establish-what codecs to use, whether this will be an audio or video session, and more. It also contains a list of ICE candidates, which are the IP and port pairs that Bob’s browser can attempt to use to connect to Alice. Typically, each peer will propose its best candidates first, going down the line toward its worse candidates.
To build this list of candidates, Alice’s browser makes requests to a STUN server. The server will return a port pair and public address. Each of these pairs are then added to the list of ICE candidates by Alice’s browser. When all the candidates have been gathered, an SDP can be returned. Then, Alice’s browser will pass the SDP to Bob’s browser through some signaling channel between browsers.
After the SDP has been passed, Bob’s browser will need to generate an SDP answer. The same steps discussed above (gathering of ICE candidates, etc.) will be followed by Bob’s browser. The answer will be returned to Alice’s browser.
After the SDPs have been sent, a series of connectivity checks are executed. The ICE algorithm from both browsers will take a candidate from the list of ICE candidates received from the other peer’s SDP and send it a STUN request. For example, if Alice’s browser takes a candidate from Bob’s SDP, sends it a STUN request, and receives a response from Bob’s browser, Alice’s browser will consider the check of that candidate successful. Then, that pair will be marked as a valid ICE candidate.
Once the checks have been completed, the two browsers decide which valid candidate to use. After it has been selected, the call will begin. This entire process usually takes milliseconds.
If the two browsers cannot find a valid ICE candidate, a STUN request will be made to the TURN server. This will result in a media RELAY address, which is a public address and port that will forward packets received to and from the browser that set up the RELAY address. The RELAY address will be added to the list of candidates and exchanged through some signaling channel.
If you are building a WebRTC application, the WebRTC stack includes an ICE Agent that takes care of most of what was described for you. You will need to implement a signaling mechanism to exchange SDPs and send them along with new ICE candidates whenever they are discovered.
Voices and languages
For AI agents: a documentation index is available at the root level at /llms.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
A grid of logos for TTS providers on the SignalWire platform.
SignalWire integrates natively with leading third-party text-to-speech (TTS) providers. This guide describes supported engines, voices, and languages. Refer to each provider’s documentation for up-to-date model details and service information.
Browse and audition voices
Choose a provider to browse and audition its full voice catalog. Press play to audition a voice, and use copy config to grab the engine and voice values for your SWML or SDK code. Each provider’s complete voice list lives on its reference page, linked in the table below.
Compare providers and models
SignalWire’s TTS providers offer a wide range of voice engines optimized for various applications. Select a provider, model, and voice according to the following considerations:
Language support: At time of writing, engine language support is as follows. Consult each provider’s reference documentation for the most up-to-date information.
- Rime voices support English, Spanish, French, and German.
- Deepgram voices support English, Spanish, German, French, Dutch, Italian, and Japanese.
- Amazon Polly, Azure, Cartesia, and Google Cloud offer a wide range of supported languages.
- Inworld voices support English plus Arabic, Chinese (Mandarin), Dutch, French, German, Hebrew, Hindi, Italian, Japanese, Korean, Polish, Portuguese, Russian, and Spanish.
- MiniMax voices span more than 20 languages, including English, Spanish, Portuguese, French, German, Italian, Chinese, Japanese, Korean, and many more, with automatic language detection.
- All ElevenLabs and OpenAI voices are fully multilingual.
SSML support: Google Cloud and Amazon Polly support SSML (Speech Synthesis Markup Language) as a string wrapped in <speak> tags. Consult Google Cloud’s SSML docs for details. Refer to the Amazon Polly docs for more information on using SSML and supported SSML tags.
Use voice identifier strings
Compose voice identifier strings using the following general format:
engine.voice:model| Identifier | Description |
|---|---|
engine<br>required | The TTS provider (e.g., elevenlabs, rime, openai) |
voice<br>required | The voice identifier (name or ID depending on engine) |
model<br>optional | Model variant (not all engines support this) |
Since voice ID strings are case insensitive, the following strings are equivalent:
gcloud.en-US-Neural2-A
gcloud.en-us-neural2-a
GCLOUD.EN-US-NEURAL2-AFor detailed instructions for each provider, consult the voice ID references linked in the Usage column of the below table.
| TTS provider | Sample voice ID string | Usage |
|---|---|---|
| Amazon Polly | amazon.Joanna-Neural | Reference |
| Azure | azure.en-US-AvaNeural | Reference |
| Cartesia | cartesia.a167e0f3-df7e-4d52-a9c3-f949145efdab | Reference |
| Deepgram | deepgram.aura-asteria-en | Reference |
| ElevenLabs | elevenlabs.thomas | Reference |
| Google Cloud | gcloud.en-US-Casual-K | Reference |
| Inworld | inworld.Lauren:inworld-tts-1.5-mini | Reference |
| MiniMax | minimax.English_CalmWoman:speech-2.6-turbo | Reference |
| OpenAI | openai.alloy | Reference |
| Rime | rime.luna:arcana | Reference |
Pricing
See the Voice API Pricing page for up-to-date pricing information.
A grid of logos for TTS providers on the SignalWire platform.
Amazon Polly
For AI agents: a documentation index is available at the root level at /llms.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Amazon Web Services’ Polly TTS engine includes several models to accommodate different use cases.
Models
SignalWire supports the following three Amazon models.
Standard\ \ Polly Standard is a traditional, cost-effective, and reliable TTS model.\ \ Example voice ID string: amazon.Emma:en-GB or amazon.Emma:standard:en-GB Neural\ \ Polly Neural produces more natural, human-like speech than Polly Standard.\ \ Example voice ID string: amazon.Kendra:neural:en-US Generative\ \ Polly Generative is Amazon’s largest and most realistic model.\ \ Example voice ID string: amazon.Danielle:generative:en-US
Voices
Press play to audition any Amazon Polly voice, then copy config to grab the value for SWML or your SDK.
Languages
Consult AWS documentation for a comprehensive and up-to-date list of supported voices, as well as information on accented and fully bilingual voices.
List of supported voices\ \ Most Amazon Polly voices support a single language.\ Select voices from this list, which includes Standard, Neural, and Generative models.
Bilingual pronunciation\ \ All Amazon Polly voices support accented bilingual pronunciation through the use of the SSML lang tag. Fully bilingual voices\ \ Learn more about fully bilingual voices like Aditi, Kajal, Hala, and Zayd,\ which are designed to fluently speak two languages.
Usage
Amazon voice IDs conform to the following format:
amazon.<voice>:<model>:<language>| Parameter | Possible values | Description |
|---|---|---|
engine<br>required | - amazon<br>- polly (will be deprecated in the future) | TTS engine |
voice<br>required | Choose from the Name/ID column | Voice ID |
model<br>optional | standard, neural, or generative | Amazon Polly model. Default: standard |
language<br>optional | Choose from the Language code column | Sets model language. Default: en-US |
Examples:
amazon.Joanna
amazon.Joanna:standard:en-US
amazon.Kendra:neural:en-US
amazon.Matthew:neural:en-US
amazon.Danielle:generative:en-US
amazon.Amy:generative:en-GB
amazon.Aditi:standard:hi-INSimplified Format:
For voices that only support one model, you can omit the model parameter:
amazon.<voice>:<language>Example: amazon.Aditi:hi-IN (Standard model implied)
The polly engine code is being deprecated. Use amazon instead.
Amazon Polly has a limit of 3000 chargeable characters in a single request. If your TTS request is longer than 3000 characters, you will experience silence.
Examples
See how to use Amazon Polly voices on the SignalWire platform.
SWML
RELAY Realtime SDK
Call Flow Builder
Use the languages SWML method to set one or more voices for an AI agent.
version: 1.0.0
sections:
main:
- ai:
prompt:
text: Have an open-ended conversation about flowers.
languages:
- name: English
code: en-US
voice: amazon.Ruth:neuralAlternatively, use the say_voice parameter of the play SWML method to select a voice for basic TTS.
version: 1.0.0
sections:
main:
- set:
say_voice: "amazon.Ruth:neural"
- play: "say:Greetings. This is the Ruth voice from Amazon Polly's Neural text-to-speech model."Azure
For AI agents: a documentation index is available at the root level at /llms.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Microsoft’s Azure platform offers an impressive array of high-quality, multilingual voices in its Neural model.
Voices
Press play to audition any Azure voice, then copy config to grab the value for SWML or your SDK.
Languageallaf-ZAam-ETar-AEar-BHar-DZar-EGar-IQar-JOar-KWar-LBar-LYar-MAar-OMar-QAar-SAar-SYar-TNar-YEas-INaz-AZbg-BGbn-BDbn-INbs-BAca-EScs-CZcy-GBda-DKde-ATde-CHde-DEel-GRen-AUen-CAen-GBen-HKen-IEen-INen-KEen-NGen-NZen-PHen-SGen-TZen-USen-ZAes-ARes-BOes-CLes-COes-CRes-CUes-DOes-ECes-ESes-GQes-GTes-HNes-MXes-NIes-PAes-PEes-PRes-PYes-SVes-USes-UYes-VEet-EEeu-ESfa-IRfi-FIfil-PHfr-BEfr-CAfr-CHfr-FRga-IEgl-ESgu-INhe-ILhi-INhr-HRhu-HUhy-AMid-IDis-ISit-ITiu-Cans-CAiu-Latn-CAja-JPjv-IDka-GEkk-KZkm-KHkn-INko-KRlo-LAlt-LTlv-LVmk-MKml-INmn-MNmr-INms-MYmt-MTmy-MMnan-CNnb-NOne-NPnl-BEnl-NLor-INpa-INpl-PLps-AFpt-BRpt-PTro-ROru-RUsi-LKsk-SKsl-SIso-SOsq-ALsr-Latn-RSsr-RSsu-IDsv-SEsw-KEsw-TZta-INta-LKta-MYta-SGte-INth-THtr-TRuk-UAur-INur-PKuz-UZvi-VNwuu-CNyue-CNzh-CNzh-CN-anhuizh-CN-gansuzh-CN-guangxizh-CN-henanzh-CN-hunanzh-CN-liaoningzh-CN-shaanxizh-CN-shandongzh-CN-shanxizh-CN-sichuanzh-HKzh-TWzu-ZAGenderallmalefemaleneutralunknown
Azure 718
- Adri
Afrikaans (South Africa)·Female·Azure
“Welcome to SignalWire. Hi, I'm Adri from Azure, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Willem
Afrikaans (South Africa)·Male·Azure
“Welcome to SignalWire. Hi, I'm Willem from Azure, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- መቅደስ
Amharic (Ethiopia)·Female·Azure
“Welcome to SignalWire. Hi, I'm መቅደስ from Azure, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- አምሀ
Amharic (Ethiopia)·Male·Azure
“Welcome to SignalWire. Hi, I'm አምሀ from Azure, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- حمدان
Arabic (United Arab Emirates)·Male·Azure
“مرحباً بك في SignalWire. أنا حمدان من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- فاطمة
Arabic (United Arab Emirates)·Female·Azure
“مرحباً بك في SignalWire. أنا فاطمة من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- علي
Arabic (Bahrain)·Male·Azure
“مرحباً بك في SignalWire. أنا علي من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- ليلى
Arabic (Bahrain)·Female·Azure
“مرحباً بك في SignalWire. أنا ليلى من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- أمينة
Arabic (Algeria)·Female·Azure
“مرحباً بك في SignalWire. أنا أمينة من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- إسماعيل
Arabic (Algeria)·Male·Azure
“مرحباً بك في SignalWire. أنا إسماعيل من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- سلمى
Arabic (Egypt)·Female·Azure
“مرحباً بك في SignalWire. أنا سلمى من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- شاكر
Arabic (Egypt)·Male·Azure
“مرحباً بك في SignalWire. أنا شاكر من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- باسل
Arabic (Iraq)·Male·Azure
“مرحباً بك في SignalWire. أنا باسل من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- رنا
Arabic (Iraq)·Female·Azure
“مرحباً بك في SignalWire. أنا رنا من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- تيم
Arabic (Jordan)·Male·Azure
“مرحباً بك في SignalWire. أنا تيم من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- سناء
Arabic (Jordan)·Female·Azure
“مرحباً بك في SignalWire. أنا سناء من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- فهد
Arabic (Kuwait)·Male·Azure
“مرحباً بك في SignalWire. أنا فهد من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- نورا
Arabic (Kuwait)·Female·Azure
“مرحباً بك في SignalWire. أنا نورا من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- رامي
Arabic (Lebanon)·Male·Azure
“مرحباً بك في SignalWire. أنا رامي من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- ليلى
Arabic (Lebanon)·Female·Azure
“مرحباً بك في SignalWire. أنا ليلى من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- أحمد
Arabic (Libya)·Male·Azure
“مرحباً بك في SignalWire. أنا أحمد من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- إيمان
Arabic (Libya)·Female·Azure
“مرحباً بك في SignalWire. أنا إيمان من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- جمال
Arabic (Morocco)·Male·Azure
“مرحباً بك في SignalWire. أنا جمال من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- منى
Arabic (Morocco)·Female·Azure
“مرحباً بك في SignalWire. أنا منى من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- عائشة
Arabic (Oman)·Female·Azure
“مرحباً بك في SignalWire. أنا عائشة من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- عبدالله
Arabic (Oman)·Male·Azure
“مرحباً بك في SignalWire. أنا عبدالله من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- أمل
Arabic (Qatar)·Female·Azure
“مرحباً بك في SignalWire. أنا أمل من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- معاذ
Arabic (Qatar)·Male·Azure
“مرحباً بك في SignalWire. أنا معاذ من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- حامد
Arabic (Saudi Arabia)·Male·Azure
“مرحباً بك في SignalWire. أنا حامد من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- زارية
Arabic (Saudi Arabia)·Female·Azure
“مرحباً بك في SignalWire. أنا زارية من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- أماني
Arabic (Syria)·Female·Azure
“مرحباً بك في SignalWire. أنا أماني من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- ليث
Arabic (Syria)·Male·Azure
“مرحباً بك في SignalWire. أنا ليث من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- ريم
Arabic (Tunisia)·Female·Azure
“مرحباً بك في SignalWire. أنا ريم من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- هادي
Arabic (Tunisia)·Male·Azure
“مرحباً بك في SignalWire. أنا هادي من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- صالح
Arabic (Yemen)·Male·Azure
“مرحباً بك في SignalWire. أنا صالح من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- مريم
Arabic (Yemen)·Female·Azure
“مرحباً بك في SignalWire. أنا مريم من Azure، ويمكنك استخدام صوتي مع وكيل الذكاء الاصطناعي الخاص بك على منصة SignalWire.”Copy config
- প্ৰিয়ম
Assamese (India)·Male·Azure
“Welcome to SignalWire. Hi, I'm প্ৰিয়ম from Azure, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- যাশিকা
Assamese (India)·Female·Azure
“Welcome to SignalWire. Hi, I'm যাশিকা from Azure, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Babək
Azerbaijani (Azerbaijan)·Male·Azure
“Welcome to SignalWire. Hi, I'm Babək from Azure, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Banu
Azerbaijani (Azerbaijan)·Female·Azure
“Welcome to SignalWire. Hi, I'm Banu from Azure, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Борислав
Bulgarian (Bulgaria)·Male·Azure
“Welcome to SignalWire. Hi, I'm Борислав from Azure, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Калина
Bulgarian (Bulgaria)·Female·Azure
“Welcome to SignalWire. Hi, I'm Калина from Azure, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- নবনীতা
Bangla (Bangladesh)·Female·Azure
“Welcome to SignalWire. Hi, I'm নবনীতা from Azure, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- প্রদ্বীপ
Bangla (Bangladesh)·Male·Azure
“Welcome to SignalWire. Hi, I'm প্রদ্বীপ from Azure, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- তানিশা
Bangla (India)·Female·Azure
“Welcome to SignalWire. Hi, I'm তানিশা from Azure, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- ভাস্কর
Bangla (India)·Male·Azure
“Welcome to SignalWire. Hi, I'm ভাস্কর from Azure, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Goran
Bosnian (Bosnia & Herzegovina)·Male·Azure
“Welcome to SignalWire. Hi, I'm Goran from Azure, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Vesna
Bosnian (Bosnia & Herzegovina)·Female·Azure
“Welcome to SignalWire. Hi, I'm Vesna from Azure, you can use my voice with your AI agent on the SignalWire platform.”Copy config
Voices\ \ Browse the complete list of Azure Neural voices in Microsoft’s official documentation. Voice gallery\ \ Listen to audio samples and preview voices in Azure’s interactive voice gallery.
Usage
Azure voice IDs conform to the following format:
azure.<voice>Where <voice> is the full Azure voice code (e.g., en-US-AvaNeural).
Examples:
azure.en-US-AvaNeural
azure.en-GB-SoniaNeural
azure.de-DE-KatjaNeural
azure.es-ES-ElviraNeuralNote: Azure voice IDs already include language information, so no additional language parameter is needed.
Languages
Azure Neural voices are interchangeably compatible with all supported languages. Rather than setting language with the language code, simply provide input text in the desired language.
Consult the Azure supported languages resource for an up-to-date list of supported languages.
SSML support
Azure voices support Speech Synthesis Markup Language (SSML) for advanced control over:
- Prosody (pitch, rate, volume)
- Emphasis and breaks
- Phonetic pronunciation
- Multi-language content
Consult Azure’s SSML documentation for detailed usage instructions.
Examples
Learn how to use Azure voices on the SignalWire platform.
SWML
RELAY Realtime SDK
Call Flow Builder
Use the languages SWML method to set one or more voices for an AI agent.
version: 1.0.0
sections:
main:
- ai:
prompt:
text: Have an open-ended conversation about flowers.
languages:
- name: English
code: en-US
voice: azure.en-US-AvaNeuralAlternatively, use the say_voice parameter of the play SWML method to select a voice for basic TTS.
version: 1.0.0
sections:
main:
- set:
say_voice: "azure.en-US-AvaNeural"
- play: "say:Greetings. This is the Ava voice from Microsoft Azure's Neural text-to-speech model."Cartesia
For AI agents: a documentation index is available at the root level at /llms.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Cartesia offers a wide selection of fully multilingual voices with very low latency. Create a Cartesia account to browse and test voices in the Cartesia Playground.
Models
Cartesia provides multiple generations of its Sonic TTS model:
| Model | Description |
|---|---|
sonic-3 | Default. Latest model with enhanced naturalness |
sonic-2 | Second-generation model with improved quality |
sonic-turbo | Optimized for ultra-low latency |
sonic | The first version of Sonic, optimized for accuracy and low latency. |
All Cartesia voices can be used with any model.
Sonic 3\ \ Learn about Cartesia’s latest Sonic 3 model. Previous models\ \ Documentation for older Sonic model versions.
Voices
Press play to audition any Cartesia voice, then copy config to grab the value for SWML or your SDK.
Copy the voice ID from the table below:
| Voice name | Voice ID |
|---|---|
| German Conversational Woman | 3f4ade23-6eb4-4279-ab05-6a144947c4d5 |
| Nonfiction Man | 79f8b5fb-2cc8-479a-80df-29f7a7cf1a3e |
| Friendly Sidekick | e00d0e4c-a5c8-443f-a8a3-473eb9a62355 |
| French Conversational Lady | a249eaff-1e96-4d2c-b23b-12efa4f66f41 |
| French Narrator Lady | 8832a0b5-47b2-4751-bb22-6a8e2149303d |
| German Reporter Woman | 119e03e4-0705-43c9-b3ac-a658ce2b6639 |
| Indian Lady | 3b554273-4299-48b9-9aaf-eefd438e3941 |
| British Reading Lady | 71a7ad14-091c-4e8e-a314-022ece01c121 |
| British Narration Lady | 4d2fd738-3b3d-4368-957a-bb4805275bd9 |
| Japanese Children Book | 44863732-e415-4084-8ba1-deabe34ce3d2 |
| Japanese Woman Conversational | 2b568345-1d48-4047-b25f-7baccf842eb0 |
| Japanese Male Conversational | e8a863c6-22c7-4671-86ca-91cacffc038d |
| Reading Lady | 15a9cd88-84b0-4a8b-95f2-5d583b54c72e |
| Newsman | d46abd1d-2d02-43e8-819f-51fb652c1c61 |
| Child | 2ee87190-8f84-4925-97da-e52547f9462c |
| Meditation Lady | cd17ff2d-5ea4-4695-be8f-42193949b946 |
| Maria | 5345cf08-6f37-424d-a5d9-8ae1101b9377 |
| 1920’s Radioman | 41534e16-2966-4c6b-9670-111411def906 |
| Newslady | bf991597-6c13-47e4-8411-91ec2de5c466 |
| Calm Lady | 00a77add-48d5-4ef6-8157-71e5437b282d |
| Helpful Woman | 156fb8d2-335b-4950-9cb3-a2d33befec77 |
| Mexican Woman | 5c5ad5e7-1020-476b-8b91-fdcbe9cc313c |
| California Girl | b7d50908-b17c-442d-ad8d-810c63997ed9 |
| Korean Narrator Woman | 663afeec-d082-4ab5-827e-2e41bf73a25b |
| Russian Calm Lady | 779673f3-895f-4935-b6b5-b031dc78b319 |
| Russian Narrator Man 1 | 2b3bb17d-26b9-421f-b8ca-1dd92332279f |
| Russian Narrator Man 2 | da05e96d-ca10-4220-9042-d8acef654fa9 |
| Russian Narrator Woman | 642014de-c0e3-4133-adc0-36b5309c23e6 |
| Hinglish Speaking Lady | 95d51f79-c397-46f9-b49a-23763d3eaa2d |
| Italian Narrator Woman | 0e21713a-5e9a-428a-bed4-90d410b87f13 |
| Polish Narrator Woman | 575a5d29-1fdc-4d4e-9afa-5a9a71759864 |
| Chinese Female Conversational | e90c6678-f0d3-4767-9883-5d0ecf5894a8 |
| Pilot over Intercom | 36b42fcb-60c5-4bec-b077-cb1a00a92ec6 |
| Chinese Commercial Man | eda5bbff-1ff1-4886-8ef1-4e69a77640a0 |
| French Narrator Man | 5c3c89e5-535f-43ef-b14d-f8ffe148c1f0 |
| Spanish Narrator Man | a67e0421-22e0-4d5b-b586-bd4a64aee41d |
| Reading Man | f146dcec-e481-45be-8ad2-96e1e40e7f32 |
| New York Man | 34575e71-908f-4ab6-ab54-b08c95d6597d |
| Friendly French Man | ab7c61f5-3daa-47dd-a23b-4ac0aac5f5c3 |
| Barbershop Man | a0e99841-438c-4a64-b679-ae501e7d6091 |
| Indian Man | 638efaaa-4d0c-442e-b701-3fae16aad012 |
| Australian Customer Support Man | 41f3c367-e0a8-4a85-89e0-c27bae9c9b6d |
| Friendly Australian Man | 421b3369-f63f-4b03-8980-37a44df1d4e8 |
| Wise Man | b043dea0-a007-4bbe-a708-769dc0d0c569 |
| Friendly Reading Man | 69267136-1bdc-412f-ad78-0caad210fb40 |
| Customer Support Man | a167e0f3-df7e-4d52-a9c3-f949145efdab |
| Dutch Confident Man | 9e8db62d-056f-47f3-b3b6-1b05767f9176 |
| Dutch Man | 4aa74047-d005-4463-ba2e-a0d9b261fb87 |
| Hindi Reporter Man | bdab08ad-4137-4548-b9db-6142854c7525 |
| Italian Calm Man | 408daed0-c597-4c27-aae8-fa0497d644bf |
| Italian Narrator Man | 029c3c7a-b6d9-44f0-814b-200d849830ff |
| Swedish Narrator Man | 38a146c3-69d7-40ad-aada-76d5a2621758 |
| Polish Confident Man | 3d335974-4c4a-400a-84dc-ebf4b73aada6 |
| Spanish-speaking Storyteller Man | 846fa30b-6e1a-49b9-b7df-6be47092a09a |
| Kentucky Woman | 4f8651b0-bbbd-46ac-8b37-5168c5923303 |
| Chinese Commercial Woman | 0b904166-a29f-4d2e-bb20-41ca302f98e9 |
| Middle Eastern Woman | daf747c6-6bc2-4083-bd59-aa94dce23f5d |
| Hindi Narrator Woman | c1abd502-9231-4558-a054-10ac950c356d |
| Sarah | 694f9389-aac1-45b6-b726-9d9369183238 |
| Sarah Curious | 794f9389-aac1-45b6-b726-9d9369183238 |
| Laidback Woman | 21b81c14-f85b-436d-aff5-43f2e788ecf8 |
| Reflective Woman | a3520a8f-226a-428d-9fcd-b0a4711a6829 |
| Helpful French Lady | 65b25c5d-ff07-4687-a04c-da2f43ef6fa9 |
| Pleasant Brazilian Lady | 700d1ee3-a641-4018-ba6e-899dcadc9e2b |
| Customer Support Lady | 829ccd10-f8b3-43cd-b8a0-4aeaa81f3b30 |
| British Lady | 79a125e8-cd45-4c13-8a67-188112f4dd22 |
| Wise Lady | c8605446-247c-4d39-acd4-8f4c28aa363c |
| Australian Narrator Lady | 8985388c-1332-4ce7-8d55-789628aa3df4 |
| Indian Customer Support Lady | ff1bb1a9-c582-4570-9670-5f46169d0fc8 |
| Swedish Calm Lady | f852eb8d-a177-48cd-bf63-7e4dcab61a36 |
| Spanish Narrator Lady | 2deb3edf-b9d8-4d06-8db9-5742fb8a3cb2 |
| Salesman | 820a3788-2b37-4d21-847a-b65d8a68c99a |
| Yogaman | f114a467-c40a-4db8-964d-aaba89cd08fa |
| Movieman | c45bc5ec-dc68-4feb-8829-6e6b2748095d |
| Wizardman | 87748186-23bb-4158-a1eb-332911b0b708 |
| Australian Woman | 043cfc81-d69f-4bee-ae1e-7862cb358650 |
| Korean Calm Woman | 29e5f8b4-b953-4160-848f-40fae182235b |
| Friendly German Man | fb9fcab6-aba5-49ec-8d7e-3f1100296dde |
| Announcer Man | 5619d38c-cf51-4d8e-9575-48f61a280413 |
| Wise Guide Man | 42b39f37-515f-4eee-8546-73e841679c1d |
| Midwestern Man | 565510e8-6b45-45de-8758-13588fbaec73 |
| Kentucky Man | 726d5ae5-055f-4c3d-8355-d9677de68937 |
| Brazilian Young Man | 5063f45b-d9e0-4095-b056-8f3ee055d411 |
| Chinese Call Center Man | 3a63e2d1-1c1e-425d-8e79-5100bc910e90 |
| German Reporter Man | 3f6e78a8-5283-42aa-b5e7-af82e8bb310c |
| Confident British Man | 63ff761f-c1e8-414b-b969-d1833d1c870c |
| Southern Man | 98a34ef2-2140-4c28-9c71-663dc4dd7022 |
| Classy British Man | 95856005-0332-41b0-935f-352e296aa0df |
| Polite Man | ee7ea9f8-c0c1-498c-9279-764d6b56d189 |
| Mexican Man | 15d0c2e2-8d29-44c3-be23-d585d5f154a1 |
| Korean Narrator Man | 57dba6ff-fe3b-479d-836e-06f5a61cb5de |
| Turkish Narrator Man | 5a31e4fb-f823-4359-aa91-82c0ae9a991c |
| Turkish Calm Man | 39f753ef-b0eb-41cd-aa53-2f3c284f948f |
| Hindi Calm Man | ac7ee4fa-25db-420d-bfff-f590d740aeb2 |
| Hindi Narrator Man | 7f423809-0011-4658-ba48-a411f5e516ba |
| Polish Narrator Man | 4ef93bb3-682a-46e6-b881-8e157b6b4388 |
| Polish Young Man | 82a7fc13-2927-4e42-9b8a-bb1f9e506521 |
| Alabama Male | 40104aff-a015-4da1-9912-af950fbec99e |
| Australian Male | 13524ffb-a918-499a-ae97-c98c7c4408c4 |
| Anime Girl | 1001d611-b1a8-46bd-a5ca-551b23505334 |
| Japanese Man Book | 97e7d7a9-dfaa-4758-a936-f5f844ac34cc |
| Sweet Lady | e3827ec5-697a-4b7c-9704-1a23041bbc51 |
| Commercial Lady | c2ac25f9-ecc4-4f56-9095-651354df60c0 |
| Teacher Lady | 573e3144-a684-4e72-ac2b-9b2063a50b53 |
| Princess | 8f091740-3df1-4795-8bd9-dc62d88e5131 |
| Commercial Man | 7360f116-6306-4e9a-b487-1235f35a0f21 |
| ASMR Lady | 03496517-369a-4db1-8236-3d3ae459ddf7 |
| Professional Woman | 248be419-c632-4f23-adf1-5324ed7dbf1d |
| Tutorial Man | bd9120b6-7761-47a6-a446-77ca49132781 |
| Calm French Woman | a8a1eb38-5f15-4c1d-8722-7ac0f329727d |
| New York Woman | 34bde396-9fde-4ebf-ad03-e3a1d1155205 |
| Spanish-speaking Lady | 846d6cb0-2301-48b6-9683-48f5618ea2f6 |
| Midwestern Woman | 11af83e2-23eb-452f-956e-7fee218ccb5c |
| Sportsman | ed81fd13-2016-4a49-8fe3-c0d2761695fc |
| Storyteller Lady | 996a8b96-4804-46f0-8e05-3fd4ef1a87cd |
| Spanish-speaking Man | 34dbb662-8e98-413c-a1ef-1a3407675fe7 |
| Doctor Mischief | fb26447f-308b-471e-8b00-8e9f04284eb5 |
| Spanish-speaking Reporter Man | 2695b6b5-5543-4be1-96d9-3967fb5e7fec |
| Young Spanish-speaking Woman | db832ebd-3cb6-42e7-9d47-912b425adbaa |
| The Merchant | 50d6beb4-80ea-4802-8387-6c948fe84208 |
| Stern French Man | 0418348a-0ca2-4e90-9986-800fb8b3bbc0 |
| Madame Mischief | e13cae5c-ec59-4f71-b0a6-266df3c9bb8e |
| German Storyteller Man | db229dfe-f5de-4be4-91fd-7b077c158578 |
| Female Nurse | 5c42302c-194b-4d0c-ba1a-8cb485c84ab9 |
| German Conversation Man | 384b625b-da5d-49e8-a76d-a2855d4f31eb |
| Friendly Brazilian Man | 6a16c1f4-462b-44de-998d-ccdaa4125a0a |
| German Woman | b9de4a89-2257-424b-94c2-db18ba68c81a |
| Southern Woman | f9836c6e-a0bd-460e-9d3c-f7299fa60f94 |
| British Customer Support Lady | a01c369f-6d2d-4185-bc20-b32c225eab70 |
| Chinese Woman Narrator | d4d4b115-57a0-48ea-9a1a-9898966c2966 |
For more information, refer to Cartesia’s guide to Choosing a Voice.
Usage
Cartesia voice IDs conform to the following format:
cartesia.<voice_id>:<model>Parameters:
voice_id(required): The UUID voice identifier from the Voices tablemodel(optional): One of the Sonic models listed above (default:sonic-3)
Examples:
cartesia.a167e0f3-df7e-4d52-a9c3-f949145efdab
cartesia.694f9389-aac1-45b6-b726-9d9369183238:sonic-3
cartesia.829ccd10-f8b3-43cd-b8a0-4aeaa81f3b30:sonic-turboLanguages
Cartesia voices are fully multilingual when used with sonic-multilingual, sonic-2, sonic-3, or sonic-3 models. The multilingual models automatically adapt to the input text language.
Supported languages include: English, Spanish, French, German, Italian, Portuguese, Dutch, Polish, Russian, Chinese, Japanese, Korean, Hindi, Turkish, Swedish, and many more.
For the complete list, refer to Cartesia’s Sonic 3 language support and Sonic 2 language support references.
Examples
See how to use Cartesia voices on the SignalWire platform.
SWML
RELAY Realtime SDK
Call Flow Builder
Use the languages SWML method to set one or more voices for an AI agent.
version: 1.0.0
sections:
main:
- ai:
prompt:
text: Have an open-ended conversation about flowers.
languages:
- name: English
code: en-US
voice: cartesia.a167e0f3-df7e-4d52-a9c3-f949145efdabAlternatively, use the say_voice parameter of the play SWML method to select a voice for basic TTS.
version: 1.0.0
sections:
main:
- set:
say_voice: "cartesia.a167e0f3-df7e-4d52-a9c3-f949145efdab"
- play: "say:Greetings. This is the Customer Support Man voice from Cartesia's Sonic text-to-speech model."Deepgram
For AI agents: a documentation index is available at the root level at /llms.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Deepgram’s Aura model offers a wide range of voices for its text-to-speech API, each designed to produce natural-sounding speech output in an array of different accents and speaking styles.
Deepgram voices have human-like tones, rhythm, and emotion, lower than 250 ms latency, and are optimized for high-throughput applications.
Consult Deepgram’s TTS models guide for more information and samples for supported voices.
Models
Deepgram’s Aura model provides ultra-low latency text-to-speech optimized for conversational AI:
| Model | Description |
|---|---|
aura | Default - Low-latency conversational TTS with human-like tones |
Voices
Press play to audition any Deepgram voice, then copy config to grab the value for SWML or your SDK.
Deepgram Aura voices are designed for natural-sounding English speech. Each voice follows the pattern aura-<name>-en.
Popular voices include:
aura-asteria-en- Clear, professional female voiceaura-luna-en- Warm, conversational female voiceaura-stella-en- Energetic, friendly female voiceaura-athena-en- Authoritative female voiceaura-hera-en- Mature, confident female voiceaura-orion-en- Deep, authoritative male voiceaura-arcas-en- Professional male voiceaura-perseus-en- Friendly male voiceaura-angus-en- Casual male voiceaura-orpheus-en- Smooth, articulate male voiceaura-helios-en- Energetic male voiceaura-zeus-en- Powerful, commanding male voice
For a complete list, consult Deepgram’s Voice Selection guide.
Usage
Deepgram voice IDs conform to the following format:
deepgram.<voice>Where <voice> is the voice identifier from Deepgram’s Voice Selection reference.
Copy the voice ID from the Values column of Deepgram’s Voice Selection reference, prepend deepgram., and the string is ready for use.
Examples:
deepgram.aura-asteria-en
deepgram.aura-orion-en
deepgram.aura-luna-en
deepgram.aura-zeus-enExamples
Learn how to use Deepgram voices on the SignalWire platform.
SWML
RELAY Realtime SDK
Call Flow Builder
Use the languages SWML method to set one or more voices for an AI agent.
version: 1.0.0
sections:
main:
- ai:
prompt:
text: Have an open-ended conversation about flowers.
languages:
- name: English
code: en-US
voice: deepgram.aura-asteria-enAlternatively, use the say_voice parameter of the play SWML method to select a voice for basic TTS.
version: 1.0.0
sections:
main:
- set:
say_voice: "deepgram.aura-asteria-en"
- play: "say:Greetings. This is the Asteria voice from Deepgram's Aura text-to-speech model."ElevenLabs
For AI agents: a documentation index is available at the root level at /llms.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
ElevenLabs voices offer expressive, human-like pronunciation and an extensive list of supported languages. Every ElevenLabs voice can be used with all of the ElevenLabs models.
Models
Consult ElevenLabs’ documentation for an up-to-date list of available models and supported languages.
ElevenLabs Models reference\ \ ElevenLabs’ TTS API offers a range of audio models optimized for different use cases, quality levels, and performance requirements.
Voices
Press play to audition any ElevenLabs voice, then copy config to grab the value for SWML or your SDK.
LanguageallelenesfrhijanosvtaGenderallmalefemaleneutralunknown
ElevenLabs 114
- Eugene
Greek·Male·ElevenLabs·eleven_flash_v2_5
“Καλώς ήρθατε στο SignalWire. Γεια σας, είμαι Eugene από ElevenLabs, και μπορείτε να χρησιμοποιήσετε τη φωνή μου με τον AI πράκτορά σας στην πλατφόρμα SignalWire.”Copy config
- Haseeb
English·Male·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Haseeb - Canadian Presentation from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Abbi
English·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Abbi from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Abe
English·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Abe from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Adalina
English·Female·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Adalina - Professional & Friendly from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Adam
English·Male·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Adam - Brooding, Dark, Tough American from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Adam
English·Male·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Adam - Dominant, Firm from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Adam FM (late night radio)
English·Male·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Adam FM (late night radio) from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Alice
English·Female·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Alice - Clear, Engaging Educator from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Angry Customer
English·Male·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Angry Customer from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Anya
English·Female·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Anya - Casual and friendly from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Arthur
English·Male·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Arthur - Geeky Masculine Deep from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Austin Knox V3
English·Male·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Austin Knox V3 - Good ol' Texas boy, sure, but he's carryin' the whole history of Texas with him from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Ava
English·Female·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Ava - Natural AI Voice from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Beezle Wheezelby
English·Male·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Beezle Wheezelby from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Bella
English·Female·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Bella - Professional, Bright, Warm from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Bella E
English·Female·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Bella E - A natural younger voice great for narration, commercials, and video games from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Bill
English·Male·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Bill - Wise, Mature, Balanced from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Bradford
English·Male·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Bradford from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Brenna
English·Female·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Brenna from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Brian
English·Male·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Brian - Deep, Resonant and Comforting from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Britta
English·Female·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Britta from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- c3p0
English·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm c3p0 from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Callum
English·Male·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Callum - Husky Trickster from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Calvin
English·Male·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Calvin from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Cecile
English·Female·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Cecile - Confident and Strict from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Cecilia O'Connor
English·Female·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Cecilia O'Connor - Warm & Conversational from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Charlie
English·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Charlie from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Charlie
English·Male·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Charlie - Deep, Confident, Energetic from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Chris
English·Male·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Chris - Charming, Down-to-Earth from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Chris Heyez
English·Male·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Chris Heyez from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Christopher
English·Male·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Christopher from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Christopher Smooth
English·Male·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Christopher Smooth from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Clara
English·Female·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Clara from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Cornelius
English·Male·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Cornelius from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Craig
English·Male·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Craig - Calm & Friendly from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Daniel
English·Male·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Daniel - Steady Broadcaster from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- David Joel
English·Male·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm David Joel from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Deep Ray
English·Male·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Deep Ray - Deep Voice of God from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- doug
English·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm doug from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Drew Mochak
English·Male·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Drew Mochak from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Edgar
English·Male·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Edgar - nerdy from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- eli
English·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm eli from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Elise
English·Female·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Elise - Warm, Natural and Engaging from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Ellen
English·Female·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Ellen from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Eric
English·Male·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Eric - Smooth, Trustworthy from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Evelyn
English·Female·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Evelyn from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
- Evie
English·Female·ElevenLabs·eleven_flash_v2_5
“Welcome to SignalWire. Hi, I'm Evie - Friendly from ElevenLabs, you can use my voice with your AI agent on the SignalWire platform.”Copy config
You can use the Name and ID values for each voice in the below table interchangeably.
| Name | ID |
|---|---|
Rachel | 21m00Tcm4TlvDq8ikWAM |
Drew | 29vD33N1CtxCmqQRPOHJ |
Clyde | 2EiwWnXFnvU5JabPnv8n |
Paul | 5Q0t7uMcjvnagumLfvZi |
Domi | AZnzlk1XvdvUeBnXmlld |
Dave | CYw3kZ02Hs0563khs1Fj |
Fin | D38z5RcWu1voky8WS1ja |
Sarah | EXAVITQu4vr4xnSDxMaL |
Antoni | ErXwobaYiN019PkySvjV |
Thomas | GBv7mTt0atIp3Br8iCZE |
Charlie | IKne3meq5aSn9XLyUdCD |
George | JBFqnCBsd6RMkjVDRZzb |
Emily | LcfcDJNUP1GQjkzn1xUU |
Elli | MF3mGyEYCl7XYWbV9V6O |
Callum | N2lVS1w4EtoT3dr4eOWO |
Patrick | ODq5zmih8GrVes37Dizd |
Harry | SOYHLrjzK2X1ezoPC6cr |
Liam | TX3LPaxmHKxFdv7VOQHJ |
Dorothy | ThT5KcBeYPX3keUQqHPh |
Josh | TxGEqnHWrfWFTfGW9XjX |
Arnold | VR6AewLTigWG4xSOukaG |
Charlotte | XB0fDUnXU5powFXDhCwa |
Alice | Xb7hH8MSUJpSbSDYk0k2 |
Matilda | XrExE9yKIg1WjnnlVkGX |
James | ZQe5CZNOzWyzPSCn5a3c |
Joseph | Zlb1dXrM653N07WRdFW3 |
Jeremy | bVMeCyTHy58xNoL34h3p |
Michael | flq6f7yk4E4fJM5XTYuZ |
Ethan | g5CIjZEefAph4nQFvHAz |
Chris | iP95p4xoKVk53GoZ742B |
Gigi | jBpfuIE2acCO8z3wKNLl |
Freya | jsCqWAovK2LkecY7zXl4 |
Brian | nPczCjzI2devNBz1zQrb |
Grace | oWAxZDx7w5VEj9dCyTzz |
Daniel | onwK4e9ZLuTAKqWW03F9 |
Lily | pFZP5JQG7iQjIQuC4Bku |
Serena | pMsXgVXv3BLzUgSXRplE |
Adam | pNInz6obpgDQGcFmaJgB |
Nicole | piTKgcLEGmPE4e6mEKli |
Bill | pqHfZKP75CvOlQylNhV4 |
Jessie | t0jbNlBVZ17f02VDIeMI |
Sam | yoZ06aMxZJJ28mfd3POQ |
Glinda | z9fAnlkpzviPz146aGWa |
Giovanni | zcAOhNBS3c14rBihAFp1 |
Mimi | zrHiDhphv9ZnVXBqCLjz |
Usage
ElevenLabs voice IDs conform to the following format:
elevenlabs.<voice>:<model>Examples:
elevenlabs.Rachel:eleven_flash_v2_5
elevenlabs.21m00Tcm4TlvDq8ikWAM:eleven_v3
elevenlabs.Brian:eleven_multilingual_v2Languages
ElevenLabs’ multilingual models are designed to be interchangeably compatible with all supported languages. Rather than enforcing language selection with language code, this TTS model automatically uses the appropriate language of the input text.
Consult ElevenLabs’ supported languages resource for an up-to-date list of supported languages.
Examples
Learn how to use ElevenLabs voices on the SignalWire platform.
SWML
RELAY Realtime SDK
Use the languages SWML method to set one or more voices for an AI agent.
version: 1.0.0
sections:
main:
- ai:
prompt:
text: Have an open-ended conversation about flowers.
languages:
- name: English
code: en-US
voice: elevenlabs.rachelAlternatively, use the say_voice parameter of the play SWML method to select a voice for basic TTS.
version: 1.0.0
sections:
main:
- set:
say_voice: "elevenlabs.rachel"
- play: "say:Greetings. This is the Rachel voice, speaking in English, from ElevenLabs' Multilingual v2 text-to-speech model."Google Cloud
For AI agents: a documentation index is available at the root level at /llms.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Google Cloud offers a number of robust text-to-speech voice models. SignalWire supports all Google Cloud voices in both General Availability and Preview launch stages, except for the Studio model.
Models
Google Cloud offers multiple TTS model types with varying quality and pricing:
| Model Type | Description |
|---|---|
Standard | Basic, budget-friendly TTS model |
WaveNet | Deep learning-based, natural and lifelike speech |
Neural2 | Advanced model with human-like pronunciation |
Polyglot | Multi-language variants of specific voices |
The model type is encoded in the voice name (e.g., en-US-Neural2-A, es-ES-Wavenet-B).
- Standard is a basic, reliable, and budget-friendly text-to-speech model. The Standard model is less natural-sounding than WaveNet and Neural2, but more cost-effective.
- WaveNet is powered by deep learning technology and offers more natural and lifelike speech output.
- Neural2 is based on the same technology used to create Custom Voices and prioritizes natural and human-like pronunciation and intonation.
- Polyglot voices have variants in multiple languages. For example, at time of writing, the
polyglot-1voice has variants for English (Australia), English (US), French, German, Spanish (Spain), and Spanish (US).
Voices
Press play to audition any Google Cloud voice, then copy config to grab the value for SWML or your SDK.
Billing
Google Cloud TTS usage on SignalWire is billed according to the following SKU codes:
| Billing SKU | Models | Description |
|---|---|---|
gcloud | Standard, WaveNet | Traditional and WaveNet model billing |
gcloud_cog | Neural2, Polyglot | Cognitive services (Neural2) model billing |
The billing SKU is automatically determined by the voice model type. Neural2 and Polyglot voices use the gcloud_cog SKU, while Standard and WaveNet voices use the gcloud SKU.
Consult the Voice API Pricing page for current rates.
Usage
Copy the voice ID in whole from the Voice name column of Google’s table of supported voices. Google Cloud voice IDs encode language and model information, so no modification is needed to make these selections. Prepend gcloud. and the string is ready for use. For example: gcloud.en-GB-Wavenet-A
Google Cloud voice IDs conform to the following format:
gcloud.<voice>Where <voice> is the complete voice name from Google’s supported voices table.
Voice name pattern:
Google Cloud voice names follow: <language>-<model>-<variant>
language: Language code (e.g.,en-US,es-ES,ja-JP)model: Model type (e.g.,Standard,Wavenet,Neural2,Polyglot)variant: Voice variant letter (e.g.,A,B,C)
Examples:
gcloud.en-US-Neural2-A
gcloud.en-GB-Wavenet-B
gcloud.es-ES-Neural2-A
gcloud.ja-JP-Neural2-B
gcloud.fr-FR-Wavenet-C
gcloud.de-DE-Standard-A
gcloud.en-US-Polyglot-1Case insensitivity:
Voice IDs are case-insensitive. These are equivalent:
gcloud.en-US-Neural2-A
gcloud.en-us-neural2-aNote: Google Cloud voice IDs already encode language and model information.
Languages
Sample all available voices with Google’s supported voices and languages reference. Copy the voice identifier string in whole from the Voice name column.
Unlike the other supported engines, Google Cloud voice identifier strings include both voice and language keys, following the pattern <language>-<model>-<variant>. For example:
- English (UK) WaveNet female voice:
en-GB-Wavenet-A - Spanish (Spain) Neural2 male voice:
es-ES-Neural2-B - Mandarin Chinese Standard female voice:
cmn-CN-Standard-D
Examples
Learn how to use Google Cloud voices on the SignalWire platform.
SWML
RELAY Realtime SDK
Call Flow Builder
Use the languages SWML method to set one or more voices for an AI agent.
version: 1.0.0
sections:
main:
- ai:
prompt:
text: Have an open-ended conversation about flowers.
languages:
- name: English
code: en-US
voice: gcloud.en-US-Neural2-AAlternatively, use the say_voice parameter of the play SWML method to select a voice for basic TTS.
version: 1.0.0
sections:
main:
- set:
say_voice: "gcloud.en-US-Neural2-A"
- play: "say:Greetings. This is the 2-A US English voice from Google Cloud's Neural2 text-to-speech model."Inworld
For AI agents: a documentation index is available at the root level at /llms.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Inworld is a text-to-speech engine offering high-quality, expressive voices across many languages.
Models
SignalWire supports two Inworld models. See Inworld’s model documentation for more detail.
| Model | Description |
|---|---|
inworld-tts-1.5-mini | Faster, lower-cost model, suited for high-volume, latency-sensitive applications |
inworld-tts-1.5-max | Higher-quality model, suited for expressive, character-driven, and premium reads |
Defaults to inworld-tts-1.5-mini when used with AI agents; otherwise it defaults to inworld-tts-1.5-max. Set a model explicitly to override this.
Voices
Press play to audition any Inworld voice, then copy config to grab the value for SWML or your SDK.
Inworld provides a large library of expressive voices across many languages. A voice’s name is its voice ID, for example, Lauren becomes inworld.Lauren in the voice string.
Only Inworld’s built-in voices are supported. Cloned and custom voices do not work, you must use one of the default voice IDs that Inworld provides.
Preview the voices and find their IDs in Inworld’s documentation:
Inworld TTS Playground\ \ Preview Inworld voices and models in the browser. Inworld TTS docs\ \ Reference for voices, models, and languages.
Languages
Inworld supports the following languages:
| Language | Code |
|---|---|
| English | en |
| Arabic | ar |
| Chinese (Mandarin) | zh |
| Dutch | nl |
| French | fr |
| German | de |
| Hebrew | he |
| Hindi | hi |
| Italian | it |
| Japanese | ja |
| Korean | ko |
| Polish | pl |
| Portuguese | pt |
| Russian | ru |
| Spanish | es |
Refer to the Inworld TTS docs for the most up-to-date reference to supported languages and voices.
Usage
A voice identifier string has three parts: the inworld engine code, a voice ID, and an optional model.
Format: inworld.<voiceId>:<model>
voiceId(required): an Inworld voice name (for example,Lauren); see Voices.model(optional): one of the models above. If you omit it, a default model is used.
Examples:
inworld.Lauren:inworld-tts-1.5-mini
inworld.Brian:inworld-tts-1.5-max
inworld.Asuka:inworld-tts-1.5-miniYou can also set the model with the separate model parameter of the languages SWML method instead of appending :model to the voice string:
languages:
- name: English
code: en-US
voice: inworld.Lauren
model: inworld-tts-1.5-miniBuild with Inworld on SignalWire
1
Create a Space and add credit
If you don’t have one yet, you’ll need to create a SignalWire Space. Be sure to add some credit to test with.
2
Add a new Resource
Navigate to the Resources tab in your SignalWire Dashboard and click + Add New to create a new Resource.
3
Create a SWML Script
From the Resources menu, select SWML Script. Name it something fun and recognizable. Ours is titled Inworld Wizard.
Next, paste the following starter script into the text box, and hit Save:
version: 1.0.0
sections:
main:
- ai:
prompt:
text: |
You're Lauren, a voice from Inworld's TTS engine!
Introduce yourself, and have a conversation about programmable unified communications on the SignalWire platform.
languages:
- name: English
code: en-US
voice: inworld.Lauren:inworld-tts-1.5-mini4
Buy and assign a phone number
Navigate to the Phone Numbers section of the Dashboard’s left sidebar menu.
Purchase a phone number and assign it to the desired SWML script.
A purchased phone number showing assignment to a specified Resource.
Assigning a phone number to the SWML Script
5
Give it a call!
Call the number you just assigned to chat with your new AI voice application on the phone.
Next steps with SWML
Now you’ve deployed your very first SignalWire voice AI application using Inworld voices. Next, dive deeper into SWML to explore its capabilities!
Methods reference\ \ Documentation for all SWML methods AI in SWML\ \ Build advanced AI applications using SignalWire Markup Language Guides\ \ SWML guides and demo applications
MiniMax
For AI agents: a documentation index is available at the root level at /llms.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
MiniMax is a text-to-speech engine offering expressive voices across many languages, with controls for emotion, speed, pitch, and volume.
Models
SignalWire supports the following MiniMax models. Pick a turbo model for speed and cost, or an hd model for the highest quality. If you don’t specify a model, speech-2.6-turbo is used.
| Model | Description |
|---|---|
speech-2.6-turbo | Default. Latest turbo model: faster and lower-cost |
speech-2.6-hd | Latest HD model: higher quality |
speech-02-turbo | Previous-generation turbo model |
speech-02-hd | Previous-generation HD model |
speech-01-turbo | First-generation turbo model |
speech-01-hd | First-generation HD model |
Voices
Press play to audition any MiniMax voice, then copy config to grab the value for SWML or your SDK.
MiniMax provides a large library of system voices across many languages. A voice’s Voice ID is what you put in the voice string: for example, English_CalmWoman becomes minimax.English_CalmWoman.
Only MiniMax’s built-in system voices are supported. Cloned and AI-generated voices do not work, you must use one of the default voice IDs that MiniMax provides.
Some voice IDs contain spaces or parentheses (for example, Cantonese_ProfessionalHost (F)). Wrap the whole voice string in quotes when a voice ID isn’t a plain word, for example voice: "minimax.Cantonese_ProfessionalHost (F):speech-2.6-turbo".
Browse the full list of voice IDs in MiniMax’s documentation:
MiniMax system voice IDs\ \ Browse the full list of MiniMax system voice IDs. MiniMax TTS docs\ \ Reference for models, voices, and parameters.
Languages
MiniMax supports the following languages and automatically detects the language of your text:
Arabic, Cantonese, Chinese, Mandarin, Czech, Dutch, English, Finnish, French, German, Greek, Hindi, Indonesian, Italian, Japanese, Korean, Polish, Portuguese, Romanian, Russian, Spanish, Thai, Turkish, Ukrainian, Vietnamese.
Refer to the MiniMax developer platform for the most up-to-date reference to supported languages and voices.
Usage
A voice identifier string has three parts: the minimax engine code, a voice ID, and an optional model.
Format: minimax.<voiceId>:<model>
voiceId(required): a MiniMax system voice ID (for example,English_CalmWoman); see Voices.model(optional): one of the models above. Defaults tospeech-2.6-turbo.
Examples:
minimax.English_CalmWoman:speech-2.6-turbo
minimax.English_Trustworth_Man:speech-2.6-hd
minimax.Japanese_KindLady:speech-2.6-turboYou can also set the model with the separate model parameter of the languages SWML method instead of appending :model to the voice string:
languages:
- name: English
code: en-US
voice: minimax.English_CalmWoman
model: speech-2.6-turboBuild with MiniMax on SignalWire
1
Create a Space and add credit
If you don’t have one yet, you’ll need to create a SignalWire Space. Be sure to add some credit to test with.
2
Add a new Resource
Navigate to the Resources tab in your SignalWire Dashboard and click + Add New to create a new Resource.
3
Create a SWML Script
From the Resources menu, select SWML Script. Name it something fun and recognizable. Ours is titled MiniMax Wizard.
Next, paste the following starter script into the text box, and hit Save:
version: 1.0.0
sections:
main:
- ai:
prompt:
text: |
You're the Calm Woman, a voice from MiniMax's TTS engine!
Introduce yourself, and have a conversation about programmable unified communications on the SignalWire platform.
languages:
- name: English
code: en-US
voice: minimax.English_CalmWoman:speech-2.6-turbo4
Buy and assign a phone number
Navigate to the Phone Numbers section of the Dashboard’s left sidebar menu.
Purchase a phone number and assign it to the desired SWML script.
A purchased phone number showing assignment to a specified Resource.
Assigning a phone number to the SWML Script
5
Give it a call!
Call the number you just assigned to chat with your new AI voice application on the phone.
Next steps with SWML
Now you’ve deployed your very first SignalWire voice AI application using MiniMax voices. Next, dive deeper into SWML to explore its capabilities!
Methods reference\ \ Documentation for all SWML methods AI in SWML\ \ Build advanced AI applications using SignalWire Markup Language Guides\ \ SWML guides and demo applications
OpenAI
For AI agents: a documentation index is available at the root level at /llms.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
OpenAI offers versatile multilingual voices balancing low latency and good quality. While voices are optimized for English, they perform well across all supported languages.
Consult OpenAI’s Text-to-Speech documentation for more information and audio samples for available voices.
Models
OpenAI offers two TTS models with different quality and latency characteristics:
| Model | Description |
|---|---|
tts-1 | Default - Standard quality, optimized for speed |
tts-1-hd | High-definition quality, improved audio fidelity |
Voices
Press play to audition any OpenAI voice, then copy config to grab the value for SWML or your SDK.
OpenAI provides 6 fully multilingual voices optimized for natural-sounding speech:
| Voice | Description |
|---|---|
alloy | Neutral, balanced voice |
echo | Warm, expressive voice |
fable | British accent, articulate |
onyx | Deep, authoritative voice |
nova | Energetic, friendly voice |
shimmer | Soft, gentle voice |
Languages
All OpenAI voices are fully multilingual and automatically adapt to the input text language.
Consult OpenAI’s supported languages resource for an up-to-date list.
Usage
OpenAI voice IDs conform to the following format:
openai.<voice>:<model>Parameters:
voice(required): One of: alloy, echo, fable, onyx, nova, shimmermodel(optional):tts-1(default) ortts-1-hd
Examples:
openai.alloy
openai.nova:tts-1-hd
openai.fable:tts-1Examples
Learn how to use OpenAI voices on the SignalWire platform.
SWML
RELAY Realtime SDK
Call Flow Builder
Use the languages SWML method to set one or more voices for an AI agent.
version: 1.0.0
sections:
main:
- ai:
prompt:
text: Have an open-ended conversation about flowers.
languages:
- name: English
code: en-US
voice: openai.alloyAlternatively, use the say_voice parameter of the play SWML method to select a voice for basic TTS.
version: 1.0.0
sections:
main:
- set:
say_voice: "openai.alloy"
- play: "say:Greetings. This is the Alloy voice from OpenAI's text-to-speech model."Rime
For AI agents: a documentation index is available at the root level at /llms.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Rime offers uniquely realistic voices with a focus on natural expressiveness.
Models
| Model | Description |
|---|---|
coda | Rime’s flagship model, with top-rated, ultra-realistic voices |
mistv2 | Default - Updated version of mist |
arcana | Expressive model with natural intonation |
mist<br>Deprecated | Fast, precise model for business applications |
Coda\ \ Coda is Rime’s flagship model, pairing a sophisticated LLM backbone with a dedicated\ speech inference engine for top-rated, ultra-realistic voices. Mist v2\ \ Mist is Rime’s fastest model, built for high-volume, business-critical applications. Arcana\ \ Arcana offers a variety of ultra-realistic voices\ prioritizing authenticity and character.
Voices
Press play to audition any Rime voice, then copy config to grab the value for SWML or your SDK.
Mist v2 is the default Rime model on the SignalWire platform. To use this model, simply set the voice ID.
To use Coda or Arcana voices, set model to coda or arcana with the languages SWML method:
languages:
- name: English
code: en-US
voice: rime.luna
model: codaLanguages
As of June 18th, 2026, SignalWire supports the following languages with Rime:
| Language | Code |
|---|---|
| English | eng |
| Spanish | spa |
| French | fra |
| German | ger |
Refer to the Rime docs for the most up-to-date reference to supported languages.
Usage
Format: rime.<speaker>:<model>
Examples:
rime.luna:coda
rime.spore:arcana
rime.speaker1:mistv2
rime.voice123:mistFor a full demonstration and sample script, see below.
Rime dashboard\ \ Preview Rime voices on their dashboard Rime docs\ \ Refer to the Rime Docs for an up-to-date list of voice IDs.
Build with Rime on SignalWire
1
Create a Space and add credit
If you don’t have one yet, you’ll need to create a SignalWire Space. Be sure to add some credit to test with.
2
Add a new Resource
Navigate to the Resources tab in your SignalWire Dashboard and click + Add New to create a new Resource.
3
Create a SWML Script
From the Resources menu, select SWML Script. Name it something fun and recognizable. Ours is titled Rime Wizard.
Next, paste the following starter script into the text box, and hit Save:
version: 1.0.0
sections:
main:
- ai:
prompt:
text: |
You're Luna, a voice from Rime's Coda model!
Introduce yourself, and have a conversation about programmable unified communications on the SignalWire platform.
languages:
- name: English
code: en-US
voice: rime.luna
model: coda4
Buy and assign a phone number
Navigate to the Phone Numbers section of the Dashboard’s left sidebar menu.
Purchase a phone number and assign it to the desired SWML script.
A purchased phone number showing assignment to a specified Resource.
Assigning a phone number to the SWML Script
5
Give it a call!
Call the number you just assigned to chat with your new AI voice application on the phone.
Next steps with SWML
Now you’ve deployed your very first SignalWire voice AI application using Rime voices. Next, dive deeper into SWML to explore its capabilities!
Methods reference\ \ Documentation for all SWML methods AI in SWML\ \ Build advanced AI applications using SignalWire Markup Language Guides\ \ SWML guides and demo applications
WebRTC
For AI agents: a documentation index is available at the root level at /llms.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
WebRTC (Web Real-Time Communication) is a free, open-source project that adds real-time voice and video capabilities to web browsers and mobile applications. It lets web apps stream audio and video media directly between peers without plugins or third-party software.
WebRTC combines a set of W3C APIs and IETF protocols that enable peer-to-peer data sharing, audio/video capture, and network traversal. SignalWire uses WebRTC as the transport layer for browser-based voice and video calling.
Key benefits
- No plugins required, works natively in all major browsers.
- Cross-platform, connects devices regardless of operating system.
- Encrypted by default, all media is secured with SRTP (Secure Real-Time Transport Protocol).
- Adaptive quality, adjusts bitrate and resolution based on network conditions.
- Interoperable, works alongside SIP, PSTN, and other voice/video protocols.
Browser support
All major browsers support WebRTC natively:
- Google Chrome
- Mozilla Firefox
- Safari (macOS and iOS)
- Microsoft Edge
- Opera
- Brave
- Vivaldi
No plugins or extensions are needed, users grant microphone/camera permissions and connect immediately.
