Skip to content

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

    1,000

    Per month

    Rooms at once
    Concurrent open rooms

    2

    People per room
    Enforced in the token

    5

    Each further minute
    Not sold past the block

    Recording
    Room and track recording

    From Starter

    Live streaming
    RTMP out, RTMP and WHIP in

    From Starter

    Webhooks
    Every delivery attempt kept

    Included

  • Starter

    For products with users on them

    UGX 150,000per month

    Included, then metered:

    Participant minutes
    Counted join to leave

    20,000

    Per month

    Rooms at once
    Concurrent open rooms

    20

    People per room
    Enforced in the token

    50

    Each further minute
    After the included block

    UGX 8

    Per participant

    Recording
    Room and track recording

    Included

    Live streaming
    RTMP out, RTMP and WHIP in

    Included

    Webhooks
    Every delivery attempt kept

    Included

  • Pro

    For scale and higher usage

    UGX 1,200,000per month

    Included, then metered:

    Participant minutes
    Counted join to leave

    200,000

    Per month

    Rooms at once
    Concurrent open rooms

    200

    People per room
    Enforced in the token

    200

    Each further minute
    After the included block

    UGX 6

    Per participant

    Recording
    Room and track recording

    Included

    Live streaming
    RTMP out, RTMP and WHIP in

    Included

    Webhooks
    Every delivery attempt kept

    Included

  • Enterprise

    For scale, custom limits and terms

    Custom

    Agreed with you:

    Participant minutes
    Counted join to leave

    As needed

    Per month

    Rooms at once
    Concurrent open rooms

    As needed

    People per room
    Enforced in the token

    As needed

    Price
    Agreed before you sign

    Agreed

    Charged monthly

    Recording
    Room and track recording

    Included

    Live streaming
    RTMP out, RTMP and WHIP in

    Included

    Webhooks
    Every delivery attempt kept

    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.

Velo plans
Per project, per monthFreeStarterPro
Monthly price, UGX0150,0001,200,000
Participant-minutes included1,00020,000200,000
Each further participant-minute, UGX086
Concurrent rooms220200
Participants in one room550200

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.

  1. 00:00

    The included block is reached

    Minutes past this point are rated at the plan's per-minute price.

  2. + up to 60s

    Usage aggregation runs

    Participant-seconds for the day are written down, live calls included.

  3. + up to 60s

    The quota check runs

    Metered minutes are compared against the plan, and the project flips to exceeded.

  4. 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.