Programmable voice and video

Add calls with
zero dependencies.

Secure voice and video calling, managed TURN, call lifecycle APIs, telemetry and usage billing — over plain HTTPS and the WebRTC already in your app. No SDK to install, no Firebase, no vendor account, and your App Secret never leaves your server.

Read the Docs

₹100 free credit to start · then ₹0.10/min audio, ₹0.40/min video · billing details

// No SDK, no Firebase. Just fetch + WebRTC.
const {sessionToken} = await post(
  '/v1/session/exchange',
  {appId, accessToken},
);

// One long poll delivers every inbound event.
const {events} = await get(
  '/v1/events?cursor=0&wait=25',
);

// Place a call.
await post('/v1/calls', {
  toUserId: 'user_42',
  callType: 'video', offer,
});
Trusted by modern calling platforms
WebRTC
Flutter
Node.js
React
Swift
Kotlin
📊

Real-time Call Inspector

Monitor connection rates, call durations, and setup times instantly across all your apps. Spot ICE failures and connection drops before your users report them.

  • ✓ Sub-second latency metrics
  • ✓ Multi-app aggregation
  • ✓ Exportable call logs
🌐

Intelligent Routing Insights

Understand exactly how your network traffic flows. VACT breaks down WebRTC connections by direct P2P (host), Server Reflexive (STUN), or Relay (TURN).

Optimize your TURN server placements and significantly reduce bandwidth costs by analyzing regional fallback rates.

P2P Connections
68% of total traffic
Relay (TURN)
32% of total traffic

Frequently asked questions

Adding voice & video calling to your app, answered.

What is VACT?

VACT is a programmable voice and video calling API and SDK for adding one-to-one WebRTC audio and video calls to web, Flutter, React, React Native, Node, Python and PHP apps. Signalling and TURN relays are fully managed, so you don't run a signalling server, and billing is usage-based per minute.

How do I add video calling to a Flutter or React app?

Install the SDK (vact_sdk on pub.dev for Flutter, @firstlogicmetalab/client on npm for web/React, @firstlogicmetalab/react-native for React Native), mint a one-time access token on your backend with your App Secret, call connect, then call or accept. No Firebase and no signalling server are required.

Do I need Firebase or my own signalling server?

No. VACT manages WebRTC signalling and TURN for you. Your app speaks plain HTTPS plus the WebRTC already in the runtime, and your backend only mints short-lived access tokens. Nothing else to host.

What is a good alternative for adding WebRTC calling to an app?

VACT is a lightweight, developer-first option for one-to-one voice and video: zero client dependencies, managed TURN, a plain REST API with an OpenAPI spec, SDKs for Flutter, React, React Native, Node, Python and PHP, transparent per-minute pricing, and a free tier to start.

Which platforms and languages does VACT support?

Client SDKs for web (any framework), React, React Native and Flutter; server SDKs for Node, Python and PHP; and a plain REST API for everything else. The whole client protocol is documented, with runnable examples for Node and Firebase backends.

How much does VACT cost?

It's free to start with ₹100 of calling credit and no card required. After that it's usage-based: audio and video calls are billed per minute at rates you can see per app. You only pay for what you use.

© 2026 VACT. All rights reserved.
Privacy & retention Product scope
VACT

Call Telemetry

not connected — sign in to load data
Docs

Advanced dashboard connection

The deployed dashboard discovers its public Firebase web configuration at runtime. For local development only, you may paste a Firebase web config here. Sign in with Google—admins see all apps; client users see only apps assigned to their email.

Setup: enable Google sign-in + authorized domains in Firebase Console. "All apps" uses a collection-group query on call_logs — enable the collection-group index for createdAt if Firestore asks (the error message includes a one-click link). Inside the Claude preview the sandbox may block Firebase — deploy the file for live use; demo mode works everywhere.

Advanced: project connection & demo data
Total calls
Connect rate
reached media
Avg duration
Avg setup
dial → connected
Relay share
via TURN
Failure rate
ice_failed + drops

Connection routes

TURN egress est: –
host (direct P2P) srflx (STUN P2P) relay (TURN)

Call volume · P2P vs relay

End reasons

Setup time distribution (ms)

Failure rate by network

Recent calls

StartedAppCaller → CalleeTypeSetupDurationRouteNetworkEnd reason
Loading…

Docs live at apps/{appId}/call_logs/{callId} · usage aggregates at apps/{appId}/usage/{all|YYYY-MM} · money at apps/{appId}/{wallet,bills,transactions} — all written only by Cloud Functions. Admins record offline payments through the manual-credit API, never by writing documents.