Simple, predictable pricing.
No resolution-based pricing, no per-seat licence and no minimum. An included block of participant minutes every month, a published rate past it, and a stop that refuses new work rather than letting the bill run.
Free
Ship something real before you pay anything
Free
Free every month:
- Participant minutes
- Counted join to leave
- Rooms at once
- Concurrent open rooms
- People per room
- Enforced in the token
- Each further minute
- Not sold past the block
- Recording
- Room and track recording
- Live streaming
- RTMP out, RTMP and WHIP in
- Webhooks
- Every delivery attempt kept
1,000
Per month
2
5
—
From Starter
From Starter
Included
Starter
For products with users on them
UGX 150,000per month
Included, then metered:
- Participant minutes
- Counted join to leave
- Rooms at once
- Concurrent open rooms
- People per room
- Enforced in the token
- Each further minute
- After the included block
- Recording
- Room and track recording
- Live streaming
- RTMP out, RTMP and WHIP in
- Webhooks
- Every delivery attempt kept
20,000
Per month
20
50
UGX 8
Per participant
Included
Included
Included
Pro
For scale and higher usage
UGX 1,200,000per month
Included, then metered:
- Participant minutes
- Counted join to leave
- Rooms at once
- Concurrent open rooms
- People per room
- Enforced in the token
- Each further minute
- After the included block
- Recording
- Room and track recording
- Live streaming
- RTMP out, RTMP and WHIP in
- Webhooks
- Every delivery attempt kept
200,000
Per month
200
200
UGX 6
Per participant
Included
Included
Included
Enterprise
For scale, custom limits and terms
Custom
Agreed with you:
- Participant minutes
- Counted join to leave
- Rooms at once
- Concurrent open rooms
- People per room
- Enforced in the token
- Price
- Agreed before you sign
- Recording
- Room and track recording
- Live streaming
- RTMP out, RTMP and WHIP in
- Webhooks
- Every delivery attempt kept
As needed
Per month
As needed
As needed
Agreed
Charged monthly
Included
Included
Included
Plans
The same five numbers, side by side
Every project starts on Free. Moving between plans does not move your rooms, templates or keys.
| Per project, per month | Free | Starter | Pro |
|---|---|---|---|
| Monthly price, UGX | 0 | 150,000 | 1,200,000 |
| Participant-minutes included | 1,000 | 20,000 | 200,000 |
| Each further participant-minute, UGX | 0 | 8 | 6 |
| Concurrent rooms | 2 | 20 | 200 |
| Participants in one room | 5 | 50 | 200 |
Prices are per project per month, in Ugandan shillings. Templates, roles and API keys are not metered and are not capped by plan. Recording and live streaming are not metered either, but they are not part of Free: starting a recording, a broadcast or an ingress needs Starter or above. Apart from those two, the five figures shown are the only things that differ between plans.
Meter
A participant-minute is one person, in one room, for one minute
Two people on a ten-minute call is twenty participant-minutes. Ten people on the same call is one hundred. What is metered is people multiplied by time, not calls.
- Unit
- participant-second
- Read from each participant session, join to leave
- Open calls
- counted to now
- A session with no leave time meters up to the current run
- Day boundary
- UTC midnight
- A call across midnight is split between the two days
- Aggregation
- every 60s
- Seconds are totalled per project per day
- Invoice rounding
- half up to a minute
- 3m 29s bills as 3 minutes, 3m 30s as 4
A participant who joins at 09:00:00 and drops at 09:03:29 is billed three minutes. One who drops a second later is billed four. Rejoining opens a new session, so somebody who reconnects three times is billed for the three stretches they were actually connected, not for the gaps.
Not this
This is what you pay Velo. It is not what your users pay. Their network operator bills them separately for the megabytes the call moves, and on Ugandan data prices that is usually the number that decides whether people stay in the call. The data cost meter puts a shilling figure on it.
Overage
Past the block you are billed, and then you are stopped
Two separate mechanisms, and it is worth knowing which is which, because between them they decide how large an invoice can get.
The included block is not a wall. When a month’s metered minutes pass it, the difference is rated at your plan’s published per-minute price and added to the base on the same invoice. Starter rates the difference at 8 UGX a minute, Pro at 6, Free at 0. There is nothing else on the invoice: the total is the base plus the overage, both in shillings.
What keeps that from running is the second mechanism. A quota check recomputes every project’s state against the minutes the meter has aggregated, and once those minutes reach the included block the project is marked exceeded and new work is refused. The refusal is not instantaneous, and this is the whole of the gap.
00:00
The included block is reached
Minutes past this point are rated at the plan's per-minute price.
+ up to 60s
Usage aggregation runs
Participant-seconds for the day are written down, live calls included.
+ up to 60s
The quota check runs
Metered minutes are compared against the plan, and the project flips to exceeded.
then
New work returns HTTP 402
Minting a token, creating a room, starting a recording, opening an ingress and starting a broadcast.
What is not stopped
- Connected calls
- keep running
- Nothing in the media path reads the quota state
- Minted tokens
- stay valid
- Until the TTL they were issued with, one hour by default
- Data and recordings
- kept
- Exceeding a quota deletes nothing
So the overage is bounded by whatever was already connected plus roughly two minutes of lag, rather than by somebody remembering to check a dashboard. Raise the plan and the state clears at once. The minutes already metered still rate, against whichever plan the project is on when the invoice is written.
What the refusal looks like
HTTP 402, with the plan, its allowance and the minutes used spelled out in the message, so you can log it and act on it without another API call.
{
"error": {
"code": "quota_exceeded",
"message": "monthly participant-minute quota exhausted; plan starter allows 20000 participant-minutes per month and 20431.00 have been used this period"
}
}Estimate
Put your own numbers in
This multiplies people by minutes by calls, then rates that month against all three plans the way an invoice run would. It is arithmetic, not a quote.
4 participants × 30 minutes × 200 calls = 24,000 participant-minutes
24,000 of 20,000 included on Starter. Over by 4,000. Move to Pro.
Base + overage = invoice
- Free
- 0 base + 23,000 × 0 = 0 UGX
- Starter
- 150,000 base + 4,000 × 8 = 182,000 UGX
- Pro
- 1,200,000 base + 0 over = 1,200,000 UGX
Read the invoice column as what a month of that size rates at if the minutes are actually delivered. In practice the quota check refuses new rooms and tokens once the block is reached, so on a paid plan a large overage means calls that were already in flight, not a month of quiet accrual.
Payment
Paying from Uganda
Invoices are written in Ugandan shillings. Base, overage and total are all UGX, and a draft is kept for the month in progress so you can read it before the month closes.
Collection is the part that is not finished. An MTN MoMo request-to-pay client is implemented, with a reconciler that polls each payment through to succeeded or failed, but it has never been exercised against the real MTN sandbox and it ships switched off: unless mobile money is explicitly enabled, the service loads a provider that refuses every request. Treat mobile money as not yet enabled in production and expect to settle by arrangement until it is. Card payment is not built at all.
Limits
What Velo does not offer
The absences, written down, so you find them here rather than three weeks into a build.
- Card payment
- not built
- Mobile money is the only provider in the codebase. There is no card form anywhere.
- Annual term
- none
- Each plan has one monthly price. No annual price, and no discount for committing to one.
- Custom pricing
- by arrangement
- Enterprise limits and price are agreed with us and charged monthly. There is no self-serve volume rate and no procurement portal.
- A cap you set
- none
- The stop is your plan's included block. You cannot set a shilling ceiling of your own below it.
- Proration
- none
- An invoice rates the whole month against the plan the project is on when it runs.
- Refunds
- by hand
- An invoice can be voided. There is no automated refund and no way to ask for one in the console.
Questions
Questions this model raises
- Does an empty room cost anything?
- No. The meter reads participant sessions, not rooms. A room with nobody in it produces no participant-seconds, so it never reaches an invoice.
- Are minutes counted while the call is still going?
- Yes. A session with no leave time yet is measured from its join time to the moment the aggregator runs, which is every 60 seconds. The meter does not wait for anyone to hang up.
- What happens to a call that is already connected when the quota trips?
- It carries on, and its minutes keep metering. Only new work is refused: tokens, rooms, recordings, ingress and broadcasts.
- Does a project on Free ever get a bill?
- It gets an invoice, and the invoice is zero. Free's monthly price is 0 and its per-minute rate is 0, so minutes past the block rate at nothing.
- Can a project on Free record or stream?
- No. Recording and live streaming start on Starter. On Free, starting a recording, starting a broadcast and creating an ingress are refused with 402 feature_not_in_plan, and the feature is named in the envelope's field. Listing, reading, stopping and deleting what a project already has stay available on every plan, so a project that moves down to Free can still wind work down and read its history.
- What happens if I change plan in the middle of a month?
- The quota state is recomputed against the new plan's block at once, so an exceeded project can mint tokens again immediately. The month is then invoiced against whichever plan the project is on when the invoice run happens.
- How do I see where a project stands right now?
- The plan endpoint returns the plan, the quota state, the minutes used this period and the minutes remaining. The console shows the same figures.
Start on Free. It rates at zero.
1,000 participant-minutes a month, two rooms at once, five people in a room, and a rate of 0 UGX for every minute past the block. There is no card to add, because there is no card form to add it to.