Read the library
Everything in your organization — uploaded videos and live stream recordings alike — with the manifests needed to play them.
List folders and videos
GET
/api/public/v1/assets/Query
| Key | Type | Sample | Description |
|---|---|---|---|
| folderoptional | string | Kd8xQb2rLmT | List inside a folder. Omitted lists the root of the library. |
curl
curl https://api.streamos.in/api/public/v1/assets/ \ -H 'Authorization: Bearer sk_live_…'
Folders and videos come back together, with breadcrumbs for the path you are looking at.
Get one asset
Assets are addressed by the id shown in the library’s ID column — the same value this API returns and accepts. Open a video and it is on its page too, next to the copy button.
Videos brought over from the legacy AppX system show an id like
rec-407145 instead — the id your own records already reference. Use it exactly where you would use a public_id; every endpoint on this page accepts either. Anything uploaded through StreamOS has only the short form.GET
/api/public/v1/assets/{public_id}/curl
curl https://api.streamos.in/api/public/v1/assets/oI1j0SfJK3v/ \ -H 'Authorization: Bearer sk_live_…'
Response — data.asset
| Key | Type | Sample | Description |
|---|---|---|---|
| public_idoptional | string | oI1j0SfJK3v | The id to use everywhere else in this API. |
| statusoptional | string | COMPLETED | QUEUED, TRANSCODING, COMPLETED or ERROR. Poll until it is not TRANSCODING. |
| kindoptional | string | UPLOAD | UPLOAD or LIVESTREAM_RECORDING. |
| duration_secondsoptional | integer | null | 131 | Null until transcoding reports it. |
| size_bytesoptional | string | null | "5913969" | A decimal string, because JSON has no 64-bit integer. |
| video.hls_manifest_urloptional | string | null | https://…/master.m3u8 | The master playlist. Give this to any HLS player. |
| video.drm_content_idoptional | string | null | d675bed3c091 | Present on DRM assets. Identifies the content to us internally — you do not need it for playback; see Playing a video for the actual licence flow. |
| video.download_urloptional | string | null | https://…/raw.mkv | The progressive file, when your organization is configured to produce one. The same URL the VIDEO_TRANSCODING_COMPLETED webhook carries — a download, not a playable stream. |
| video.download_size_bytesoptional | string | null | "734003200" | Size of that file, as a decimal string. Null when no raw output was produced. |
| video.download_qualityoptional | string | null | "720p" | Which rung the download was cut from. |
| renditionsoptional | array | [{ "quality": "P480", … }] | Per-rung playlists, with dash_url set for DRM output. |
| tagsoptional | object | null | {"course": "Physics 101"} | The key/value pairs supplied when the video was registered. Null if none were sent. |
| transcode_joboptional | object | null | { "status": "COMPLETED", … } | The pipeline job, including error_code and error_message when it failed. |
A DRM asset has no
hls_manifest_url — its output is DASH, in renditions[].dash_url. Test playability on renditions, not on the manifest field.