Skip to content

Voice

Fresh

Voice

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

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:

  1. In the SignalWire Dashboard, click Phone Numbers in the sidebar.
  2. Click the Verified tab, then click + New.
  3. Enter the phone number and click Call Me.
  4. 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 numberRequested CNAM
+15551234567BUSINESSNAME
+15557654321BUSINESSNAME

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.

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.

SettingDescription
DomainYour SIP Credential domain (e.g., your-space.sip.signalwire.com)
UsernameThe username of your SIP Credential. This setting can be adjusted in the URI field when creating a new SIP Credential
PasswordThe password set when creating your SIP Credential
TransportThe signaling transport protocol: TLS, TCP, or UDP. Must match the transport configured on your SIP Credential.
Encryption typeControls 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:

  1. Go to the settings page for the newly created Domain App, by clicking on the app name in the Domain Apps list.
  2. Set the HANDLE USING field to SWML Script
  3. Set the WHEN A CALL COMES IN field to the URL of your SWML script
  4. 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:

  1. Go to the settings page for the newly created Domain App, by clicking on the app name in the Domain Apps list.
  2. Set the HANDLE USING field to A Call Flow
  3. Set the WHEN A CALL COMES IN field to the Call Flow you want to use from the dropdown list.
  4. 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:

  1. Go to the settings page for the newly created Domain App, by clicking on the app name in the Domain Apps list.
  2. Set the HANDLE USING field to RELAY Application
  3. Set a topic (V4) or context (V3) in the WHEN A CALL COMES IN field. Let’s use office as an example.
  4. Run code listening for calls on that office topic/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
IdentifierDescription
engine<br>requiredThe TTS provider (e.g., elevenlabs, rime, openai)
voice<br>requiredThe voice identifier (name or ID depending on engine)
model<br>optionalModel 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-A

For detailed instructions for each provider, consult the voice ID references linked in the Usage column of the below table.

TTS providerSample voice ID stringUsage
Amazon Pollyamazon.Joanna-NeuralReference
Azureazure.en-US-AvaNeuralReference
Cartesiacartesia.a167e0f3-df7e-4d52-a9c3-f949145efdabReference
Deepgramdeepgram.aura-asteria-enReference
ElevenLabselevenlabs.thomasReference
Google Cloudgcloud.en-US-Casual-KReference
Inworldinworld.Lauren:inworld-tts-1.5-miniReference
MiniMaxminimax.English_CalmWoman:speech-2.6-turboReference
OpenAIopenai.alloyReference
Rimerime.luna:arcanaReference

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>
ParameterPossible valuesDescription
engine<br>required- amazon<br>- polly (will be deprecated in the future)TTS engine
voice<br>requiredChoose from the Name/ID columnVoice ID
model<br>optionalstandard, neural, or generativeAmazon Polly model. Default: standard
language<br>optionalChoose from the Language code columnSets 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-IN

Simplified 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:neural

Alternatively, 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-ElviraNeural

Note: 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-AvaNeural

Alternatively, 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:

ModelDescription
sonic-3Default. Latest model with enhanced naturalness
sonic-2Second-generation model with improved quality
sonic-turboOptimized for ultra-low latency
sonicThe 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 nameVoice ID
German Conversational Woman3f4ade23-6eb4-4279-ab05-6a144947c4d5
Nonfiction Man79f8b5fb-2cc8-479a-80df-29f7a7cf1a3e
Friendly Sidekicke00d0e4c-a5c8-443f-a8a3-473eb9a62355
French Conversational Ladya249eaff-1e96-4d2c-b23b-12efa4f66f41
French Narrator Lady8832a0b5-47b2-4751-bb22-6a8e2149303d
German Reporter Woman119e03e4-0705-43c9-b3ac-a658ce2b6639
Indian Lady3b554273-4299-48b9-9aaf-eefd438e3941
British Reading Lady71a7ad14-091c-4e8e-a314-022ece01c121
British Narration Lady4d2fd738-3b3d-4368-957a-bb4805275bd9
Japanese Children Book44863732-e415-4084-8ba1-deabe34ce3d2
Japanese Woman Conversational2b568345-1d48-4047-b25f-7baccf842eb0
Japanese Male Conversationale8a863c6-22c7-4671-86ca-91cacffc038d
Reading Lady15a9cd88-84b0-4a8b-95f2-5d583b54c72e
Newsmand46abd1d-2d02-43e8-819f-51fb652c1c61
Child2ee87190-8f84-4925-97da-e52547f9462c
Meditation Ladycd17ff2d-5ea4-4695-be8f-42193949b946
Maria5345cf08-6f37-424d-a5d9-8ae1101b9377
1920’s Radioman41534e16-2966-4c6b-9670-111411def906
Newsladybf991597-6c13-47e4-8411-91ec2de5c466
Calm Lady00a77add-48d5-4ef6-8157-71e5437b282d
Helpful Woman156fb8d2-335b-4950-9cb3-a2d33befec77
Mexican Woman5c5ad5e7-1020-476b-8b91-fdcbe9cc313c
California Girlb7d50908-b17c-442d-ad8d-810c63997ed9
Korean Narrator Woman663afeec-d082-4ab5-827e-2e41bf73a25b
Russian Calm Lady779673f3-895f-4935-b6b5-b031dc78b319
Russian Narrator Man 12b3bb17d-26b9-421f-b8ca-1dd92332279f
Russian Narrator Man 2da05e96d-ca10-4220-9042-d8acef654fa9
Russian Narrator Woman642014de-c0e3-4133-adc0-36b5309c23e6
Hinglish Speaking Lady95d51f79-c397-46f9-b49a-23763d3eaa2d
Italian Narrator Woman0e21713a-5e9a-428a-bed4-90d410b87f13
Polish Narrator Woman575a5d29-1fdc-4d4e-9afa-5a9a71759864
Chinese Female Conversationale90c6678-f0d3-4767-9883-5d0ecf5894a8
Pilot over Intercom36b42fcb-60c5-4bec-b077-cb1a00a92ec6
Chinese Commercial Maneda5bbff-1ff1-4886-8ef1-4e69a77640a0
French Narrator Man5c3c89e5-535f-43ef-b14d-f8ffe148c1f0
Spanish Narrator Mana67e0421-22e0-4d5b-b586-bd4a64aee41d
Reading Manf146dcec-e481-45be-8ad2-96e1e40e7f32
New York Man34575e71-908f-4ab6-ab54-b08c95d6597d
Friendly French Manab7c61f5-3daa-47dd-a23b-4ac0aac5f5c3
Barbershop Mana0e99841-438c-4a64-b679-ae501e7d6091
Indian Man638efaaa-4d0c-442e-b701-3fae16aad012
Australian Customer Support Man41f3c367-e0a8-4a85-89e0-c27bae9c9b6d
Friendly Australian Man421b3369-f63f-4b03-8980-37a44df1d4e8
Wise Manb043dea0-a007-4bbe-a708-769dc0d0c569
Friendly Reading Man69267136-1bdc-412f-ad78-0caad210fb40
Customer Support Mana167e0f3-df7e-4d52-a9c3-f949145efdab
Dutch Confident Man9e8db62d-056f-47f3-b3b6-1b05767f9176
Dutch Man4aa74047-d005-4463-ba2e-a0d9b261fb87
Hindi Reporter Manbdab08ad-4137-4548-b9db-6142854c7525
Italian Calm Man408daed0-c597-4c27-aae8-fa0497d644bf
Italian Narrator Man029c3c7a-b6d9-44f0-814b-200d849830ff
Swedish Narrator Man38a146c3-69d7-40ad-aada-76d5a2621758
Polish Confident Man3d335974-4c4a-400a-84dc-ebf4b73aada6
Spanish-speaking Storyteller Man846fa30b-6e1a-49b9-b7df-6be47092a09a
Kentucky Woman4f8651b0-bbbd-46ac-8b37-5168c5923303
Chinese Commercial Woman0b904166-a29f-4d2e-bb20-41ca302f98e9
Middle Eastern Womandaf747c6-6bc2-4083-bd59-aa94dce23f5d
Hindi Narrator Womanc1abd502-9231-4558-a054-10ac950c356d
Sarah694f9389-aac1-45b6-b726-9d9369183238
Sarah Curious794f9389-aac1-45b6-b726-9d9369183238
Laidback Woman21b81c14-f85b-436d-aff5-43f2e788ecf8
Reflective Womana3520a8f-226a-428d-9fcd-b0a4711a6829
Helpful French Lady65b25c5d-ff07-4687-a04c-da2f43ef6fa9
Pleasant Brazilian Lady700d1ee3-a641-4018-ba6e-899dcadc9e2b
Customer Support Lady829ccd10-f8b3-43cd-b8a0-4aeaa81f3b30
British Lady79a125e8-cd45-4c13-8a67-188112f4dd22
Wise Ladyc8605446-247c-4d39-acd4-8f4c28aa363c
Australian Narrator Lady8985388c-1332-4ce7-8d55-789628aa3df4
Indian Customer Support Ladyff1bb1a9-c582-4570-9670-5f46169d0fc8
Swedish Calm Ladyf852eb8d-a177-48cd-bf63-7e4dcab61a36
Spanish Narrator Lady2deb3edf-b9d8-4d06-8db9-5742fb8a3cb2
Salesman820a3788-2b37-4d21-847a-b65d8a68c99a
Yogamanf114a467-c40a-4db8-964d-aaba89cd08fa
Moviemanc45bc5ec-dc68-4feb-8829-6e6b2748095d
Wizardman87748186-23bb-4158-a1eb-332911b0b708
Australian Woman043cfc81-d69f-4bee-ae1e-7862cb358650
Korean Calm Woman29e5f8b4-b953-4160-848f-40fae182235b
Friendly German Manfb9fcab6-aba5-49ec-8d7e-3f1100296dde
Announcer Man5619d38c-cf51-4d8e-9575-48f61a280413
Wise Guide Man42b39f37-515f-4eee-8546-73e841679c1d
Midwestern Man565510e8-6b45-45de-8758-13588fbaec73
Kentucky Man726d5ae5-055f-4c3d-8355-d9677de68937
Brazilian Young Man5063f45b-d9e0-4095-b056-8f3ee055d411
Chinese Call Center Man3a63e2d1-1c1e-425d-8e79-5100bc910e90
German Reporter Man3f6e78a8-5283-42aa-b5e7-af82e8bb310c
Confident British Man63ff761f-c1e8-414b-b969-d1833d1c870c
Southern Man98a34ef2-2140-4c28-9c71-663dc4dd7022
Classy British Man95856005-0332-41b0-935f-352e296aa0df
Polite Manee7ea9f8-c0c1-498c-9279-764d6b56d189
Mexican Man15d0c2e2-8d29-44c3-be23-d585d5f154a1
Korean Narrator Man57dba6ff-fe3b-479d-836e-06f5a61cb5de
Turkish Narrator Man5a31e4fb-f823-4359-aa91-82c0ae9a991c
Turkish Calm Man39f753ef-b0eb-41cd-aa53-2f3c284f948f
Hindi Calm Manac7ee4fa-25db-420d-bfff-f590d740aeb2
Hindi Narrator Man7f423809-0011-4658-ba48-a411f5e516ba
Polish Narrator Man4ef93bb3-682a-46e6-b881-8e157b6b4388
Polish Young Man82a7fc13-2927-4e42-9b8a-bb1f9e506521
Alabama Male40104aff-a015-4da1-9912-af950fbec99e
Australian Male13524ffb-a918-499a-ae97-c98c7c4408c4
Anime Girl1001d611-b1a8-46bd-a5ca-551b23505334
Japanese Man Book97e7d7a9-dfaa-4758-a936-f5f844ac34cc
Sweet Ladye3827ec5-697a-4b7c-9704-1a23041bbc51
Commercial Ladyc2ac25f9-ecc4-4f56-9095-651354df60c0
Teacher Lady573e3144-a684-4e72-ac2b-9b2063a50b53
Princess8f091740-3df1-4795-8bd9-dc62d88e5131
Commercial Man7360f116-6306-4e9a-b487-1235f35a0f21
ASMR Lady03496517-369a-4db1-8236-3d3ae459ddf7
Professional Woman248be419-c632-4f23-adf1-5324ed7dbf1d
Tutorial Manbd9120b6-7761-47a6-a446-77ca49132781
Calm French Womana8a1eb38-5f15-4c1d-8722-7ac0f329727d
New York Woman34bde396-9fde-4ebf-ad03-e3a1d1155205
Spanish-speaking Lady846d6cb0-2301-48b6-9683-48f5618ea2f6
Midwestern Woman11af83e2-23eb-452f-956e-7fee218ccb5c
Sportsmaned81fd13-2016-4a49-8fe3-c0d2761695fc
Storyteller Lady996a8b96-4804-46f0-8e05-3fd4ef1a87cd
Spanish-speaking Man34dbb662-8e98-413c-a1ef-1a3407675fe7
Doctor Mischieffb26447f-308b-471e-8b00-8e9f04284eb5
Spanish-speaking Reporter Man2695b6b5-5543-4be1-96d9-3967fb5e7fec
Young Spanish-speaking Womandb832ebd-3cb6-42e7-9d47-912b425adbaa
The Merchant50d6beb4-80ea-4802-8387-6c948fe84208
Stern French Man0418348a-0ca2-4e90-9986-800fb8b3bbc0
Madame Mischiefe13cae5c-ec59-4f71-b0a6-266df3c9bb8e
German Storyteller Mandb229dfe-f5de-4be4-91fd-7b077c158578
Female Nurse5c42302c-194b-4d0c-ba1a-8cb485c84ab9
German Conversation Man384b625b-da5d-49e8-a76d-a2855d4f31eb
Friendly Brazilian Man6a16c1f4-462b-44de-998d-ccdaa4125a0a
German Womanb9de4a89-2257-424b-94c2-db18ba68c81a
Southern Womanf9836c6e-a0bd-460e-9d3c-f7299fa60f94
British Customer Support Ladya01c369f-6d2d-4185-bc20-b32c225eab70
Chinese Woman Narratord4d4b115-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 table
  • model (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-turbo

Languages

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-f949145efdab

Alternatively, 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:

ModelDescription
auraDefault - 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 voice
  • aura-luna-en - Warm, conversational female voice
  • aura-stella-en - Energetic, friendly female voice
  • aura-athena-en - Authoritative female voice
  • aura-hera-en - Mature, confident female voice
  • aura-orion-en - Deep, authoritative male voice
  • aura-arcas-en - Professional male voice
  • aura-perseus-en - Friendly male voice
  • aura-angus-en - Casual male voice
  • aura-orpheus-en - Smooth, articulate male voice
  • aura-helios-en - Energetic male voice
  • aura-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-en

Examples

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-en

Alternatively, 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.

NameID
Rachel21m00Tcm4TlvDq8ikWAM
Drew29vD33N1CtxCmqQRPOHJ
Clyde2EiwWnXFnvU5JabPnv8n
Paul5Q0t7uMcjvnagumLfvZi
DomiAZnzlk1XvdvUeBnXmlld
DaveCYw3kZ02Hs0563khs1Fj
FinD38z5RcWu1voky8WS1ja
SarahEXAVITQu4vr4xnSDxMaL
AntoniErXwobaYiN019PkySvjV
ThomasGBv7mTt0atIp3Br8iCZE
CharlieIKne3meq5aSn9XLyUdCD
GeorgeJBFqnCBsd6RMkjVDRZzb
EmilyLcfcDJNUP1GQjkzn1xUU
ElliMF3mGyEYCl7XYWbV9V6O
CallumN2lVS1w4EtoT3dr4eOWO
PatrickODq5zmih8GrVes37Dizd
HarrySOYHLrjzK2X1ezoPC6cr
LiamTX3LPaxmHKxFdv7VOQHJ
DorothyThT5KcBeYPX3keUQqHPh
JoshTxGEqnHWrfWFTfGW9XjX
ArnoldVR6AewLTigWG4xSOukaG
CharlotteXB0fDUnXU5powFXDhCwa
AliceXb7hH8MSUJpSbSDYk0k2
MatildaXrExE9yKIg1WjnnlVkGX
JamesZQe5CZNOzWyzPSCn5a3c
JosephZlb1dXrM653N07WRdFW3
JeremybVMeCyTHy58xNoL34h3p
Michaelflq6f7yk4E4fJM5XTYuZ
Ethang5CIjZEefAph4nQFvHAz
ChrisiP95p4xoKVk53GoZ742B
GigijBpfuIE2acCO8z3wKNLl
FreyajsCqWAovK2LkecY7zXl4
BriannPczCjzI2devNBz1zQrb
GraceoWAxZDx7w5VEj9dCyTzz
DanielonwK4e9ZLuTAKqWW03F9
LilypFZP5JQG7iQjIQuC4Bku
SerenapMsXgVXv3BLzUgSXRplE
AdampNInz6obpgDQGcFmaJgB
NicolepiTKgcLEGmPE4e6mEKli
BillpqHfZKP75CvOlQylNhV4
Jessiet0jbNlBVZ17f02VDIeMI
SamyoZ06aMxZJJ28mfd3POQ
Glindaz9fAnlkpzviPz146aGWa
GiovannizcAOhNBS3c14rBihAFp1
MimizrHiDhphv9ZnVXBqCLjz

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_v2

Languages

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

Alternatively, 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 TypeDescription
StandardBasic, budget-friendly TTS model
WaveNetDeep learning-based, natural and lifelike speech
Neural2Advanced model with human-like pronunciation
PolyglotMulti-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-1 voice 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 SKUModelsDescription
gcloudStandard, WaveNetTraditional and WaveNet model billing
gcloud_cogNeural2, PolyglotCognitive 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-1

Case insensitivity:

Voice IDs are case-insensitive. These are equivalent:

gcloud.en-US-Neural2-A
gcloud.en-us-neural2-a

Note: 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-A

Alternatively, 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.

ModelDescription
inworld-tts-1.5-miniFaster, lower-cost model, suited for high-volume, latency-sensitive applications
inworld-tts-1.5-maxHigher-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:

LanguageCode
Englishen
Arabicar
Chinese (Mandarin)zh
Dutchnl
Frenchfr
Germande
Hebrewhe
Hindihi
Italianit
Japaneseja
Koreanko
Polishpl
Portuguesept
Russianru
Spanishes

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-mini

You 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-mini

Build 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-mini

4

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.

ModelDescription
speech-2.6-turboDefault. Latest turbo model: faster and lower-cost
speech-2.6-hdLatest HD model: higher quality
speech-02-turboPrevious-generation turbo model
speech-02-hdPrevious-generation HD model
speech-01-turboFirst-generation turbo model
speech-01-hdFirst-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 to speech-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-turbo

You 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-turbo

Build 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-turbo

4

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:

ModelDescription
tts-1Default - Standard quality, optimized for speed
tts-1-hdHigh-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:

VoiceDescription
alloyNeutral, balanced voice
echoWarm, expressive voice
fableBritish accent, articulate
onyxDeep, authoritative voice
novaEnergetic, friendly voice
shimmerSoft, 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, shimmer
  • model (optional): tts-1 (default) or tts-1-hd

Examples:

openai.alloy
openai.nova:tts-1-hd
openai.fable:tts-1

Examples

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

Alternatively, 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

ModelDescription
codaRime’s flagship model, with top-rated, ultra-realistic voices
mistv2Default - Updated version of mist
arcanaExpressive model with natural intonation
mist<br>DeprecatedFast, 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: coda

Languages

As of June 18th, 2026, SignalWire supports the following languages with Rime:

LanguageCode
Englisheng
Spanishspa
Frenchfra
Germanger

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:mist

For 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: coda

4

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.

SignalWire Developer Documentation