LiveStreamReadResult live.stream-read-result@1
Generated at from
openvibe-contracts v0.53.0 and
openvibe-sdk v0.11.0.
- Version
- 1.0.0
- Owner
- live
- Visibility
- first-party
- Status
- active
- Compatibility
- backward
- Schema
https://openvibe.network/contracts/live/stream-read-result.v1.json
live.stream-read-result@1: answers of live.stream.read on OpenVibe.Live (public, parameters in the path and query). GET /api/streams → { streams } (live now, with each slot's external viewers and total_viewer_count); GET /api/streams/recent?limit= → { streams } (recently ended, with their public VOD from OpenVibe.Media); GET /api/streams/:id → { stream } (plus endpoint while live, cameras, controls, pip_overlay, follower_count, isFollowing for a signed-in viewer); GET /api/streams/channel/:username/resolve/:ref → { managed_stream, live_stream_id, is_live }; GET /api/live-events is a Server-Sent Events feed whose stream-live messages carry { repeat, username, display_name, avatar_url, title, stream_id, slug, managed_id, at }. Ingest keys are never included.
Fields
This schema has no named fields.
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: live-now
{
"streams": [
{
"id": 812,
"user_id": 5,
"channel_id": 5,
"managed_stream_id": 3,
"title": "Late night IRL",
"category": "irl",
"protocol": "rtmp",
"is_live": 1,
"is_nsfw": 0,
"viewer_count": 41,
"peak_viewers": 60,
"thumbnail_url": "/thumbnails/812.jpg",
"started_at": "2026-09-25 21:00:01",
"ended_at": null,
"channel": {
"username": "alice",
"display_name": "Alice"
},
"external_viewer_count": 12,
"total_viewer_count": 53
}
]
}Valid: resolve
{
"managed_stream": {
"id": 3,
"slug": "main",
"title": "Main cam",
"protocol": "rtmp"
},
"live_stream_id": 812,
"is_live": true
}Valid: sse-stream-live
{
"repeat": false,
"username": "alice",
"display_name": "Alice",
"avatar_url": null,
"title": "Late night IRL",
"stream_id": 812,
"slug": "main",
"managed_id": 3,
"at": 1790370001000
}Rejected: stream-without-id
{
"streams": [
{
"title": "no id"
}
]
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('live.stream-read-result@1', value); // { valid, errors: [{ path, message }] }