Episodes_SignEpisodeVideos
const url = 'https://junction-api.qualiastudios.dev/v1/accounts/example/datasets/example/episodes/example:signVideos';const options = {method: 'GET', headers: {'X-API-Key': '<X-API-Key>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://junction-api.qualiastudios.dev/v1/accounts/example/datasets/example/episodes/example:signVideos \ --header 'X-API-Key: <X-API-Key>'Signs the episode’s camera videos for playback: one short-lived URI per camera, of the take’s current content (the member of its upload’s published version), and where that content sits in the episode’s recording (window_start_seconds, window_end_seconds): after a trim the files play the kept stretch alone. Read it again once a URI expires. A take in no published version yet (a split child before its publish) answers unpublished, with no videos; FAILED_PRECONDITION means the published content cannot be signed (an object or storage missing).
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”The account id.
The dataset id.
The episode id.
Query Parameters
Section titled “Query Parameters ”Read as this version froze it: a tag, stable, v0 or a
digest prefix; empty or head reads the episode as it is now. As
GetEpisodeRequest.version: the videos of the member that version holds.
Responses
Section titled “ Responses ”OK
Response for Episodes.SignEpisodeVideos.
object
One per camera.
One camera’s video of the take.
object
Camera key, e.g. “observation.images.top”.
Signed URI of the video file; it stops working at expire_time.
When the file holds more than this take: seconds into the file where the take starts. Unset when the take is the whole file.
Seconds into the file where the take ends; unset with start_seconds.
When uri stops working.
Seconds into the file where the take’s whole recording starts, before any trim: start_seconds less what an applied trim cut from the start, so a client can show the footage a trim leaves out. Unset only when qds does not know it: the take has no window of this file on record.
Seconds into the file where the whole recording ends; unset with recording_start_seconds.
True when the take is in no published version yet (a split child before its publish): it has no videos to sign.
Where the videos’ take starts in the episode’s recording, in seconds of the recording (the clock its trim, subtasks and markers are in): a camera’s start_seconds plays this second. 0 until a trim is applied, the trim’s start once one is; a split’s piece is a recording of its own, so 0. Unset with unpublished.
Where the take ends in the recording, in the same seconds: the recording’s length, or the applied trim’s end. A camera whose file ends sooner stops at its end_seconds. Unset with unpublished.
Example generated
{ "videos": [ { "camera": "example", "uri": "example", "startSeconds": 1, "endSeconds": 1, "expireTime": "2026-04-15T12:00:00Z", "recordingStartSeconds": 1, "recordingEndSeconds": 1 } ], "unpublished": true, "windowStartSeconds": 1, "windowEndSeconds": 1}default
Section titled “default ”Default error response
A refusal from the API itself.
object
The gRPC code name in upper case, e.g. NOT_FOUND.
Whether the same call may succeed if retried.
Empty, except when a dataset copy or move is refused: then one google.rpc.ErrorInfo with the refusal’s reason code, its domain and, in metadata, the datasets it names.
object
A refusal from the gateway before the call reaches the API, for example 401 bad or missing API key, 403 key lacks the scope or environment closed, 413 body too large.
object
What went wrong.
Example generated
{ "code": "example", "message": "example", "retryable": true, "details": [ {} ]}