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 }] }