Skip to content

Episodes_SignEpisodeVideos

GET
/v1/accounts/{account}/datasets/{dataset}/episodes/{episode}:signVideos
curl --request GET \
--url https://dev-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).

account
required
string

The account id.

dataset
required
string

The dataset id.

episode
required
string

The episode id.

version
string

Read as this version froze it (QUA-3539): 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.

OK

Media type application/json

Response for Episodes.SignEpisodeVideos.

object
videos

One per camera.

Array<object>

One camera’s video of the take.

object
camera

Camera key, e.g. “observation.images.top”.

string
uri

Signed URI of the video file; it stops working at expire_time.

string
startSeconds

When the file holds more than this take: seconds into the file where the take starts. Unset when the take is the whole file.

number format: double
endSeconds

Seconds into the file where the take ends; unset with start_seconds.

number format: double
expireTime

When uri stops working.

string format: date-time
recordingStartSeconds

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.

number format: double
recordingEndSeconds

Seconds into the file where the whole recording ends; unset with recording_start_seconds.

number format: double
unpublished

True when the take is in no published version yet (a split child before its publish): it has no videos to sign.

boolean
windowStartSeconds

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.

number format: double
windowEndSeconds

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.

number format: double
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 error response

Media type application/json

The Status type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by gRPC. Each Status message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the API Design Guide.

object
code

The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].

integer format: int32
message

A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.

string
details

A list of messages that carry the error details. There is a common set of message types for APIs to use.

Array<object>

Contains an arbitrary serialized message along with a @type that describes the type of the serialized message.

object
@type

The type of the serialized message.

string
key
additional properties
any
Example generated
{
"code": 1,
"message": "example",
"details": [
{
"@type": "example"
}
]
}