VoltKit RTC
Free account requiredVoice chat rooms and audio rooms SDK: speakers, listeners and a stage
Standard voice from ₹39 (≈ $0.41) per 1,000 participant-minutes; listeners receive audio only.
An audio room is a room where a few people speak and everyone else listens: a voice chat room, a talk, a 9-seater party room, or a radio-style show that some apps call an audio broadcasting room. Speakers publish their microphone; listeners only receive. A listener raises a hand, the host brings them on stage, and they speak.
Every room comes with chat, seats, moderation, speaking indicators and in-app music, behind one API with SDKs for web, mobile and your backend.
Your first project starts with 2,500 free participant-minutes, once per account, at any quality.
- Stage, seats, raise hand
- Chat included
- HD music, included free
- Billed per second
Audio rooms
Speakers on a stage, listeners in the room
Your backend chooses each person's role when it mints their token, and the service enforces it, so a modified app cannot put itself on stage. Roles change during the room without your backend: the host promotes a listener to co-host to bring them on stage, and back to viewer to send them back. Details: group audio rooms.
| Role | On stage (speaks) | Moderates | Typical use |
|---|---|---|---|
| host | Yes | Yes | The room's owner |
| cohost | Yes | No | A speaker on stage |
| moderator | No | Yes | Someone who keeps order |
| viewer | No | No | A listener |
What VoltKit does
- Rooms where speakers publish their microphone and listeners receive audio only
- Roles from your backend's token, enforced by the service
- Raise hand, promote to the stage and send back, with the reconnect handled by the SDK
- Seats: named slots one person holds at a time, kept through a dropped connection
- Forced mute, kick, chat moderation, speaking indicators
- Chat in every room, in-app music and signed webhooks
What your app builds
- The seat layout, and how many seats a room shows
- Room discovery, feeds and profiles
- Coins, gifts, payouts and the gift animations
- Reporting, blocking and review
- Ringing and push notifications for 1:1 calls
5-seater, 9-seater, 12-seater or 20-seater: the seat count is your app's layout. The service sets no limit on how many people publish in a room, so your app decides how many seats it shows.
Code
The stage in Flutter, JavaScript and Kotlin
The same names in every SDK. A listener asks for a seat, the host accepts, and the listener's app publishes its microphone once the new role arrives; your server mints listeners a viewer token.
$ flutter pub add voltkit_rtcawait client.raiseHand(metadata: {'slot': 'seat-3'}); // anyone; metadata says what for
await client.lowerHand(); // withdraw your own
await client.promote('user-42', Role.cohost); // on stage; host only
await client.claim('seat-3'); // slot-taken or slot-blocked if not
client.onClaimChanged.listen((c) => drawSeat(c.key, c.state, c.identity)); // held, away, free, blocked
await client.publish(constraints: {'audio': true, 'video': false}); // microphone only$ npm install @voltkit-rtc/clientawait viewer.raiseHand({ requestRole: "cohost" }); // the viewer asks
await host.promote("user-99", "cohost"); // the host says yes
await host.promote("user-99", "viewer"); // and later, back to the audience
await client.claim("seat-3"); // take it; claim("seat-3", identity) grants it (moderators)
await client.release("seat-3");
await client.blockSlot("seat-9"); // moderators: lock it; refused with slot-occupied while held$ npm install @voltkit-rtc/server// Create the room, or get it back if it already exists.
const room = await rtc.ensureRoom({ roomId: "show-42", hostIdentity: "user-7" });
// -> { roomId, originNode, hostToken, wsUrl, expiresAt, existed, ... }
// Let someone in, with the role YOU decide.
const { token, wsUrl, expiresAt } = await rtc.createToken({ roomId: "show-42", identity: "user-99", role: "viewer" });implementation("in.voltkit:voltkit-rtc:0.9.10")// A listener asks to speak, saying for which seat:
client.raiseHand(mapOf("slot" to "seat-3"))
client.lowerHand() // changed their mind
// The host sees the requests:
scope.launch {
client.onHandRaised.collect { hand ->
if (hand.raised) showRequest(hand.identity, hand.slot) else removeRequest(hand.identity)
}
}
client.promote("user-42", Role.cohost) // accept: on stage
client.lowerHand("user-42") // decline (reason "declined")
client.promote("user-42", Role.viewer) // back to the audienceA promotion arrives as onRoleChanged for the listener's own identity, and publish() is then allowed; the SDK handles any move to the speakers' media server. More in the Android SDK guide, the Flutter SDK guide and the JavaScript SDK guide.
Seats
5-seater, 9-seater, 12-seater or 20-seater rooms
Seats are named slots that one person holds at a time, kept by the server. Claim one, release it, seat someone (moderators), or block an empty seat; every change arrives as an event with the seat's state: held, away, free or blocked.
A holder whose connection drops keeps the seat for a grace window, shown as away. Draw it as taken, greyed, never as free.
Room-wide settings such as a title, the seat layout or a pinned message go in room metadata, kept for everyone who joins later.
A claim is refused with slot-taken while someone holds the seat and slot-blocked while it is locked. One claim per identity: claiming a second seat releases the first.
Moderation
Enforced by the service, not by the app
A modified app cannot unmute itself or ignore a removal. The host manages everyone else in the room; moderators mute and remove listeners, handle raised hands and moderate chat.
forceMute(identity, "audio")Their microphone stops at the server, and they cannot switch it back on themselves.forceMute(identity, "audio", false)Released: they may switch it on again. It stays off until they do, so nobody is put on air without knowing.kick(identity, reason)Removed from the room at once; the room refuses that identity from then on.muteChat(identity)Silenced in the chat only. A mute is held for the channel, so reconnecting does not undo it.deleteMessage(id)Hosts and moderators delete any message; anyone may delete their own.endRoom()The room ends for everyone. Host only.
Every role and call: Rooms.
Included
Chat and music come with every room
Chat
Every room has a chat channel from the moment it exists, on the connection people already hold: messages, direct messages, reactions, typing, history and moderation. People who only read along can open a chat-only connection, which is not metered as a participant. Chat is counted, not charged, within a daily allowance that grows with your live minutes.
Chat docsIn-app music
A host plays a song from inside the app with publishMusic, never through the microphone, so listeners hear it clean and it does not echo. In the browser it is its own 128 kbps stereo track with separate music and microphone switches; the Android SDK mixes it into the microphone before encoding. Music is never billed. Flutter apps receive it on Android and iOS; publishing it there needs a native audio source in your app today.
Pricing
What a voice room costs
Each participant is billed per second at the rate of the media they send or receive. Standard audio is the default and right for voice; HD audio is for music, and is billed only when a microphone asks for it or is measured above 72 kbps.
- Standard VoiceUp to 64 kbps₹39 (≈ $0.41) per 1,000 participant-minutes
- HD VoiceUp to 128 kbps₹49 (≈ $0.52) per 1,000 participant-minutes
10 people × 60 minutes = 600 participant-minutes
600 participant-minutes × 39 ÷ 1,000 = 23.4 credits, ₹23.40 (≈ $0.25) at today's rate
Standard Voice: 39 credits per 1,000 participant-minutes. Billed per second, so a 7½-minute call costs 7½ minutes.
Prices are in Indian rupees; dollar figures are approximate, at ₹95 per US dollar on 24 October 2026, for orientation only. You are billed in rupees.
Group voice calls use the same room: everyone who speaks publishes, at the same rates. A one-to-one call is a room with two people, with ringing through your own push channel and earpiece or speaker routing on Android: one-to-one voice calls. Work out your own sessions with the participant-minute calculator, or see every rate on the pricing page.
Gifts
Gifts in voice rooms, run by your app
Your server checks a gift and debits your own coins, then posts a gift event to the room's chat, and every app plays the artwork. The SDKs have no gift-sending API or gift player; coins and payouts are your app's.
VoltKit's gift store sells gift artwork (SVGA, animated WebP and still images) under a licence for your own app: browse the gifts or read how gifts fit an RTC app.
SDKs
Build it for web, Android, iOS and your backend
Flutter covers Android and iOS apps; the Android SDK is voice first and runs the call audio for you. The native iOS (Swift) SDK is in preview.
JavaScript (browser)
JavaScript SDK guide$ npm install @voltkit-rtc/clientReact (browser)
React SDK guide$ npm install @voltkit-rtc/react @voltkit-rtc/clientNode.js (server)
Node.js SDK guide$ npm install @voltkit-rtc/serverPython (server)
Python SDK guide$ pip install voltkit-rtc-serverGo (server)
Go SDK guide$ go get github.com/voltkit-rtc/voltkit-rtc-server-goPHP (server)
PHP SDK guide$ composer require voltkit/rtc-serverJava (server, Spring Boot)
Java SDK guideimplementation("in.voltkit:voltkit-rtc-server:0.1.0")Flutter (iOS and Android apps)
Flutter SDK guide$ flutter pub add voltkit_rtcAndroid (Kotlin apps)
Android SDK guideimplementation("in.voltkit:voltkit-rtc:0.9.10")Native iOS (Swift)
In preview, not released yet. The Flutter SDK covers iOS apps today; for early access, email contact@voltkit.in.
iOS preview notes
Category
The audio-room shape people already know
In Clubhouse, launched in March 2020, listeners cannot speak until they raise a hand and a moderator invites them to the stage (Wikipedia, read 2026-10-24). The same parts are here for your own app: a viewer role, raise hand, promote and the stage, plus seats for a 9-seater or 12-seater party-room layout.
App names identify a category of app; their trademarks belong to their owners, and VoltKit is not affiliated with them.
More
Related use cases
- PK battles and multi-guest rooms1v1 PK, 1-vs-N PK, 2v2 team PK and family PK are app logic built on rooms, chat and the promote-and-reconnect recipe; VoltKit has no PK module.Read the PK guide
- Dating and friendship appsAudio rooms for discovery, then 1:1 voice calls, with video when both agree.Calls for dating apps
- Live chatWhat the chat in every room does, its daily allowance, and chat-only connections for readers.In-app chat
Voice chat rooms: questions
How much does a voice chat room cost to run?
A host and nine listeners for an hour is 600 participant-minutes. At standard voice that is 23.4 credits, ₹23.40 (≈ $0.25) at today's rate. Billed per second, so a 7½-minute call costs 7½ minutes.
How many listeners can an audio room hold?
Each project has a limit on viewers per room, shown on the project's Settings tab; past it, a new token is refused with viewer-quota, and support can raise the limit. During the testing trial, a room holds up to 25 people across all roles. Listeners receive audio only, which keeps rooms with many listeners light.
How many speakers can be on stage at once?
The service sets no limit on how many people publish in a room: a room with three seats and a room with twenty are the same room to it. Your app decides how many seats it shows and enforces them with roles and seats. Only VoltKit's public demo room is capped, at six people and three co-hosts.
Can the host play music without echo?
Yes. publishMusic takes the music from inside your app, not through the microphone. In the browser it goes out as its own 128 kbps stereo track that each listener can turn down; the Android SDK mixes it into the microphone before encoding, so it never echoes. In-app music is never billed and never changes anyone's rate. A Flutter app receives music on Android and iOS, and publishing it there needs a native audio source in your app today.
Is chat included?
Yes. Every room has a chat channel from the moment it exists, on the connection people already hold. People who only read along can use a chat-only connection, which is not metered as a participant. Chat is counted, not charged, within a daily allowance that grows with your live minutes.
Which SDKs can I use for a voice room?
Client SDKs for the browser, React, Flutter and Android, and server SDKs for Node.js, Python, Go, PHP and Java to create rooms, mint tokens, read usage and verify webhooks. Flutter covers Android and iOS apps.
Is there an iOS SDK?
Flutter apps run on iOS with voltkit_rtc today. The native iOS (Swift) SDK is a preview and not released yet; for early access, email contact@voltkit.in.
Can listeners send gifts?
Yes, as a feature of your app: your server checks the gift and debits your own coins, then posts a gift event in the room's chat, and every app plays the artwork. VoltKit's gift store sells the artwork and the room carries the messages; there is no gift-sending API or gift player in the SDKs, and coins and payouts stay with your app.
Build your voice rooms
Create a free account, make an RTC project, and follow the audio rooms guide to put a host, a speaker and a listener in one room.
Talk to us:contact@voltkit.inWhatsApp