Operate
Usage and Billing: Wallet, Rates and Minutes
RTC billing: one prepaid VoltKit Wallet, rates per 1,000 participant-minutes for the media used, free and bought minutes first, the trial and limits.
VoltKit RTC is paid from one prepaid VoltKit Wallet for your whole account. Recharge it in INR (₹1 buys 1 credit), and each participant is billed in credits for the media they actually use, at rates in credits per 1,000 participant-minutes: see Rates.
Your free and previously bought minutes stay on your account and are always used first; your wallet credits are used after them. Recharging never removes them. See Which minutes are used first.
The unit: a participant-minute
One participant connected for one minute = one participant-minute. Ten people in a room for six minutes use 60 participant-minutes. Every rate is in credits per 1,000 participant-minutes: at 99, those 60 participant-minutes cost 60 × 99 / 1,000 = 5.94 credits.
Usage is recorded in seconds and billed per participant-second. A session is not rounded up to the next minute, so a short call costs a short call.
What is billed
| Activity | Billed? |
|---|---|
| Each participant connected to a room, viewers included | Yes |
| A broadcast stream while it is on air | Yes |
| Broadcast playback served directly by the media server | Yes |
| Broadcast playback through a CDN | No |
| Chat messages | No |
| Chat-only connections | No |
| API calls, tokens, webhooks | No |
In-app music (publishMusic) | No: it never changes anyone's rate |
Chat is free. Chat messages and chat-only connections appear in analytics but are never charged.
The VoltKit Wallet
One wallet holds VoltKit Credits for your whole account, and every RTC project pays from it, at the rate of the media each participant actually uses. Recharge it in INR; there are no subscriptions and nothing renews by itself. For now the wallet pays for RTC rooms and broadcasts only: SVGA Maker is free with login and daily and monthly limits, and recording and output add-ons their own balance.
Credits and recharges
- ₹1 buys 1 credit at the default conversion. VoltKit can change the conversion for new recharges only: credits you already hold are never revalued.
- Recharge from Wallet > Recharge: ₹100, ₹250, ₹500, ₹1,000, ₹2,500, ₹5,000 or ₹10,000, or a custom amount (₹100 to ₹1,00,000 by default). Before you pay, the quote shows exactly what you pay and the credits you get, with any offer or coupon bonus, and roughly how many participant-minutes they cover at today's rates. Its terms are frozen for that order.
- Tax: no GST is added to recharges at present: a ₹1,000 recharge costs ₹1,000. If GST applies later, the quote and the receipt show it before you pay, and only recharges made after the change are affected.
- Charges: any service, platform or payment gateway charge is shown on the recharge page, next to the amount, before you pay. A charge buys no credits, and charges marked non-refundable are not refunded.
- Credits arrive once the payment is verified by our server, from Razorpay's confirmation or webhook, never from the browser alone. If you close the checkout too early, the webhook still credits it. Every recharge gets a receipt.
- Offers and coupons add bonus credits, kept apart from the credits you paid for. A bonus may expire after a number of days, which the recharge page shows before you pay. Bonus credits are spent before paid ones.
- Refunds: paid credits you have not used can be refunded within 7 days of the recharge; the bonus that came with that recharge is removed in proportion, and a charge marked non-refundable is kept. See the refund policy.
- Balances show up to four decimals. Behind them every amount is a whole number of credit units (1 credit = 6,000,000 units), so per-second billing never rounds.
A recharge keeps your minutes. Recharging never removes, converts or shortens your free, trial or bought minutes: they stay where they are and are still used first. Your first paid recharge also ends the free testing trial's 25-participant room limit, as buying minutes did; the unused trial minutes stay with the project. Bonus credits alone do not end it.
VoltKit may require a verified account before your first recharge. If yours is not verified yet, the recharge page says so; request verification from your profile.
Rates
Prices are in credits per 1,000 participant-minutes. One participant connected for one minute = one participant-minute. These are the prices in force today; the current ones are always on Wallet > Rates and on the pricing page.
| Media | Credits per 1,000 participant-minutes |
|---|---|
| Standard audio (Opus up to 64 kbps) | 39 |
| HD audio (Opus up to 128 kbps, stereo where supported) | 49 |
| Video up to 1080p at 30 fps, HD audio included | 99 |
| 480p at 60 fps | 109 (99 + 10) |
| 720p at 60 fps | 124 (99 + 25) |
| 1080p at 60 fps | 149 (99 + 50) |
Video includes HD audio: a participant on video costs 99, never 99 + 49. Music is never charged. When VoltKit changes prices, the change applies to sessions that start after it; a session in progress keeps the price list it started with.
At these rates a ₹1,000 recharge (1,000 credits) covers about 10,101 participant-minutes of video, or 25,641 of standard audio, after your free and bought minutes are used.
Billed by the media actually used
Each participant is billed one rate at a time: the highest of what they send and what they receive, recorded every 5 seconds and charged per second. Allowing a mode in your project's settings costs nothing by itself.
- Receiving video is video, even with your own camera off. A screen share is video.
- HD audio is billed only when a microphone asks for it (SDK
audioQuality: 'hd', declared above 64 kbps) or is measured above 72 kbps. A stereo flag alone is not HD, and a project limited to standard audio is never billed HD audio. - Music is HD and free. Broadcast music in HD (128 kbps stereo) during live, host and talk sessions — included free; it never changes your rate. In-app music (
publishMusic) is its own track and is never counted: a participant who plays or hears it is billed as if it were not there, and a project limited to standard audio can still publish it. - 60 fps is billed only while it is delivered: the media server measures the frame rate, and a stream counts as 60 fps after two samples at 50 fps or more (about half a minute) and stops counting as soon as a sample falls below 40. A 60 fps request that the camera or connection cannot deliver is billed as 30 fps. Most phone and laptop cameras give browsers 30 fps, so 60 fps needs a 60 fps camera or source: see 60 fps needs a 60 fps capture source.
- A participant who is connected but sends and receives nothing is billed as standard audio.
- A switch mid-call splits the time: 10 minutes of video then 5 of audio is 10 minutes at the video rate and 5 at the audio rate.
- Rooms and broadcasts are billed the same way. A broadcast's publisher, and each viewer the media server serves directly, are billed as video; viewers through a CDN are not counted.
- Chat, chat-only connections, API calls, tokens and webhooks are free.
Two worked examples, once any free and bought minutes are used:
| Session | Arithmetic | Credits |
|---|---|---|
| A host on camera at 1080p30 for 60 minutes, and two listeners who only receive the host's standard-audio microphone for the same hour | 60 × 99 / 1,000 + 120 × 39 / 1,000 = 5.94 + 4.68 | 10.62 |
| One participant sending 720p at 60 fps for 30 minutes, then 720p at 30 fps for 30 minutes | 30 × 124 / 1,000 + 30 × 99 / 1,000 = 3.72 + 2.97 | 6.69 |
Sharing the wallet between projects
By default the whole wallet serves every project. On Wallet > Allocations you can give a project, or a product, a percentage share. The rest stays Unallocated.
- New credits are shared out by the percentages in force when they arrive. Changing the percentages applies to future credits; Rebalance now shares out what is there now, and you can move credits between shares by hand. Every change is recorded.
- A project spends, in this order: its own share, then the RTC share if you set one, then Unallocated. It never touches another project's share; that is the point of a split.
- When everything a project may use is empty, its calls stop and you are asked to recharge, even if other projects' shares still hold credits.
- Shares for recording, YouTube and SVGA can be set already; they are kept for those products until they pay from the wallet.
Running low and running out
- Low-balance alerts: in the app and by push, and by email if you turn it on, when the wallet falls below a threshold (100 credits unless you change it on Wallet > Alerts), once it has held credits. Each share can have its own alert.
- Your app is warned while what a project may spend covers less than about a minute at the current rate: every room gets
walletLow { remainingSeconds }(andusageLimit, for older apps). A recharge, or credits moved into the project's shares, clears it withwalletLow { remainingSeconds, cleared: true }. - At zero the rooms close with
roomClosedand the reasonquota-exhausted. There is no debt: if the last few seconds cost more than is left, the rest is not charged to you. - Joining needs funds: new rooms, tokens and joins are refused with
402 quota-exhaustedwhen the project cannot pay for a newcomer for that minute. - Free and bought minutes count too. They are spent first, and the warning comes only when the minutes and the credits a project may use together cover less than about a minute. An empty wallet matters only once the minutes are used up; the dashboard says how many are left.
client.on("walletLow", ({ remainingSeconds, cleared }) => {
if (cleared) hideBanner();
else showBanner(`Credits run out in about ${remainingSeconds} s. Recharge to keep the call going.`);
});
Seeing what you spent
- Wallet > Usage: participant-minutes and credits by UTC hour or day, by project and by rate, and each session with the time it spent at each rate. An hour is settled a few minutes after it ends; until then it is shown as pending. Time covered by free or bought minutes costs no credits.
- A project's Live tab: who is connected now and at which rate, with the running estimate next to what has been recorded and settled. The estimate is not a charge; settled amounts are final.
- Wallet > History: every recharge, bonus, usage charge, refund and adjustment.
- From your backend:
GET /v1/billing/balance(the server SDK'sgetBalance()) returns what a project can spend, in the order it spends it, its current burn and how long that lasts. See Node.js server SDK.
Which minutes are used first
Your free and previously bought minutes stay on your account and are always used first; your wallet credits are used after them. When people connect, a project spends in this order:
- Free minutes, if the project has any for today or this month (see Free minutes).
- The project's own minutes, including any free trial minutes on your first project.
- The account balance, if the project uses it.
- Your VoltKit Wallet: the project's share, the RTC share, then Unallocated.
Minutes count one per participant-minute whatever the media, so 1080p at 60 fps with HD audio uses them no faster than audio does. The wallet is charged only for the time those minutes do not cover, and a session moves from minutes to credits without a break. Recharging never removes, converts or shortens your minutes, and they never expire.
Every project uses the account balance unless you switch it off. To keep a project away from it, turn off Use account balance for it on RTC > Billing or on the project's Minutes tab. A project with no minutes of its own that does not use the account balance pays from the wallet straight away. Projects on the unlimited plan never use minutes or credits.
A project runs out only when it has nothing left to use: no free minutes for now, none of its own, nothing from the account balance, and no wallet credits it may spend.
One-time testing trial
2,500 free minutes — every RTC feature at full quality (1080p, 60 fps, HD audio, HD music); up to 25 people per room during the trial.
Each account receives 2,500 participant-minutes once, on its first project. They are that project's own minutes; no other project gets a trial.
VoltKit sets how many minutes the trial gives, and may change it for accounts that create their first project later, for example during a promotion. An account always keeps the trial it received. In your dashboard, RTC > Overview shows which project has the trial and how much of it is left, or, once it has ended, what ended it.
During this free testing trial, a room can contain at most 25 participants across all roles. A reconnect of an existing identity does not consume another place. A new identity joining a full trial room receives participant-quota. All video qualities are included during and after the trial. Trial minutes count one per participant-minute whatever the media.
The trial's 25-participant limit ends the first time you pay: your first paid wallet recharge, or minutes added for the trial project (to the project itself, or to the account balance while the project uses it). A recharge made before your first project exists counts too: that project still gets its trial minutes, but starts without the 25-participant limit. Bonus credits from an offer or coupon alone do not end it. A trial that has ended does not come back.
The trial minutes are not lost when it ends: the unused ones stay with the first project and are still used first, before the account balance and the wallet. Paying does not impose a plan-based participant or viewer cap, and running out later does not restore the testing cap or grant a new trial. Deleting the first project deletes its unused trial minutes, and the trial is not granted again. Separately configured operator limits, daily/monthly usage guards and available infrastructure still apply.
Free minutes
Projects can come with free minutes that renew — a number per day (reset at midnight UTC) and/or a number per month. VoltKit sets these for every project, and can set them differently for yours. Free minutes are always used first, before the project's own minutes, the account balance and the wallet, and you can see what is left on the project's Overview tab.
Daily and monthly limits
A project can also have a limit on how much it uses in a day or a month, free or paid, whatever its balance. When one is reached the project stops until the period renews, exactly as if it had run out.
Minutes bought before the wallet
Minute packages are no longer sold: recharge the wallet instead. Minutes you bought before (and minutes VoltKit adds, for example as a gift, with an audit reason) stay valid, keep their original terms and are used first, as described in Which minutes are used first. Minutes are never converted into credits. A negative account balance stays on that balance; the wallet starts clean and is never charged for it.
Minutes are kept in one of two places:
| Account balance | Project minutes | |
|---|---|---|
| Who can use them | Every project that uses the account balance | That project only |
| Where they came from | Minutes bought for the Account balance | Minutes bought for One project. Your first project also starts with the free trial. |
| When you delete a project | Not affected | Deleted with the project |
Minutes stay where they were added: they cannot be moved between the account balance and a project, or from one project to another. Neither kind expires. RTC > Billing shows your account balance, each project's own minutes and its Use account balance switch, and every purchase on your account.
Old orders keep the price, minutes and bonus confirmed when they were made. Minutes that have been delivered are not refundable on request, whether they went to the account balance or to a project. See the refund policy.
An account that VoltKit keeps on minute billing by agreement sees the minute packages and their prices in its dashboard, under RTC > Buy minutes, instead of the wallet. Its projects stop when their minutes run out: new rooms, tokens and broadcasts are refused with 402 and a code (quota-exhausted, daily-limit-reached or monthly-limit-reached), everything live receives usageLimit and your webhook usage.limit_reached, and after a short grace period (about a minute) live rooms, chat connections and broadcasts end. Minutes added during the grace period keep them going.
Reading your usage
The Overview tab of a project shows its minutes, this month's totals and a daily chart for the last 7, 30 or 90 days. Days are UTC. Wallet > Usage shows what the wallet paid for. The Billing page shows the account balance and each project's own minutes.
The same figures are available from the API:
# Today, this month and lifetime
curl "$VOLTKIT_RTC_URL/v1/usage" -H "X-API-Key: $VOLTKIT_RTC_SECRET"
# One entry per day, oldest first
curl "$VOLTKIT_RTC_URL/v1/usage/series?days=30" -H "X-API-Key: $VOLTKIT_RTC_SECRET"
The reply, abridged:
{
"tenantId": "vk_4f2a9c0d1e3b5a67",
"plan": "metered",
"minutesLimit": 3000,
"usedMinutes": 1260,
"minutesRemaining": 1740,
"today": { "participantSeconds": 5400, "chatMessages": 212, "broadcastSeconds": 0 },
"month": { "participantSeconds": 75600, "chatMessages": 4810, "broadcastSeconds": 3600 }
}
| Field | Meaning |
|---|---|
participantSeconds | Time participants spent connected to rooms |
publisherSeconds | The part of that spent by hosts and co-hosts |
roomSeconds | Time rooms were occupied |
roomsCreated | Rooms created |
peakParticipants | The most participants connected at once |
chatMessages | Chat messages sent |
broadcastSeconds | Time streams were on air |
broadcastViewerSeconds | Playback served directly by the media server |
streamsStarted | Times a stream went on air |
minutesLimit, usedMinutes and minutesRemaining are the project's minutes (free, trial and bought), not the wallet. minutesRemaining is -1 on the unlimited plan. On a metered project that uses the account balance, it includes what the project can still use from the account balance. For the wallet, use GET /v1/billing/balance.
allowance says where the project stands right now: freeRemainingSeconds, paidRemainingSeconds (split into ownRemainingSeconds, the project's own minutes, and sharedRemainingSeconds, what it can use from the account balance), remainingSeconds (what can still be used; -1 means no limit), the daily and monthly limits and what has been used against them, and — when the project cannot be used — blocked with the reason.
If your account is disabled
A payment dispute on a wallet recharge does not, on its own, stop your calls: while it is reviewed, the wallet is on hold (no recharges, transfers or rebalancing; 403 WALLET_FROZEN) and your projects keep spending what they have.
VoltKit support can also disable an account, with a reason, in one of two ways:
- Straight away: every RTC project is suspended. New rooms, tokens and joins are refused, and live rooms are warned and then closed. Recharges, transfers and rebalancing are paused.
- Once the credits are used: your projects keep running on the wallet credits and paid minutes you already have, and recharges are paused. When nothing is left to spend, the projects are suspended.
While it is disabled the dashboard shows Account disabled — contact support, recharges and minute purchases answer 403 ACCOUNT_DISABLED, and new projects cannot be created. Your balance, history and receipts stay readable. When support enables the account again, the projects the disable suspended are restored.
Limits
Each project has a ceiling on concurrent rooms, viewers per room and API calls per minute. They protect every customer from one runaway loop, and are shown on the project's Settings tab. Ask support to raise them.
Last updated . Something unclear or wrong? Tell us.