Control plane
One API surface. Six adapters underneath.
The control plane is the heart of VoxRidge. A single Go service with a single REST API surface, fronting six PBX adapters that translate every operation into the right vendor protocol.
Operations
- Originate, hangup, transfer (blind / attended), park, hold, unhold
- Monitor / whisper / barge with consistent semantics across vendors
- Agent login / logout / pause / unpause across queues
- DTMF send, audio playback, audio capture (for AI assist)
Events
- Normalized event types: call.ringing, call.answered, call.ended, agent.state, queue.metric, recording.started, …
- Subscribe over Server-Sent Events for ephemeral consumers
- Subscribe over NATS JetStream for durable, replayable consumers
- Filter at the server: by PBX, by tenant, by event type
POST /v1/calls
{
"from": "+18005551001",
"to": "+442071234567",
"context": {
"campaign_id": "summer-outbound",
"agent_id": "ext-3107"
}
}
200 OK
{
"id": "call_3kZ91p0e7",
"pbx_id": "asterisk-lon01",
"status": "ringing",
"started_at": "2026-04-30T09:21:14Z"
} The PBXAdapter interface
Implement once. Inherit the rest.
type PBXAdapter interface {
Connect(ctx context.Context, config map[string]string) error
Events(ctx context.Context) (<-chan Event, error)
Originate(ctx context.Context, req OriginateRequest) (*OriginateResult, error)
Hangup(ctx context.Context, callID string) error
Transfer(ctx context.Context, callID, target string) error
Monitor(ctx context.Context, callID string, mode MonitorMode) error
AgentLogin(ctx context.Context, agentID, queue string) error
AgentLogout(ctx context.Context, agentID, queue string) error
DeployIVR(ctx context.Context, name string, dialplan []byte) error
TapAudioStream(ctx context.Context, callID string) (*AudioStream, error)
Close() error
} Implement the interface, register the adapter, and the rest of VoxRidge — events, policy, IVR compile, CDR — picks it up automatically.
Get started
One API for every PBX. Wire it up in an afternoon.
Free under 25 extensions, forever. No credit card. No sales gate. Production use OK.