The control plane for voice, video, messaging, and agents.
SignalWire's platform, Call Fabric, runs 2.7 billion interactions a year on one substrate. Your SIP trunks, WhatsApp templates, conference rooms, and AI agents share one state model, one set of logs, one invoice.
Ten SDK languages. Four interfaces. One platform, built by the FreeSWITCH team.
Five surfaces.
One addressable system.
Carrier-grade voice, messaging at 10DLC scale, WebRTC rooms, AI agents, and the infrastructure underneath all of it. Each capability runs natively in the same substrate and answers to the same control plane.
- SIP TrunkingLicensed carrier, global PSTN origination and termination.
- Call ControlDial, bridge, transfer, hold, park, record, whisper.
- ConferencingModerated, ad-hoc, SIP-to-WebRTC bridges, recording.
- Queues + IVRSkill-based routing, callbacks, native IVRs.
- SMS / MMSTwo-way, long-codes, toll-free, 10DLC registration.
- WhatsApp BusinessTemplated + conversational, shared inbox.
- Unified APIOne send primitive across SMS, MMS, WhatsApp.
- Programmable RoomsWebRTC rooms with server-driven layout and moderation.
- BroadcastLow-latency ingest and replay with recording.
- AI KernelSTT + LLM + TTS or native speech-to-speech, in the media path.
- System-Directed AIStep-based state machines, scoped prompts, scoped tools.
- Tool OrchestrationSWAIG functions; webhook, inline, or RPC back to another call.
- Recording + TranscriptionStereo recording, async and streaming transcription.
- PaymentsPCI-compliant capture inside the call without human exposure.
- FaxT.38 and bypass, all inbound and outbound.
- ObservabilityStructured event streams, per-turn timing, tool-call traces.
Most voice platforms are middleware.
SignalWire owns the substrate.
“Close to the audio” is one leg. Alone, it doesn't hold. The value comes from three things composing: the kernel inside the media path, a control plane that owns state, and a programmable surface that lets developers instruct any of it.
Substrate
Voice, video, AI orchestration, conferencing, recording, queuing, messaging, and fax all run as native capabilities in one real-time substrate, powered by the FreeSWITCH lineage.
- AI kernel embedded in the media path
- Orchestration starts at the audio frame
- STT + LLM + TTS or native speech-to-speech
Control Plane
The platform owns interaction state. Protocol, transfer history, tool-call results, context: it all lives in one place and moves with the call. No middleware reconstructing reality from webhook events.
- PSTN, SIP, WebRTC, WhatsApp normalized
- Addressable resources: numbers, agents, queues, endpoints
- One state model across the call lifecycle
Programmability
Four interfaces, one substrate. Describe the call declaratively, take real-time control, or drive everything from code in ten languages. SDKs produce the call markup. A persistent WebSocket executes live. REST administers.
- Call markup: 50+ declarative methods
- Persistent WebSocket for live control
- SDKs in Python, TypeScript, Go, Ruby, +7
One call.
Four ways to program it.
Declare the flow in a call markup (SWML). Write the agent pattern in a language you like. Take live control over a WebSocket. Administer by UUID over REST. The substrate underneath is the same regardless of which door you walked through.
Resources compose: a number routes to an agent, which transfers to a conference, which bridges to a SIP endpoint: one interaction, one state object, one UUID.
from signalwire_agents import AgentBase
class ReceptionAgent(AgentBase):
def __init__(self):
super().__init__(name="reception", route="/")
self.prompt_add_section(
"Role",
"You answer the phone for Gardener & Sons. "
"Book appointments, transfer urgent calls to dispatch."
)
self.define_tool(
name="book_appointment",
description="Reserve a slot on the schedule.",
parameters={"date": "string", "window": "string"},
handler=self.schedule_booking,
)
def schedule_booking(self, args, raw):
slot = calendar.reserve(args["date"], args["window"])
return self.swml_response({"say": f"Booked for {slot}."})
if __name__ == "__main__":
ReceptionAgent().run()JSON or YAML: describe what should happen. 50+ methods.
Persistent WebSocket. Inject prompts, transfer, bridge, record.
Python, TypeScript, Go, Java, C#, Rust, Ruby, PHP, Perl, C++.
Provisioning, config, and active-call control by UUID.
The model handles language.
Your code handles truth.
SignalWire shipped real-time WebSocket call control in 2018, years before AI voice existed as a category. When AI arrived, the kernel plugged into the same substrate as a native capability. So did the governance.
A step-machine governs what the model can see and call at each turn. It cannot reach a tool outside its current step.
Card numbers, session IDs, and PII live in a structured layer your tool handlers can read. The model cannot see it.
Every tool call the AI emits is validated and executed by your code. The model proposes. The system disposes.
Stereo recordings of the same appointment-booking flow, one turn each. Envelopes and turn boundaries are analyzed from the actual audio via signalwire/latency_checker. Bolt-on stacks capture server-side; SignalWire captures at the telecom stack. The real-world gap is wider than shown.
A steady 1.10s
beats a spiky 1.75s.
The average latency number is the one everyone publishes. The spread is the one you feel. A tight band means the call is predictably responsive. A wide band means a two-second hole every few turns, where the caller gives up.
Measured end-to-end on stereo recordings, not cherry-picked partial metrics.
Open source: signalwire/latency_checker. Same LLM, same TTS, same external APIs. The orchestration layer is the variable.
LiveKit and Vapi capture server-side (optimistic). SignalWire captures at the telecom stack (realistic). The real-world gap is wider than shown.
Start from code,
or bring us your stack.
Sign up, pick a number, point an agent at it. Migrating from Twilio, FreeSWITCH, or legacy CPaaS? Book a technical walkthrough. Both paths land in the same platform.
SIP / PSTN transport billed separately.
Start with a phone number.
Sign up, provision, point an agent at it. No sales call, no quota approval.
Map your stack with an engineer.
Migration from Twilio, FreeSWITCH, or a legacy CPaaS. Compliance, carrier, routing reviewed on one call.