Docs › Live streaming (Pro and Scale)
Live streaming (Pro and Scale)
Go live from the browser or from OBS, with viewers a few seconds behind, and every recorded stream saved as a normal video you can trim, caption, redact and embed. A live stream is a destination: make one, broadcast to it, share its watch link.
POST /live-streams
{ "title": "Product demo", "record": true, "captions": true, "maxDurationMinutes": 60 }
201 Created
{ "liveStreamId": "5c1e…", "status": "idle", "record": true, "maxDurationMinutes": 60,
"ingest": { "rtmpsUrl": "rtmps://….global-contribute.live-video.net:443/app/", "streamKey": "sk_us-east-1_…" },
"watch": { "url": "https://videopiper.com/embed/live/5c1e…?t=…", "iframe": "<iframe src=…></iframe>" },
"playbackUrl": "https://….playback.live-video.net/api/video/v1/….m3u8?token=…", "playbackExpiresAt": 1790932000 }
- Broadcast with the
ingest: in OBS, Settings → Stream → Custom…, the server and stream key (1280×720 at 30 fps, 2,500–3,500 kbps, keyframes every 2 s). Or go live from the browser: Go live in the app, or<video-piper-recorder live-ingest="RTMPS_URL" stream-key="KEY">on your page (camera, screen, or the screen with the camera in a corner). The stream key lets whoever holds it broadcast to this one stream until it ends: give it only to the person broadcasting.GET /live-streams/{id}/ingestreturns it again while the stream is open. - Watch with
watch.url: a page that plays the stream (starting soon, LIVE with the viewer count, ended), to share or open on a phone;watch.iframeputs it on your site (only your allowed domains can frame it). In your own player,<video-piper live links-url="WATCH_URL/links?t=…">, or playplaybackUrl(low-latency HLS; open it within its two hours) with hls.js or Safari. - Status:
idle(waiting for the broadcast) →live→ended;expiredif it never started within a day,failedif it couldn't be processed.GET /live-streams/{id}addsviewerswhile live,startedAt,endedAt,durationSeconds, the recording'svideoIdonce saved, andusage(broadcastMinutes,viewerHours) about 10 minutes after it ends. - End with
POST /live-streams/{id}/end(or stop broadcasting). A stream stops by itself aftermaxDurationMinutes(default 120, at most 480).DELETE /live-streams/{id}removes it (a saved recording stays).GET /live-streamslists them, newest first. - The recording (
record, default true) becomes a video in your list when the stream ends, at up to 720p, with the stream's title, description, metadata,captionsandautoRedact;video.readyfollows as for any video. - Webhooks:
live.started,live.endedandlive.recording.ready(with the recording'svideoId), once you tick them for your endpoint. - Plans: Pro has 2 streams open at once and 100 viewer-hours a month included; Scale 10 and 400. Beyond that: $0.02 per broadcast minute and $0.09 per viewer-hour. Free and Starter get
403 PLAN_UPGRADE_REQUIRED. A test key makes free test streams of up to 5 minutes.