Self-host vs hosted: running the Tuvoz bridge yourself
The Tuvoz voice bridge is MIT-licensed. Run it on your own Twilio and Gemini accounts for about $0.05 to $0.06 a minute, or use hosted Tuvoz for sign-in, number checks and billing.

Self-host the open-source bridge if you want to call a short list of numbers you control, using your own Twilio and Gemini accounts. Use hosted Tuvoz if you want to call businesses from any of your agents, with sign-in, number checks, billing and the phone fallback run for you.
Both run the same call code. The bridge is MIT-licensed, and the skill and CLI work against either one.
What the bridge is
tuvoz_bridge is the part of Tuvoz that talks on the phone: it connects a Twilio call to a Gemini Live voice session, runs the opener and the consent question, asks your agent mid-call, and calls you when your agent can’t answer. tuvoz-bridge serve runs it as a single-user server with the same call API as hosted Tuvoz, so you point the CLI at it by setting two environment variables:
export TUVOZ_API_URL=https://calls.example.com
export TUVOZ_API_KEY=<your BRIDGE_TOKEN>
What stays the same
- The opener. “Hi! I’m Jane Doe’s AI assistant, calling through {your operator name} about a dinner reservation.” The operator name is required and can’t contain “Tuvoz”.
- Consent first. By default the self-hosted bridge asks “Just so you know, {operator} records this call. Is that okay with you?” A no ends the call and the bridge keeps nothing the person said. The Gemini API, which voices the call, processes their words live and Google may keep them for a limited time for abuse monitoring.
- Honesty rules. No setting makes the voice agent claim to be human or you; the monitor ends the call if it does.
- Safety blocks. Emergency, N11, crisis and premium numbers are blocked, the calling window is 9 am to 8 pm local time (calls to your own phone aren’t limited to it), and the state table applies.
- Opt-outs. “Don’t call again” and keypad 9 work the same, stored in your own database.
- The backchannel. Questions to your agent, and calls to your phone if you set
PRINCIPAL_PHONE.
What’s different
| Self-hosted bridge | Hosted Tuvoz | |
|---|---|---|
| Who it can call | Only numbers in your ALLOWLIST, plus your own phone |
US listed businesses, your own phone, and people you confirm agreed to AI calls |
| Number checks | None beyond the blocks above; you vet each number you allowlist | Line-type and business-listing lookups before the first call to a number |
| Caller ID | Your Twilio number, your reputation | Tuvoz’s number, registered and monitored by Tuvoz |
| Users | One person, one static token | Google sign-in, any number of agents, keys you can revoke |
| Consent wording | Recording only, unless you set CONSENT_MODE=record_and_train |
Recording and training on every call |
| Dashboard | None; the call API and a SQLite file | Call history, transcripts, approvals, billing |
| Opt-outs | Your database only | Shared across every Tuvoz user |
| Cost | Your Twilio and Gemini bills (about $0.05 to $0.06 a minute) | $0.12 a minute, billed per second, with a 30-second minimum per answered call leg, including calls to your own phone |
| Who’s responsible | You are the operator placing the calls | You agree to Tuvoz’s terms; Tuvoz runs the checks above on every call |
What self-hosting costs
Twilio’s US list prices: outbound calls to local numbers $0.0140 a minute, Media Streams $0.0044 a minute, answering-machine detection $0.0075 a call, and a local number $1.15 a month. Twilio bills each started minute (Twilio).
Gemini’s paid tier for native-audio Live models lists $3.00 per million audio input tokens and $12.00 per million audio output tokens (Gemini pricing). Tuvoz’s own estimate for a typical call is $0.03 to $0.04 a minute in model costs, more on long, talkative calls.
So a 5-minute self-hosted call costs roughly 5 × $0.0184 for Twilio, plus $0.15 to $0.20 for Gemini: about $0.25 to $0.30, against $0.60 hosted.
Use a billed Gemini project. Google says content on its unpaid tier “is used to improve our products”, while paid-tier content is “not used to improve our products” (Gemini pricing). On a phone call, that content includes the other person’s voice.
What you take on when you self-host
- Setup. A Twilio account and number, a Gemini API key, a public HTTPS URL for Twilio’s webhooks, and the
.envvalues (TWILIO_ACCOUNT_SID,TWILIO_AUTH_TOKEN,TWILIO_FROM_NUMBER,CALLBACK_NUMBER,GEMINI_API_KEY,OPERATOR_NAME,PRINCIPAL_NAME,PUBLIC_BASE_URL,BRIDGE_TOKEN,ALLOWLIST).CALLBACK_NUMBERis a second Twilio number that every call states when it ends, as federal rules require. The server refuses to start if a required value is missing. - The rules. You’re the one placing the calls, so the consent and calling laws apply to you. Read is it legal for an AI to call a business?
- Upkeep. Updates, uptime, your caller ID’s reputation with carriers, and your keys.
Which should you pick?
Self-host if you’re a developer, you mostly call your own phone or a few numbers you know, and you want the lowest cost per minute and your data in your own accounts.
Use hosted Tuvoz if you want your agent to call businesses you haven’t vetted by hand, use more than one agent, or not run a server. Hosted Tuvoz starts with 15 free minutes. Free plan includes training on your calls.
More on the open-source side: tuvoz.io/open-source. Ready to try hosted? Set up Tuvoz.