Blog
Comparisons 7 min read

Video hosting API pricing, compared by billing model

Video hosting APIs bill on different axes — per-minute vs per-GB. Compare the models, not the cents, to find the cheaper fit for your catalog.

rehelios

Engineering

Every video hosting API’s pricing page shows you a number. None of those numbers mean the same thing. Cloudflare Stream prices in minutes. Mux prices in minutes too, but splits encoding, storage, and delivery into separate per-minute line items, often at different tiers. Bunny and rehelios price in gigabytes — the same unit S3 and R2 already bill in. Put three of those numbers in a table and you’re not comparing prices. You’re comparing units that don’t convert into each other without knowing your specific content mix.

That’s the gap in most “cheapest video hosting API” roundups: they lift one figure off each vendor’s pricing page and rank them, as if $5 per 1,000 minutes and $0.01 per GB were the same kind of quantity. This post skips the arithmetic that goes stale the moment a vendor changes a rate, and compares the two dominant billing models instead — because the model, not the cents, is what determines which vendor is actually cheaper for your catalog.

Video hosting APIs bill on one of two models: per-minute (Cloudflare Stream, Mux) or per-GB (Bunny, rehelios). Per-minute billing tends to win for short, high-resolution clips that get watched a lot, because the rate is flat regardless of bitrate. Per-GB billing tends to win for large, long-form, or lightly-watched catalogs, and for anything with heavy encoding churn, because it charges for bytes actually stored and moved rather than a flat runtime rate. Figure out which shape your catalog is before you compare a single number across vendors.

Why comparing cents is the wrong first move

Vendor pricing changes. A rate you copy into a spreadsheet today can be off by the time you actually sign up, and every specific figure in this post — including rehelios’s own numbers — should be read as “per public pricing at the time of writing.” That’s not a hedge to avoid commitment; it’s the actual failure mode of most comparison content, which quotes a cents-per-unit number as if it were a fixed fact rather than a snapshot.

The more durable thing to compare is the billing model itself: what unit does the vendor meter, and does that unit track what actually costs them money to serve. That question doesn’t go stale when a vendor adjusts a rate card, and it’s the question that determines whether a given vendor gets cheaper or more expensive as your catalog grows.

The two dominant models

Per-minute: Cloudflare Stream and Mux

Cloudflare Stream bills by the minute of video, not the byte: roughly $5 per 1,000 minutes stored and $1 per 1,000 minutes delivered, per their public pricing at time of writing. There’s no separate encoding charge, but there’s also no per-GB number to check that rate against — a minute of 4K footage and a minute of 480p footage cost the same on your invoice, even though one is many times the file size of the other. We cover the mechanics of that mismatch in Cloudflare Stream doesn’t bill per GB, and the full breakdown lives on the Cloudflare Stream comparison page.

Mux also bills per minute, but splits the meter three ways: a per-minute encoding charge on ingest (around $0.04/min on the baseline tier, per their public pricing at time of writing), plus separate per-minute storage and delivery rates, with a number of features gated behind higher tiers. The encoding charge is the one that catches people off guard — every minute you upload costs you before a single viewer watches it, and it scales with your ingest volume, not your traffic. We go deeper on that specific line item in why Mux charges to encode every minute, and the full comparison is on the Mux comparison page.

Per-GB: Bunny and rehelios

Bunny Stream bills by the gigabyte: storage and delivery both metered in bytes, with encoding included at no separate charge. It’s the same unit S3, R2, and most general-purpose cloud storage already use, which makes it easy to reason about without knowing anything about your content’s runtime. See the Bunny Stream comparison page for the full picture.

rehelios uses the same model: $0.02 per GB-month stored, $0.005 per GB delivered, encoding free, with a $1/month minimum. These are our own numbers, not a snapshot of someone else’s rate card, so we can state them with confidence rather than a hedge. Because encoding costs nothing, a catalog that keeps growing doesn’t add a second line item on top of storage — the meter only moves when you store more bytes or someone streams more bytes. Exact numbers for your own catalog are on the pricing page, and the compare hub has the full vendor-by-vendor breakdown.

Comparison, side by side

ProviderBills byStorageDeliveryEncoding
Cloudflare StreamPer-minute~$5 / 1,000 min stored*~$1 / 1,000 min delivered*Included
MuxPer-minutePer-minute, tiered*Per-minute, tiered*~$0.04/min baseline*
Bunny StreamPer-GBPer-GB storedPer-GB deliveredFree
reheliosPer-GB$0.02/GB-month$0.005/GB deliveredFree

*Per public pricing at time of writing — verify current rates directly with each vendor before budgeting off this table.

The worked mental model

You don’t need a spreadsheet to guess which model favors your catalog — you need one variable: how many bytes does a minute of your content actually contain.

Per-minute billing charges a flat rate regardless of that number. A minute of 4K footage and a minute of heavily compressed 480p footage cost the same to store and the same to deliver. That’s good for you when your content is bitrate-heavy relative to its runtime — high resolution, short clips, or anything watched repeatedly by a large audience — because you’re effectively getting more bytes for the same flat price. It’s bad for you when your content is long relative to its bytes: storage bills accrue by the minute whether the file is large or small, so a long, low-bitrate archive still racks up storage-minutes every month it sits there, watched or not.

Per-GB billing does the opposite: it charges for the bytes that actually move through disk and network, full stop. That favors large, long-form, lightly-watched catalogs — course libraries, archival footage, recorded webinars — because storage cost tracks actual size, not runtime, and a video nobody watches this month costs you for its bytes at rest, not a flat per-minute tax. It also favors any workload with heavy encoding churn: re-encodes, new masters, format experiments. Under a per-minute-to-encode model like Mux’s, every one of those passes is a fresh line item. Under free encoding, it’s not a line item at all.

The billing model tells you who gets cheaper as your catalog grows — the cents-per-unit number only tells you who’s cheaper today.

Neither model is a scam or a bargain in the abstract. They’re bets on different content shapes, and the honest comparison is matching your catalog to the bet, not ranking vendors by a number that only holds for one specific mix of resolution, runtime, and view count.

The axis most comparisons skip: who can actually operate the API

Pricing model aside, there’s a second axis worth weighing if any part of your pipeline is automated rather than human-driven: can an AI agent use this API end to end without a person clicking through a dashboard for each step. Mux ships an official MCP server (mcp.mux.com, and @mux/cli --agent), which puts it ahead of Cloudflare Stream and Bunny on this front — neither has an official MCP integration. But Mux’s own team deliberately human-gates destructive operations in that server, reasoning that agents “reach for footguns.” That’s a defensible design choice, and it means an agent using Mux still needs a human in the loop for certain actions. We cover that tradeoff directly in agent autonomy vs. human-gated video MCP.

rehelios takes the other side of that tradeoff: a CLI (npx @rehelios/cli import <url> --collection col_x --wait) and an MCP server built for full autonomy — an agent can upload, import, and publish video in a single tool call, no human approval gate in between. That’s not a pricing advantage over Bunny, which shares rehelios’s per-GB model; it’s a separate axis entirely, and worth weighing alongside the billing model if any part of your video pipeline is meant to run without a person in the loop. More on the agent-native surface generally at /agents.

Picking a model, not just a vendor

If you’re comparing video hosting APIs right now, skip the exercise of lining up cents-per-GB against cents-per-minute — they’re not the same unit, and no amount of arithmetic makes them comparable without assumptions about your specific bitrate and runtime. Instead, ask what your catalog actually looks like: short and heavily rewatched leans per-minute; large, long-form, or churn-heavy leans per-GB. Then check whether autonomous operation matters to your pipeline, because that’s an independent decision from the billing model entirely. Once you know which model fits, the individual vendor numbers — checked at the time you actually need them — are the easy part.

Put your first video live today

Create an account, upload a file, and have a fast, embeddable video live in minutes. Pay only for what you store and stream.