Recordings

Check if recording is possible

GET /channels/(string: uuid)/record/possible

Method to check if recording can be started for given Channel. Recording can be started if at least one Owner of a Channel has valid and confirmed email address so that Horn can send email when recording will be available.

Parameters:
  • uuid (string) – The channel ID to check recording availability for for

Download asset using JWT

GET /channels/recording/assets/(string: assetId)/(string: jwtToken)

This method is used to validate a JWT token and download the recording assets

Parameters:
  • assetId (string) – Asset identifier

  • jwtToken (string) – JWT token with recording payload

Download recording

GET /channels/(string: channelId)/recordings/(string: recordingId)/download

Generate URL to download the recording. This method will result in an time-limited download URL that allows to get recording assets. Only channel owner can invoke that call.

Parameters:
  • channelId (string) – Channel for which given recording belongs

  • recordingId (string) – Recording identifier you want to fetch details of

Query Parameters:
  • ttl (string) – Optional time to live parameter. Specifies how long URL will be valid. Specify as a number and a unit, e.g. “1m” for 1 minute, “1d” for one day, etc. If not provided, the default TTL (5 minutes) will be used.

  • kind (string)

Response JSON Object:
  • url (string)

Get recording asset details

GET /channels/(string: channelId)/recordings/(string: recordingId)/assets/(string: assetId)

Get details of one recording asset

Parameters:
  • channelId (string) – Channel for which given recording belongs

  • recordingId (string) – Recording identifier you want to fetch details of

  • assetId (string) – Actual Asset id you want to fetch details of

Response JSON Object:
  • format (string) – Format of the file. I.e. CMS or MP4

  • streamUserId (option[long]) – [default: None] ID of an user that this asset belongs to. It makes sense only for individual streams

  • startTime (long)

  • size (option[long]) – [default: None] Size of asset in bytes

  • state (recordingassetstate.value) – State of this asset uploading process

  • url (option[string]) – [default: None] URL for this asset

  • relativePath (option[string]) – Path to this asset relative to recording root (when uploading to provider)

  • label (string) – Some description of this asset

  • endTime (option[long])

  • id (string) – The ID of this asset

  • userId (option[long]) – [default: None] ID of user that has the uploaded file (the user who setup recording details for channel and received the file on his provider account.

  • kind (recordingassetkind.value) – What kind of asset type is it (audio, video, other)

  • isIndividual (boolean) – Is this an individual stream from some user?

  • recordingId (string) – The ID of the recording

  • group (option[string]) – [default: None] To which group given asset belongs. The group is usually just a streamId from the CMS StartStream message but could also be used when we group two individual streams into one asset during recording (i.e. when a reconnection happens for a stream)

Get recording details

GET /channels/(string: channelId)/recordings/(string: recordingId)

Get details about one specific recording.

Parameters:
  • channelId (string) – Channel for which given recording belongs

  • recordingId (string) – Recording identifier you want to fetch details of

Response JSON Object:
  • channel (string) – The ID of the channel

  • startTime (long) – When recording started

  • endTime (option[long]) – When recording ended. None means recording is still in progress

  • id (string) – The ID of this recording

  • session (string) – The ID of the channel session

  • readyTime (option[long]) – When recording was processed and became ready to download. None means recording is still processing.

Get recording download credentials

GET /channels/(string: channelId)/recordings/(string: recordingId)/credentials

Generate a JWT token that can be used to download recording assets. The token will be valid for the specified duration.

Parameters:
  • channelId (string) – Channel for which given recording belongs

  • recordingId (string) – Recording identifier you want to fetch details of

Query Parameters:
  • ttl (string) – Optional time to live parameter. Specifies how long token will be valid. Specify as a number and a unit, e.g. “1m” for 1 minute, “1d” for one day, etc. If not provided, the default TTL (5 minutes) will be used.

Response JSON Object:
  • jwt (string) – The JWT token for recording downloads

List available recording assets

GET /channels/recording/assets/(string: jwtToken)

Returns a list of available assets that can be downloaded using the provided JWT token. The assets can include the main recording archive, combined video, captions, and other formats.

Parameters:
  • jwtToken (string) – JWT token with recording payload

Response JSON Array of Objects:
  • format (string) – File format of the asset

  • size (option[long]) – Size of the asset in bytes

  • label (string) – Human readable label for the asset

  • id (string) – Asset identifier

  • language (option[string]) – Optional language code for text assets like captions

  • kind (string) – Type of asset (archive, combined_video, captions, other)

List recording assets

GET /channels/(string: channelId)/recordings/(string: recordingId)/assets

List recordings assets generated for given channel recording

Parameters:
  • channelId (string) – Channel for which given recording belongs

  • recordingId (string) – Recording identifier you want to fetch details of

Response JSON Array of Objects:
  • format (string) – Format of the file. I.e. CMS or MP4

  • streamUserId (option[long]) – [default: None] ID of an user that this asset belongs to. It makes sense only for individual streams

  • startTime (long)

  • size (option[long]) – [default: None] Size of asset in bytes

  • state (recordingassetstate.value) – State of this asset uploading process

  • url (option[string]) – [default: None] URL for this asset

  • relativePath (option[string]) – Path to this asset relative to recording root (when uploading to provider)

  • label (string) – Some description of this asset

  • endTime (option[long])

  • id (string) – The ID of this asset

  • userId (option[long]) – [default: None] ID of user that has the uploaded file (the user who setup recording details for channel and received the file on his provider account.

  • kind (recordingassetkind.value) – What kind of asset type is it (audio, video, other)

  • isIndividual (boolean) – Is this an individual stream from some user?

  • recordingId (string) – The ID of the recording

  • group (option[string]) – [default: None] To which group given asset belongs. The group is usually just a streamId from the CMS StartStream message but could also be used when we group two individual streams into one asset during recording (i.e. when a reconnection happens for a stream)

List recordings for channel

GET /channels/(string: channelId)/recordings

List recordings for given channel

Parameters:
  • channelId (string) – Channel UUID for which you want to list recordings

Query Parameters:
  • session (string) – If defined, recordings will be filtered just for this particular session

  • limit (string) – Limit amount of results. Needed for implementing pagination

  • offset (string) – Offset at which start looking for results in database. Needed for implementing pagination

  • sort (string) – By what column sort results. Possible values: [“started”, “ended”]. Default is “started”

  • order (string) – In which order sort results. Possible values: [“asc”, “desc”]. Default is “desc”

Response:

{
    total: number
    results: list
}

where total is a total amount of elements matching criteria results objects has following fields:

{
    channel: string  // The ID of the channel
    startTime: long  // When recording started
    endTime: option[long]  // When recording ended. None means recording is still in progress
    id: string  // The ID of this recording
    session: string  // The ID of the channel session
    readyTime: option[long]  // When recording was processed and became ready to download. None means recording is still processing.
}

Start recording

POST /channels/(string: uuid)/record

Initiate a recording for the requested channel. If this request is made for unsupported channel modes, a RECORDING_NOT_PERMITTED error is returned. Recordings will be uploaded in 30 minute segments to the upload provider. Recordings can be terminated in request and are also terminated if the channel becomes inactive. Recording can only be initiated by an operator. Note that recordings can be configured by one operator to upload to a specific provider but can be initiated by any operator.

Parameters:
  • uuid (string) – The channel ID to start recording for.

Stop recording

DELETE /channels/(string: uuid)/record

Terminate an active recording session. Any recording segments that have not been uploaded will be uploaded to the configured provider.

Parameters:
  • uuid (string) – The channel ID to stop recording for.