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

KeyTypeSampleDescription
folderoptionalstringKd8xQb2rLmTList 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

KeyTypeSampleDescription
public_idoptionalstringoI1j0SfJK3vThe id to use everywhere else in this API.
statusoptionalstringCOMPLETEDQUEUED, TRANSCODING, COMPLETED or ERROR. Poll until it is not TRANSCODING.
kindoptionalstringUPLOADUPLOAD or LIVESTREAM_RECORDING.
duration_secondsoptionalinteger | null131Null until transcoding reports it.
size_bytesoptionalstring | null"5913969"A decimal string, because JSON has no 64-bit integer.
video.hls_manifest_urloptionalstring | nullhttps://…/master.m3u8The master playlist. Give this to any HLS player.
video.drm_content_idoptionalstring | nulld675bed3c091Present 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_urloptionalstring | nullhttps://…/raw.mkvThe 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_bytesoptionalstring | null"734003200"Size of that file, as a decimal string. Null when no raw output was produced.
video.download_qualityoptionalstring | null"720p"Which rung the download was cut from.
renditionsoptionalarray[{ "quality": "P480", … }]Per-rung playlists, with dash_url set for DRM output.
tagsoptionalobject | null{"course": "Physics 101"}The key/value pairs supplied when the video was registered. Null if none were sent.
transcode_joboptionalobject | 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.