Skip to main content
The VoiceGateway daemon is a single container that serves:
  • POST /v1/ingest (agents push cost telemetry, Bearer-keyed)
  • The web dashboard
  • The cost and analytics API
Everything runs on port 8080. Your agents push to it; you read costs from the dashboard. Request flow: agent -> POST /v1/ingest (Bearer key) -> daemon -> database -> dashboard.

Prerequisites

  • A server or managed platform with outbound internet access
  • Docker (for VPS) or a platform account (Railway, Fly.io)
  • A Postgres database (or SQLite for single-user local use)
  • A public HTTPS URL so agents can reach /v1/ingest
The ingest key you create must not start with vk_. Generate one with:

Pick a platform

Fly.io

Low ops. Automatic HTTPS. Multi-region placement to sit near your agents.

Railway

Zero ops. One-click Postgres. Automatic HTTPS and public URL.

VPS (systemd)

Cheapest. Full control. Ideal for co-locating with a self-hosted LiveKit server.

Auto-update

Keep your self-hosted daemon on the latest patch release automatically.

Distributed SFU probers

Load-test your LiveKit SFU from multiple regions simultaneously.
For a single-node / SQLite setup (just yourself, no fleet), see Docker deployment instead.

Connect your agent

Point your agents at the daemon’s public HTTPS URL and the ingest key. Explicit form:
Env-var form: set VOICEGW_COLLECTOR_URL and VOICEGW_API_KEY on the agent, then call attach(session) with no extra arguments. Pass a project with attach(session, project="prod").

Verify

Replace <url> and <key> with your daemon’s public URL and ingest key:
Then open the daemon URL in a browser for the dashboard.
Current release: v0.24.0. Pin the image to a specific release or a minor channel (see Auto-update); never track :latest in production. The ingest key must not start with vk_. Only /v1/ingest and /health need to be public; the rest can be firewall-restricted to your internal network.