Skip to content
  • New: co-streaming with stage invites
  • Studio layout: a screen and two cameras in one stream
  • Add or remove RTMP outputs while you are live
  • Billed in shillings, paid with mobile money
  • SDKs for web, React Native, iOS, Android, Flutter, Go and Python

Real-time video for your app priced before launch.

Rooms, roles, recordings, live streams and co-streams on one API, with exactly what every participant spends shown before a single one joins.

Add-on Real-time video layer for your stack

[N.01/07]> Key value

Every participant budgeted.
Every minute priced.

  • // 001

    Rooms and roles

    A role fixes what one person may publish and watch, and it is minted into their token. Nobody spends more than the role you gave them.

  • // 002

    Studio and co-streaming

    Invite a viewer on stage, compose a screen share and two cameras into one picture, and change the layout while you are live.

  • // 003

    Recording and RTMP out

    Record the room, or push it to Twitch, YouTube and Kick at once, and add a destination mid show without dropping the others.

[N.02/07]> Co-streaming

A screen and two cameras.
One stream, every platform.

The host invites a viewer on stage and nothing changes until they accept. A studio broadcast composes the scene you set, follows every change live, and pushes it to as many as eight RTMP destinations at once.

Studio broadcast · layout studio
stage.ts
import { connectToRoom, createStage } from "@usevelo/client"; const room = await connectToRoom({ token, url });const stage = createStage({ room, token, baseUrl: "https://api.usevelo.xyz" }); await stage.invite("viewer-208", { role: "guest" }); stage.onInvite(({ invite }) => stage.accept(invite.id)); await stage.setScene({  layout: "presentation",  slots: [    { identity: "host-1", source: "screen_share" },    { identity: "host-1", source: "camera" },    { identity: "viewer-208", source: "camera" },  ],});

Behaviour under load

Most calls do not fail cleanly.They get worse first.

A weak connection costs a participant resolution before it costs them the room, and Velo reports what that is doing to their data in the units they pay in.

  • connectedreconnectingresumed, same identity

    Reconnects into the same room

    A connection that drops resumes into the room it left. The participant keeps their identity and their published tracks instead of arriving as somebody new.

  • f
    h
    q

    Sheds video before it sheds the call

    Simulcast layers step down as the uplink weakens, so a bad connection costs a participant resolution rather than the room.

  • 12.4 MBabout 1,488 UGX410 kbps down

    Reports what the call is costing

    DataUsageMonitor reads the live transport counters and prices them while the call runs, so you can warn somebody before their bundle goes rather than after.

  • suggestAudioOnly(snapshot)truesetAudioOnly(room, true)

    Drops to audio on your terms

    suggestAudioOnly reads the same snapshot and tells you when video has stopped being worth its bandwidth. Your interface decides what to do about it.

  • VeloPermissionErrorremove_others402 VeloQuotaError

    Errors you can act on

    A plan limit arrives as VeloQuotaError and a refused moderation call names the permission it needed, so a button can disable itself without anyone parsing a message.

[N.03/07]> Use cases

Build the room your product needs,
not the one a meeting app gave you.

Pick a use case in the console and Velo writes the template, the roles and the budgets that go with it. Change any of it afterwards.

  • // 001

    Video calls

    Two people or twenty, camera and mic, with every role decided before anyone joins.

  • // 002

    Virtual classrooms

    One teacher publishing, a room full of learners subscribing, and no learner able to flip that around.

  • // 003

    Telehealth

    A consult that records for the file, with the patient's connection budgeted so they stay on it.

  • // 004

    Live streaming

    Go live from a browser, or push a room out to RTMP without standing up an encoder.

  • // 005

    Co-streaming

    Bring a guest on stage with their consent and stream the pair of you as one composed picture.

  • // 006

    Support desks

    A short call from inside your product, opened with a room code instead of an install.

[N.04/07]> Pricing

See the bill before your users do.
Simple, predictable, in shillings.

An included block of participant minutes every month, a published rate past it, and caps that are enforced rather than suggested.

  • 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

    None

    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

[N.05/07]> Estimate

Calculate your pricing.

Estimate the price for your use case with a detailed breakdown.

Start from a use case

Configure a month

Velo meters one thing: a participant, in a room, for a minute. Everything below feeds that number.

Enforced in the token, not suggested

Counted join to leave, per participant

How many times that room happens

Streaming

Not metered, and not part of Free.

Room and track recording. Not metered, and not part of Free.

Monthly estimate

Participant minutes
24,000

2 in a room, 30 minutes a session, 400 sessions a month

2 × 30 × 400

Starter plan
UGX 150,000

20,000 participant minutes included every month

= 150,000

Minutes past the block
UGX 32,000

4,000 minutes at 8 UGX each

4,000 × 8

Recording
Included

Room and track recording, not metered

= 0

Live streaming
Off

Off for this estimate

= 0

Chat and reactions
Included

On the room's own data channel, in every SDK

= 0

Estimated monthly cost

UGX 182,000

Starter because of recording, 24,000 participant minutes.

The same total at SD or HD. Velo does not price by resolution.

[N.06/07]> Capabilities

Everything a live call needs,
and nothing to bolt on later.

Rooms, roles, recording, streaming in and out, co-streaming and the webhooks that tell your backend what happened. All of it on the same key.

53+Project API endpoints
7Client and server SDKs
8Live RTMP outputs per broadcast
  • Rooms
  • Templates and roles
  • Room codes
  • Token minting
  • Stage invites
  • Studio scenes
  • Recording
  • RTMP out, live outputs
  • RTMP and WHIP ingest
  • Webhooks
  • Session history
  • Usage and billing

Start building real-time video.

Sign in with Google, pick a use case, and the console writes the project, the template and its roles. Free while you are finding out whether it works.
[N.07/07]> Questions

Frequently asked questions.

What is metered, what happens when you run past it, and what your users pay on their side.

Participant minutes. 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. Recording, streaming in and out, templates, roles, webhooks and API keys are not metered, though recording and streaming need Starter or above.