Reelroom

Documentation

From zero to a playing video in about four minutes, then every knob you might need afterwards.

Quickstart

Create an asset from any URL we can reach. The response is immediate; the webhook tells you when it is playable.

bash
curl -X POST https://api.us-mirror-01.123ok.uk/v1/assets \
  -H "Authorization: Bearer $RR_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"input":"https://you.example/master.mov",
       "playback_policy":"public",
       "captions":["en","de"]}'

Direct uploads

For browser uploads, ask for an upload URL and hand it to the client. The URL is single-use and expires in an hour.

js
const { url, asset_id } = await fetch('/api/upload-url')
  .then(r => r.json());
await fetch(url, { method: 'PUT', body: file });
// listen for the asset.ready webhook

Playback

Every asset has a playback ID. Compose the manifest URL yourself or use the embed.

bash
https://stream.us-mirror-01.123ok.uk/pb_8c31f0a2.m3u8
https://stream.us-mirror-01.123ok.uk/pb_8c31f0a2.mpd
https://image.us-mirror-01.123ok.uk/pb_8c31f0a2/thumb.webp?t=42

Assets

MethodPathPurpose
POST/v1/assetscreate from URL
GET/v1/assets/{id}status, renditions, duration
GET/v1/assetslist, cursor-paginated
POST/v1/assets/{id}/captionsadd or replace a track
DELETE/v1/assets/{id}delete asset and originals

Live streams

Create a stream, get an RTMP or SRT ingest URL and a stream key. Recordings become normal assets when the stream ends.

json
{
  "id": "ls_71c0",
  "ingest": "rtmps://ingest.us-mirror-01.123ok.uk:443/live",
  "stream_key": "sk_live_9c31…",
  "latency": "low",
  "record": true
}

Webhooks

Signed with an HMAC over the raw body. Retried with exponential backoff for 24 hours, and every delivery attempt is visible in the dashboard.

  • asset.created
  • asset.ready
  • asset.errored
  • live.started
  • live.ended
  • upload.completed

Signing playback

Signed policies are JWTs with your key ID in the header. Keep expiry short — the edge caches the decision for the token lifetime, not longer.

Do not sign on the client. A leaked signing key means anyone can mint playback tokens for your whole library.