VoxBridge is the control plane of the Vox platform. It owns durable business state, exposes the admin/CRM APIs, builds runtime bot config for VoxCore, receives post-call results, and coordinates outbound call routing. The simplest boundary is:
SystemResponsibility
VoxBridgeAuth, bots, campaigns, calls, CRM integrations, settings, recordings, API keys, fleet routing
VoxCoreLive media execution: STT, LLM, TTS, tools, transfer, recordings, post-call packaging
VoxUIAdmin and operator interface on top of VoxBridge APIs
VoxDiallerCampaign pacing, SIP dial attempts, AMD screening, and attach orchestration

Runtime Role

VoxBridge does not run the live audio pipeline. It prepares the information needed for the call and stores the result after VoxCore finishes.

What It Owns

AreaWhat VoxBridge owns
Auth and usersJWT login, roles, admin users, agent/supervisor access boundaries
Bot configBot CRUD, prompts, policy config, provider config, tools, transfer settings, RAG attachment
Runtime config/api/v1/config/{bot_id} response consumed by VoxCore at call start
CallsCall records, transcripts, events, analysis, QC, stable recording access URLs
CampaignsCampaign CRUD, CSV ingestion, number pools, retry settings, attempt reports
Fleet routingHealth-checks VoxCore fleet servers and picks available capacity for direct dialout
Carriers and SIPLiveKit trunk mapping, DID lookup, outbound trunk selection
CRM integrationsAPI-key dialout, CRM pre-fetch, post-call push, variable mapping
Knowledge baseDocument upload, chunking, embeddings, Qdrant search, bot attachment
Agent DeskQueue state, timeout policy, handoff records, agent/supervisor APIs

Important Modules

FileWhy it matters
src/voxbridge/app.pyFastAPI app, startup checks, Mongo/Redis startup, route registration, trunk health loop
src/voxbridge/settings.pyEnvironment settings for MongoDB, Redis, JWT, VoxCore, LiveKit, storage, Agent Desk
src/voxbridge/routes/config.pyRuntime config endpoint called by VoxCore
src/voxbridge/services/config_service.pyBuilds the call-time config contract from stored bot/settings data
src/voxbridge/routes/results.pyReceives final call results from VoxCore
src/voxbridge/services/call_service.pyStores call results and sends CRM post-call payloads
src/voxbridge/routes/sip.pyCRM/admin dialout endpoint and SIP lookup helpers
src/voxbridge/services/fleet_service.pyFleet health checks and best-server selection
src/voxbridge/routes/campaigns.pyCampaign creation, lifecycle actions, upload, reporting
src/voxbridge/services/knowledge_*Knowledge-base ingestion, embedding, Qdrant search
src/voxbridge/routes/api_keys.pyCRM API key management
src/voxbridge/routes/agent_desk.pyAgent Desk queue and handoff APIs

API Boundaries

VoxBridge exposes three broad kinds of API:
API typeUsed byPurpose
Admin APIsVoxUIBots, calls, campaigns, settings, users, carriers, knowledge bases
Internal APIsVoxCore / VoxDiallerRuntime config, SIP lookup, call result delivery, fleet checks
External APIsCRMsAPI-key dialout and post-call webhooks
The internal VoxCore boundary is protected by X-VoxCore-Secret. CRM-triggered dialout uses X-API-Key so external systems do not need admin JWTs.

Data Stores

StoreUse
MongoDBDurable source of truth for users, bots, calls, campaigns, settings, API keys, KB metadata
RedisRuntime cache and Agent Desk state/listener support
QdrantKnowledge-base vector search
S3 / MinIO / SpacesCall recordings and uploaded assets, depending on deployment

Operational Checks

When debugging VoxBridge, start with the surface that owns the failing state:
SymptomFirst place to check
VoxCore cannot fetch configBot status, active hours, routes/config.py, services/config_service.py
Direct dialout picks the wrong workervoxcore_fleet settings and services/fleet_service.py
Campaign rows do not progressCampaign status, dialler health, campaign_calls indexes, VoxDialler logs
Call result missingVoxCore result outbox, routes/results.py, call storage logs
CRM did not receive resultIntegration config, services/call_service.py, post-call push logs
Recording does not playrecording_key, recording access token, storage settings, fleet recording backend
RAG answer is wrongKB attachment, document status, Qdrant collection, trigger instructions

Engineering Rules

  • Keep live media logic out of VoxBridge. That belongs in VoxCore.
  • Keep durable business state out of VoxCore. That belongs in VoxBridge and MongoDB.
  • Do not expose raw recording URLs to CRMs when stable VoxBridge recording links are available.
  • Do not hard-code client-specific behavior in shared API code; use bot config, system settings, brand config, or integration config.
  • Protect production startup with real JWT_SECRET and VOXCORE_SECRET values.

Architecture

How the four repos fit together.

Call lifecycle

How a call moves through VoxCore and VoxBridge.

Repos and boundaries

Ownership rules and key files for each repo.

CRM dialout API

How external systems trigger calls through VoxBridge.