SignalWire is a common choice for teams that want Twilio-compatible call control at lower per-minute rates. Voxa supports it as a bring-your-own-carrier provider: you connect your own space, your calls bill to you at SignalWire's rates, and Voxa adds nothing on top.
SignalWire setup asks for one more value than Twilio or Vonage. This guide explains what that field is, why it exists, and how to find it.
Before you start
You need:
- A SignalWire space. That is the
yourspace.signalwire.comsubdomain you sign in to. - A voice-capable phone number on that space.
- An admin role in Voxa. Connecting a provider needs the
org.settings.managepermission, which the Admin role has by default.
Why SignalWire needs an extra field
SignalWire has two separate products that both matter here:
- The Compatibility API, also called LaML. This is SignalWire's documented drop-in for Twilio's REST layer: the same resource shapes, the same API Keys and Applications, LaML instead of TwiML on the wire. It handles the server side of a call and the webhooks.
- Call Fabric. This is SignalWire's browser calling product. It has its own SDK and its own auth model. It is genuinely a different system, not a compatibility layer.
Voxa uses the Compatibility API for the server leg and Call Fabric for the in-browser leg. Nothing on the LaML side creates a Call Fabric resource, so you supply that resource's ID yourself. On Twilio and Vonage, one set of credentials covers both halves and no extra field is needed.
Step 1: collect five values from your SignalWire space
| Value | Where it is |
|---|---|
| Space URL | The subdomain you sign in to, like yourspace.signalwire.com |
| Project ID | API section of your space, under API credentials |
| API Token | Same section. Create one if you have none; the token is shown once |
| Phone number | Phone Numbers section, in E.164 format like +15551234567 |
| Call Fabric Resource ID | The Call Fabric section of your space, under Resources |
Enter the Space URL as the bare host, without https://. The phone number must be in E.164 with the leading +, and it must be a number on this space.
Step 2: connect it in Voxa
- Open Settings, Telephony (
/settings/telephony). - Pick SignalWire from the provider tabs.
- Fill in the Space URL, Project ID, API Token, phone number and Call Fabric Resource ID.
- Click Connect SignalWire.
Voxa authenticates against your space and checks the number before it saves anything. On success the page shows a Connected badge with the provider and the number, and agents can call from the browser.
Step 3: what Voxa creates in your SignalWire space
Using the Project ID and API Token you entered, Voxa provisions the server side for you:
| What | Why it exists |
|---|---|
| An API Key named after your organization | Used to issue credentials for browser clients, so your API Token never reaches the browser |
| A LaML Application named after your organization | Holds the Voice URL and status callback URL pointing back at Voxa, so your space knows where to send call control and call status |
You do not paste any webhook URLs into SignalWire by hand. Both objects appear in your space under your organization's name after connecting.
Webhook signatures are verified using your space's own API Token. Every organization on Voxa carries independent carrier credentials, so no shared platform secret is involved anywhere in the path.
Step 4: place a test call
- Open any lead and click Call, or start a dialer session.
- Allow microphone access when the browser asks.
- The call places through your space and connects in the browser.
If calls place but the browser side never connects, the Call Fabric Resource ID is the first thing to check. The LaML half can be configured correctly while the Fabric half is missing or wrong, and those are independent failures.
The errors you might see
"Could not authenticate with SignalWire using this Project ID and API Token."
Voxa could not fetch the project. Usual causes: the Space URL points at a different space than the Project ID belongs to, the token was revoked or rotated, a trailing space crept into a pasted value, or https:// was included in the Space URL field.
"This phone number was not found on the provided SignalWire space."
The credentials worked but the number did not match. Usual causes: the number is formatted without the +, or it sits on a different space than the one you connected.
Script audio goes into the call
When an agent plays an AI voice line or a quick response, the clip has to reach the customer. On SignalWire, Voxa mixes the clip into the outbound stream through the SDK's WebRTC API provider option, so what the customer hears is a live mix of the agent's mic and the clip bus.
In Recorded mode the agent's mic is muted while a clip plays. In Live mode nothing plays and the script is an on-screen guide only. Take over switches the current call to Live with one click, and the next call starts back in the agent's usual mode.
Switching or disconnecting later
Disconnect deletes the LaML Application and the API Key from your space, then clears every stored SignalWire value on Voxa's side, including the Fabric Resource ID. Agents fall back to manual call logging. Your phone number stays yours.
Switching providers to Twilio or Vonage disconnects SignalWire first. One organization runs one live calling provider at a time.
What you pay
SignalWire bills you directly for numbers and minutes. Voxa takes no per-minute markup and no cut of your carrier spend, the same as with every other integration: Google Places searches bill to your own Google Cloud project, and AI features run on your own Anthropic or OpenAI key.
Compliance checks do not change
Whichever carrier you connect, Voxa checks the number against your do-not-call list and blacklist before the call rings, blocks calls outside 8am to 9pm in the lead's own time zone by default, holds back leads with no known time zone, and requires a manager-approved override with a reason on record for exceptions.
Voxa enforces your own internal lists, not the National Do Not Call Registry, so keep scrubbing against the registry through a registry service if you call consumers. Background reading: internal do-not-call lists and AI voice disclosure on calls.
Prefer a different carrier?
The same bring-your-own-account setup works with Twilio and Vonage.