Skip to main content
VOXRIDGE
Menu

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.