attach() and guard() calls you use for self-hosting work identically here. Only the sink changes: a remote collector instead of a local SQLite file.
The SFU and SIP layers run from your own CLI either way.
The hosted cloud never receives your call audio or transcripts.
attach() reads per-component metrics events (cost, latency, errors) and pushes only those numeric rows to the collector.1
Sign up and get an ingest key
Open dash.voicegateway.dev and create an account. After signing in, go to Settings > Ingest keys and issue a new key.The key looks like Copy that URL too. You will need both values in the next step.
vk_.... Copy it into your secret store immediately. The dashboard shows the full key only once.The same page shows your personal ingest URL, in the form:2
Set the three environment variables
attach() reads three variables. Set them in your agent’s runtime environment (your shell, Dockerfile, Railway/Fly secret store, or .env file):VOICEGW_COLLECTOR_URL is present, attach() builds a remote sink that batches rows and pushes them to the hosted collector instead of writing to local SQLite. The vk_ key authenticates the request and maps every row to your tenant. VOICEGW_PROJECT tags every captured row so costs appear per-project on the dashboard.3
Add attach() to your agent
Call That is the whole integration. The three env vars point telemetry at the hosted collector and tag every row with your project. Pass
attach() with no project= argument and it picks up VOICEGW_PROJECT automatically. Pass project= explicitly to override the env var for a specific call.- LiveKit
- Pipecat
project= to attach() to override the env var for a specific session.4
Watch costs land on the dashboard
Run a call. Within a few seconds, open dash.voicegateway.dev and navigate to your project. You will see spend, latency, and call counts broken down by STT, LLM, and TTS.
If rows do not appear after the first call, check that all three env vars are exported in the process that runs your agent, then see Troubleshooting.
Pricing
See voicegateway.dev for the full breakdown and current usage-metered details.
Next steps
attach() reference
Full options for the attach call: project, budget, metadata, and flush behaviour.
guard() reference
Add real-time budget enforcement and per-call spend limits on top of attach.
Quickstart
Run the collector locally or on your own infra instead of using hosted cloud.