Introducing Cap Infra
From today, anyone can build on the infrastructure that runs Cap. We're calling it Cap Infra.
Every Cap recording is uploaded, encoded on our own GPU farm, transcribed and served from a CDN, usually within seconds of you pressing stop. Cap Infra gives you that same pipeline through an API.
What you get
Upload a video and you get adaptive streaming up to 4K, an MP4, a poster, a hosted player and an embed.

- Adaptive HLS
- Up to five renditions from 360p to 4K, never above the source.
- MP4
- One file for downloads and as a fallback.
- Poster
- A frame from the video to show before playback.
- Hosted player
- A link to a player page, ready when the video is created.
- Iframe embed
- The same player for your own pages.
Your server creates the upload and the browser sends the file straight to storage, so your secret key never leaves your server.
curl -X POST https://cap.so/api/developer/v1/uploads \
-H "Authorization: Bearer csk_your_secret_key_here" \
-H "Content-Type: application/json" \
-d '{"name": "User Recording", "userId": "user_42", "corsOrigin": "https://app.example.com"}'
curl https://cap.so/api/developer/v1/videos/abc123def456/status \
-H "Authorization: Bearer csk_your_secret_key_here"{
"data": {
"id": "abc123def456",
"externalUserId": "user_42",
"duration": 124.5,
"durationSeconds": 124.5,
"width": 1920,
"height": 1080,
"transcriptionStatus": null,
"ready": true,
"status": "ready",
"errorReason": null,
"playbackId": "Zk3vQ9s2Lm8Rt1Xy7Bc4Df6G",
"renditions": [
{ "name": "1080p", "width": 1920, "height": 1080, "bitrate": 3565000, "bytes": 55480000, "codecs": "avc1.640028,mp4a.40.2" },
{ "name": "720p", "width": 1280, "height": 720, "bitrate": 1161000, "bytes": 18070000, "codecs": "avc1.64001f,mp4a.40.2" },
{ "name": "360p", "width": 640, "height": 360, "bitrate": 261000, "bytes": 4060000, "codecs": "avc1.64001e,mp4a.40.2" }
],
"takenDown": false,
"hlsUrl": "https://cap.so/api/developer/playback/Zk3vQ9s2Lm8Rt1Xy7Bc4Df6G/master.m3u8",
"mp4Url": "https://cap.so/api/developer/playback/Zk3vQ9s2Lm8Rt1Xy7Bc4Df6G/video.mp4",
"posterUrl": "https://cap.so/api/developer/playback/Zk3vQ9s2Lm8Rt1Xy7Bc4Df6G/poster.jpg",
"outputs": { "hls": "ready", "mp4": "ready" }
}
}Speech to text works on its own too. Send audio or video and you get back a transcript with word timings.
How it's built
- 01UploadThe file goes from the browser straight to storage in parts, with a token that works for that one video.
- 02EncodeOn our own GPU farm, one process decodes the source once and encodes every rendition at the same time.
- 03ReadyThe video is ready the moment its first output can play. The other follows.
- 04DeliverSegments come from a CDN on signed URLs that stay the same, so repeat views are served from its cache.
- 05PlayA hosted player, an iframe embed, or the HLS and MP4 URLs in your own player.
We operate and maintain our own GPU farm. Each upload is decoded once and every rendition is encoded from it at the same time, so a full ladder costs us very little to make.
A video can be played as soon as its first output is done, and the rest finish in the background.
Transcription runs on the same GPUs with our own speech recognition. In our tests an hour of audio takes under 24 seconds.
Reliable
It's the same system every Cap recording goes through, all day, every day.
- Room for everyone. Each worker limits how many high resolution Cap Infra encodes it runs at once, so one busy app can't slow everyone else down.
- Careful rollouts. New versions go to one worker first, and rolling back takes a restart.
- Health checks and alarms. Unhealthy workers stop getting work, and we get paged when capacity drops.
- Awkward files. Phone videos with variable frame rates and unusual audio formats are handled properly. Anything we can't process safely is refused with a reason.
- Open source. The API, media server and player are all on GitHub.
Safe for health data
We work with a lot of healthcare companies. Cap is proudly HIPAA compliant, as well as SOC 2 Type II and ISO 27001 certified, and Cap Infra runs on the same infrastructure. You can buy a signed BAA straight from your organization settings.
Pricing
You pay for storing video, delivering it and transcribing audio. Uploading, encoding and the player are free.
| Meter | Up to 1080p | 1440p | 4K |
|---|---|---|---|
| Uploading and encoding | at every resolutionFree | ||
| Storageper 1,000 minutes, per month | $0.85 | $1.45 | $2.80 |
| Deliveryper 1,000 delivered minutes | at every resolution$0.95 | ||
| Speech to text | per audio hour$0.10 | ||
| Player | a hosted page and an iframe embedIncluded | ||
Storage is charged per minute of video, and the rate depends on resolution, so a 1080p video costs less to keep than a 4K one. A video pays for its first month once it's ready, then by the day after that.
Delivery is $0.95 per 1,000 delivered minutes, at every resolution, billed from 14 November 2026. A delivered minute is a minute of video your viewers' players download.
You buy prepaid credits for each app, with auto top-up if you want it. Cap Pro includes $5 of credit every month.
How we compare
At list prices, storing video on Cap Infra costs a lot less than on other video APIs, and delivering 4K costs the same as 1080p.
| What | Cap Infra | Mux | Cloudflare Stream |
|---|---|---|---|
| Encoding | Free | Free on basic | Free |
| Storing 1080p10,000 minutes for a month | $8.50 | $30.00 | $50.00 |
| Storing 4K1,000 minutes for a month | $2.80 | $9.60 | $5.00 |
| Delivering 1080p1,000 delivered minutes | $0.95 | $1.00 | $1.00 |
| Delivering 4K1,000 delivered minutes | $0.95 | $3.20 | $1.00 |
Bring your agent
Paste one prompt into Claude Code, Codex or Cursor and it wires up uploads and playback for you. There's an MCP server too, and the docs if you'd rather do it yourself.


