Get episode videos
curl --request GET \
--url https://platform.neural-motion.org/api/v1/catalog/datasets/{dataset_id}/episodes/{episode_index}/videos \
--header 'Authorization: Bearer <token>'import requests
url = "https://platform.neural-motion.org/api/v1/catalog/datasets/{dataset_id}/episodes/{episode_index}/videos"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://platform.neural-motion.org/api/v1/catalog/datasets/{dataset_id}/episodes/{episode_index}/videos', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"item": {
"dataset_id": "<string>",
"episode_index": 123,
"primary_stream_key": "<string>",
"video_streams": [
{
"key": "<string>",
"label": "<string>",
"url": "<string>",
"from_timestamp": 123,
"to_timestamp": 123,
"width": 123,
"height": 123,
"fps": 123,
"codec": "<string>",
"playback_sources": [
{
"format": "hls",
"role": "preview",
"url": "<string>",
"content_type": "<string>",
"width": 123,
"height": 123,
"bitrate": 123
}
],
"poster_url": "<string>",
"covers_whole_file": false
}
]
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Catalog
Get episode videos
GET
/
api
/
v1
/
catalog
/
datasets
/
{dataset_id}
/
episodes
/
{episode_index}
/
videos
Get episode videos
curl --request GET \
--url https://platform.neural-motion.org/api/v1/catalog/datasets/{dataset_id}/episodes/{episode_index}/videos \
--header 'Authorization: Bearer <token>'import requests
url = "https://platform.neural-motion.org/api/v1/catalog/datasets/{dataset_id}/episodes/{episode_index}/videos"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://platform.neural-motion.org/api/v1/catalog/datasets/{dataset_id}/episodes/{episode_index}/videos', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"item": {
"dataset_id": "<string>",
"episode_index": 123,
"primary_stream_key": "<string>",
"video_streams": [
{
"key": "<string>",
"label": "<string>",
"url": "<string>",
"from_timestamp": 123,
"to_timestamp": 123,
"width": 123,
"height": 123,
"fps": 123,
"codec": "<string>",
"playback_sources": [
{
"format": "hls",
"role": "preview",
"url": "<string>",
"content_type": "<string>",
"width": 123,
"height": 123,
"bitrate": 123
}
],
"poster_url": "<string>",
"covers_whole_file": false
}
]
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Response
Successful Response
Per-episode, per-camera trimmed video streams (issue #347).
video_streams mirror the episode player's streams but point at small
per-episode slices on a 0-based timeline, so the player can swap them in
for the full-chunk URLs. An empty list means the slice cache is disabled
or unavailable and the caller should keep the original streams.
Show child attributes
Show child attributes

