Audio/video billing
Audio/video calls and standalone RTC channels use the current app's audio/video minutes balance. Plan funds and audio/video minutes are accounted separately and aren't shared between apps. In the tenant console, select the tenant and app at the top, then open "Audio/video billing" under "Plans".
This page covers balances, top-ups, standard minutes and price changes. For plan fees, bills and historical tenant funds, see Plans and bills; confirming payments and setting rates for administrators is covered in the second half of this page.
1. Check the app and account first
| Account | Balance held | Use | Where in the console |
|---|---|---|---|
| App plan account | RMB | Pays the plan fees allocated to the app in bills under the new model | Plans |
| App audio/video account | Standard minutes | Pays the media usage of the app's calls and RTC channels | Audio/video billing |
| Historical tenant account | Existing RMB | Settles historical bills; can be transferred to a specific app once finance explicitly does so | Billing center |
For example, if app A in a tenant has 1000 standard minutes and app B has none, B can't use A's minutes. Topping up the plan account doesn't add audio/video minutes either. Active apps without a wallet record yet show a zero balance.
Values on the page
| Field | What it means |
|---|---|
| Audio/video balance | Standard minutes left; negative means minutes already settled beyond the balance |
| Total topped up | Standard minutes from all audio/video top-ups |
| Total used | Standard minutes settled, including the net effect of later corrections |
| Standard minutes this month | This app's total for the month after applying tier multipliers |
| Minutes charged this month | This month's standard total rounded up to whole minutes, as already charged |
| Current price and multipliers | The config that applies to new top-ups and usage receipts; check the actual page |
The balance equals "total topped up − total used". The page shows minutes with at most two decimal places; that's only display precision, as API balances and transactions store whole milliseconds, so don't work back exact accounts from rounded numbers in a screenshot.
2. Top up: WeChat Pay or bank transfer
- Confirm the current app and account, click "Top up", enter the amount, and check the standard minutes you'll get.
- Choose WeChat Pay or bank transfer. Channels not yet available can't be chosen; contact the platform if none is configured.
- WeChat Pay: after creating the order, scan with WeChat. Once the payment result is verified it's credited automatically, and the page refreshes the status and balance.
- Bank transfer: after creating the order, transfer to the receiving account the exact amount of the order, with the order number in the transfer note. Once finance matches the bank statement and confirms arrival, the app's balance increases.
- Check "Top-up orders" for pending payment, pending arrival, or paid and credited. Creating an order doesn't add to the balance by itself; after a network timeout, check the original order first rather than creating another for the same payment.
Orders lock the price at creation. Later price changes don't affect existing orders; repeated payment notifications aren't credited twice, and the same payment voucher can't top up another app.
developer can read the balance; top-ups, orders and transactions need admin or owner. Historical tenant balance transfers are still directed to a specific app by finance and require identity verification.
3. How money converts to standard minutes
The initial system price is 7 yuan per 1000 standard minutes, adjustable by admins; check the actual page. This default is the ordinary RTC price per standard minute, not a free allowance or a monthly package.
| Top-up | Standard minutes at the default price |
|---|---|
| 7 yuan | 1000 standard minutes |
| 70 yuan | 10000 standard minutes |
| 1 yuan | About 142.857 standard minutes, shown as about 142.86 |
The exact credit is calculated in whole milliseconds:
credit_ms = floor(amount_cents × 60000000 / price_cents_per_1000_minutes)API amounts are in RMB fen, and the price is in "fen per 1000 standard minutes"; only the remainder below the final millisecond is dropped. How ordinary minutes relate to standard minutes depends on the media tiers below.
4. How media time converts
The media servers record what each participant with an established media connection actually receives, putting every second into one tier. With video, the tier comes from adding up the pixels of all the video streams that receiver gets; seconds without received video count as audio. Video a sender publishes but doesn't subscribe to isn't added to their own received pixels.
| Tier | Total video pixels per receiver | Default multiplier | 1 minute online counts as |
|---|---|---|---|
| Audio | No video received | 1 | 1 standard minute |
| HD | More than 0 and ≤ 921600 (720p) | 4 | 4 standard minutes |
| Full HD | > 921600 and ≤ 2073600 (1080p) | 9 | 9 standard minutes |
| 2K | > 2073600 and ≤ 3686400 (1440p) | 16 | 16 standard minutes |
| 2K+ | > 3686400 | 36 | 36 standard minutes |
Each second counts in one tier only, so video time isn't charged an extra copy for audio. The video tier depends on the spatial layers actually forwarded and the streams received, not just the channel's media at creation, and can't be worked out from the camera's nominal resolution. Getting a token, ringing, or a control-plane reservation without an established media connection doesn't produce media time.
Three examples
- Two-person voice for 10 minutes: each side has a media connection for 10 minutes,
2 × 10 × 1 = 20standard minutes in total. - Two-person HD video for 10 minutes: each side receives one 1280 × 720 stream,
2 × 10 × 4 = 80standard minutes in total, with no extra audio minutes. - A listener receiving two 720p streams for 10 minutes: that receiver's pixels total
2 × 1280 × 720 = 1843200, which is Full HD, so that receiver uses10 × 9 = 90standard minutes. Other participants are counted separately by what they receive.
So with the same number of people and the same call length, usage can differ depending on video subscriptions and the resolution actually received.
Rounding across days and months
Usage is precise to the second and converted to standard time by the multipliers. An app's calls and channels for the month are added together and rounded up to standard minutes once, not once per participant or per short call. Each charge is "the new rounded monthly total − minutes already charged", so each report doesn't re-charge the whole month's usage.
For example, two users each have 20 seconds of voice with no other usage this month: 40 standard seconds in total, charged as 1 standard minute. Another 20 standard seconds later makes 60 seconds this month, still 1 minute, so nothing more is charged.
Dates and months follow the deployment's statistics time zone, Asia/Shanghai by default. Time crossing a month boundary goes to each month separately, and two apps are totalled and rounded separately. Repeated reports aren't charged twice; when total usage is corrected downward, the rounding difference is refunded. Late reports and corrections may change recent transactions, so don't treat the last HTTP request as the final account.
5. Price and multiplier changes
| Admin change | Applies to | History kept |
|---|---|---|
| Top-up price | New orders and new direct payments | Existing orders keep their order-time price; existing standard minutes aren't recalculated |
| The five tier multipliers | Usage receipts for new receivers or statistics days | Accepted receipts keep a snapshot of the multipliers, and late reports and corrections use that snapshot |
Rates are set platform-wide, while balances belong to each app. A price change never moves app A's balance to B, or converts historical plan funds into audio/video minutes. Because receipts keep snapshots, a multiplier change doesn't reprice every connection in progress the moment a button is clicked.
6. Insufficient balance and being unable to join
When the audio/video balance is zero or negative, users see "Insufficient audio/video balance, please top up before using" (payment_required), and the feature entry stays visible. Existing calls aren't forcibly hung up on a client countdown, and their later usage is still settled, so the balance can go negative; new top-ups first offset settled negative minutes, and the balance condition is only met again once it's positive.
Audio/video also needs the app's status, the rtc_enabled policy, the global and per-app channel switches, the shared concurrency quota and an available media service. Topping up only solves the balance condition and doesn't turn on any other switch. Once the new billing is enabled, you can't judge whether users can join from the old plan's "audio/video allowed" field alone.
Troubleshoot in this order: confirm the app → check the balance and top-up order status → check app policies and channel switches → check the concurrency quota → contact the platform to check the media service and metering connectivity. For related errors, see Call rules and the channel overview.
7. Admin settings and confirming payments
In the platform admin, open "Billing → Audio/video billing". viewer can view, and finance or super_admin can perform financial operations.
- Configure the price, the five tier multipliers and the reason for the change. A new price affects new orders, and existing orders keep their order-time price.
- Check payment status in "Top-up orders". WeChat orders are credited automatically from verified payment results; for bank transfers, verify the amount actually received, click "Confirm bank transfer arrival", and enter the amount received and the bank transaction number.
- Each bank transaction can only be credited once, and the amount received must match the order. Refresh the app account to check the balance, order status and transactions.
- When recording external payments or transfers directly, don't record an already-paid top-up order as another payment. Historical tenant fund transfers aren't counted as new income and require identity verification.
Price changes and fund credits are written to the operation log. When no payment channel is configured, the page shows "Not available yet"; the platform configures WeChat merchant payments through the IM_WECHAT_PAY_* environment variables, or a bank receiving account. WeChat Pay needs a real public HTTPS callback domain; successful payments are credited automatically from verified, decrypted notifications, and background order queries make up for callbacks that temporarily failed.
8. Comparing old and new data
The billing_from shown on the app account is the billing switch-over date. Before it, the historical plan's call and channel metering rules apply; from it on, the server's standard minute receipts charge the balance, and that usage isn't added again to the plan's usage-based bill.
A call's billable_minutes, daily call minutes, and channel participant milliseconds and daily minutes are still used for stats, troubleshooting and historical checks. Their rounding scope and resolution handling differ from monthly standard minutes, so don't multiply them by the unit price as a breakdown of new balance charges. Issued historical bills and transactions are kept and aren't converted into the app minutes account automatically.
For the platform's self-hosted upgrade, late report catalog, authentication and recovery steps, see Media metering deployment and operations.
