Introducing Cap Infra

The infrastructure we built to run Cap is now open to everyone. Upload a video and get adaptive streaming up to 4K and a player, or send audio and get a transcript. Uploading and encoding are free.
Richie McIlroy
Nov 13, 2026 · 3 min read

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.

0:00 / 0:00
This film is hosted on Cap Infra and plays in the same player you get with every video.

What you get

Upload a video and you get adaptive streaming up to 4K, an MP4, a poster, a hosted player and an embed.

An upload is encoded to renditions from 4K, 1440p, 1080p, 720p, 360p, never above the source resolution.
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.
One upload. Every rendition is encoded at the same time, and none is ever bigger than the source.

Your server creates the upload and the browser sends the file straight to storage, so your secret key never leaves your server.

Create an upload and check its status
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"
When it's ready
{
  "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" }
  }
}
Create an upload, send the file in parts with the upload token, then check the status until it's 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

  1. 01Upload
    The file goes from the browser straight to storage in parts, with a token that works for that one video.
  2. 02Encode
    On our own GPU farm, one process decodes the source once and encodes every rendition at the same time.
  3. 03Ready
    The video is ready the moment its first output can play. The other follows.
  4. 04Deliver
    Segments come from a CDN on signed URLs that stay the same, so repeat views are served from its cache.
  5. 05Play
    A hosted player, an iframe embed, or the HLS and MP4 URLs in your own player.
Speech to textRuns on the same GPU farm, from an upload or a public URL. The video doesn't have to be hosted on Cap.
The same path every Cap recording takes.

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.

From upload finished
under5seconds
for 1 hour of 4K to be playable
about2minutes
for 1 hour of 4K to be fully processed
Playback starts while the rest of the ladder encodes. Every rendition up to 4K follows in about 2 minutes.

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.

Cap Infra prices by resolution
Meter1080p1440p4K
Uploading and encodingat every resolutionFree
Storageper 1,000 minutes, per month$0.85$1.45$2.80
Deliveryper 1,000 delivered minutesat every resolution$0.95
Speech to textper audio hour$0.10
Playera hosted page and an iframe embedIncluded
Videos are encoded up to 1080p by default. 1440p and 4K are set per upload.

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.

Cap Infra prices compared with other video APIs
WhatCap InfraMuxCloudflare Stream
EncodingFreeFree on basicFree
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
List prices from each provider's pricing page on 13 November 2026, before volume discounts and free allowances.

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.

Cheap, fast & reliable video infrastructure.

SOC 2 Type II, ISO 27001 and HIPAA compliant. BAA available. Open source.