OpenTV ENTera & OpenTV Platform Documentation
26.26_Q2 25.52_Q4 25.26_Q2 25.12_Q1 24.50_Q4 24.38_Q3 24.26_Q2 23.50_Q4 23.24_Q2 23.12_Q1 22.50_Q4 22.38_Q3 22.24_Q2
26.26_Q2 25.52_Q4 25.26_Q2 25.12_Q1 24.50_Q4 24.38_Q3 24.26_Q2 23.50_Q4 23.24_Q2 23.12_Q1 22.50_Q4 22.38_Q3 22.24_Q2

Standard metrics

Common fields

The following fields must be included in every request body:

  • accountId – the account ID

  • userId – must be an empty string

  • deviceId – the device ID

  • key – must be an empty string

  • name – the activity name

  • timestamp – the activity timestamp in <YYYY>-<MM>-<DD>T<hh>:<mm>:<ss>Z format

These fields are not included in the examples in the following table.

Activity name       

Trigger

Description

Required data fields


Notes

Examples

appStart 

Client session creation

When app starts up 

appSessionId
deviceId
activityDateTime
accountId
userId

appSessionId is created when application is started, persisted until application closed by user or due to inactivity. 

In mobile, a session begins when the app is opened (in the foreground) and ends when it goes into the background and no events occur within a predetermined time window, dependent on the measurement provider. Note that because of the typical multitasking nature of mobile users, events that occur within the predetermined window count towards the current session.

Request:

POST https://host/useractivityvault/v1/useractivity/appStart
JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "activityDateTime": ".... (UTC)"
  }
  ...
}


appEnd 

Client session tear down

When app is shut down or times out due to inactivity

appSessionId
deviceId
accountId
userId
activityDateTime


Request:

POST https://host/useractivityvault/v1/useractivity/appEnd

Body:

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "activityDateTime": ".... (UTC)"
  }
  ...
}

playbackStart 

Start of playback


appSessionId
playbackSessionId
editorialId
deviceId
accountId
userId
contentSource
contentType
railId
depth
templateId
technicalId
programmeId
seriesId
deeplinkId
deviceType

Zero position event

The playbackSession needs to be associated with the playback event. 

playbackSessionId  – generated when playback starts.

Do not use playbackStart when playback is resumed after playbackPause.

Use playbackResume instead.

Request:

POST https://host/useractivityvault/v1/useractivity/playbackStart

Content type: live-event

JSON
{
  ...
  "metadata": {
    "deviceType": "{device_type}",
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "live-event",
    "editorialId": "{editorial_ID_of_event}",
    "technicalId": "{technical_ID_of_event}",
    "channelEditorialId": "{editorial_ID_of channel}",
    "channelTechnicalId": "{technical_ID_of_channel}",
    "programmeId": "{programme_ID}",
    "seriesId": "{series_ID_if_available}",
    "position": <seconds_since_event_start_time>,
    "templateId": "{template_ID}",
    "railId": "{rail_ID}",
    "depth": "{depth}",
    "deeplinkId": "{deeplink_ID}"
  }
  ...
}

Note that for the live-event content type, you need to specify:

  • editorialId – the editorial channel ID

  • technicalId – the technical channel ID

  • programmeId – the programme ID

Content type: live-stcu-event

JSON
{
  ...
  "metadata": {
    "deviceType": "{device_type}",
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "live-stcu-event",
    "editorialId": "{editorialId_of_the_event",
    "seriesId": "{series_ID_if_available}",
    "position": <seconds_since_event_start_time>,
    "templateId": "{template_ID}",
    "railId": "{rail_ID}",
    "depth": "{depth}",
    "deeplinkId": "{deeplink_ID}"
  }
  ...
}

Note that for the live-stcu-event content type, you need to specify:

  • editorialId – the editorial ID of the event

Content type: start-over

JSON
{
  ...
  "metadata": {
    "deviceType": "{device_type}",
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "start-over",
    "editorialId": "{editorial_ID_of_the_event}",
    "seriesId": "{series_ID_if_available}",
    "position": <seconds_since_event_start_time>,
    "templateId": "{template_ID}",
    "railId": "{rail_ID}",
    "depth": "{depth}",
    "deeplinkId": "{deeplink_ID}"
  }
  ...
}

Note that for the start-over content type, you need to specify:

  • editorialId – the editorial ID of the event

Content type: ltcu

JSON
{
  ...
  "metadata": {
    "deviceType": "{device_type}",
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "vod-ed",
    "editorialId": "{editorial_content_ID}",
    "seriesId": "{series_ID_if_available}",
    "position": <seconds_since_event_start_time>,
    "templateId": "{template_ID}",
    "railId": "{rail_ID}",
    "depth": "{depth}",
    "deeplinkId": "{deeplink_ID}"
  }
  ...
}

Note that for the ltcu content type, you need to specify:

  • editorialId – the editorial content ID

Content type: npvr-event 

JSON
{
  ...
  "metadata": {
    "deviceType": "{device_type}",
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "npvr-event",
    "editorialId": "{content_ID}",
    "seriesId": "{series_ID_if_available}",
    "position": <seconds_since_event_start_time>,
    "templateId": "{template_ID}",
    "railId": "{rail_ID}",
    "depth": "{depth}",
    "deeplinkId": "{deeplink_ID}"
  }
  ...
}

Note that for the npvr-event content type, you need to specify:

  • editorialId – the content ID

Content type: vod-ed

JSON
{
  ...
  "metadata": {
    "deviceType": "{device_type}",
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "vod-ed",
    "editorialId": "{editorial_content_ID}",
    "seriesId": "{series_ID_if_available}",
    "position": <seconds_since_event_start_time>,
    "templateId": "{template_ID}",
    "railId": "{rail_ID}",
    "depth": "{depth}",
    "deeplinkId": "{deeplink_ID}"
  }
  ...
}

Note that for the vod-ed content type, you need to specify:

  • editorialId – the editorial content ID

playbackStop 

User stops playback either with stop action or browsing away from playout


appSessionId
playbackSessionId
position
editorialId
contentSource
contentType
deviceId
accountId
userId


Request:

POST https://host/useractivityvault/v1/useractivity/playbackStop

Content type: live-event

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "live-event",
    "editorialId": "{editorial_ID_of_event}",
    "technicalId": "{technical_ID_of_event}",
    "channelEditorialId": "{editorial_ID_of channel}",
    "channelTechnicalId": "{technical_ID_of_channel}",
    "programmeId": "{programme_ID}",
    "position": <seconds_since_event_start_time>
  }
  ...
}

Note that for the live-event content type, you need to specify:

  • editorialId – the editorial channel ID

  • technicalId – the technical channel ID

  • programmeId – the programme ID

Content type: live-stcu-event

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "live-stcu-event",
    "editorialId": "{editorial_ID_of_the_event}",
    "position": <seconds_since_event_start_time>
  }
  ...
}

Note that for the live-stcu-event content type, you need to specify:

  • editorialId – the editorial ID of the event

Content type: start-over

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "start-over",
    "editorialId": "{editorial_ID_of_the_event}",
    "position": <seconds_since_event_start_time>
  }
  ...
}

Note that for the start-over content type, you need to specify:

  • editorialId – the editorial ID of the event

Content type: ltcu

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "vod-ed",
    "editorialId": "{editorial_content_ID}",
    "position": <seconds_since_event_start_time>
  }
  ...
}

Note that for the ltcu content type, you need to specify:

  • editorialId – the editorial content ID

Content type: npvr-event 

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "npvr-event",
    "editorialId": "contentId",
    "position": <seconds_since_event_start_time>
  }
  ...
}

Note that for the npvr-event content type, you need to specify:

  • editorialId – the content ID

Content type: vod-ed

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "vod-ed",
    "editorialId": "{editorial_content_ID}",
    "position": <seconds_since_event_start_time>
  }
  ...
}

Note that for the vod-ed content type, you need to specify:

  • editorialId – the editorial content ID

playbackPause 

User pauses playout


appSessionId
playbackSessionId
position
editorialId
contentSource
contentType
deviceId
accountId
userId

Do not use playbackStart when playback is resumed after playbackPause.

Use playbackResume instead.

Request:

POST https://host/useractivityvault/v1/useractivity/playbackPause

Content type: live-event

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "live-event",
    "editorialId": "{editorial_ID_of_event}",
    "technicalId": "{technical_ID_of_event}",
    "channelEditorialId": "{editorial_ID_of channel}",
    "channelTechnicalId": "{technical_ID_of_channel}",
    "programmeId": "{programme_ID}",
    "position": <seconds_since_event_start_time>
  }
  ...
}

Note that for the live-event content type, you need to specify:

  • editorialId – the editorial channel ID

  • technicalId – the technical channel ID

  • programmeId – the programme ID

Content type: live-stcu-event

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "live-stcu-event",
    "editorialId": "{editorial_ID_of_the_event}",
    "position": <seconds_since_event_start_time>
  }
  ...
}

Note that for the live-stcu-event content type, you need to specify:

  • editorialId – the editorial ID of the event

Content type: start-over

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "start-over",
    "editorialId": "{editorial_ID_of_the_event}",
    "position": <seconds_since_event_start_time>
  }
  ...
}

Note that for the start-over content type, you need to specify:

  • editorialId – the editorial ID of the event

Content type: ltcu

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "vod-ed",
    "editorialId": "{editorial_content_ID}",
    "position": <seconds_since_event_start_time>
  }
  ...
}

Note that for the ltcu content type, you need to specify:

  • editorialId – the editorial content ID

Content type: npvr-event 

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "npvr-event",
    "editorialId": "contentId",
    "position": <seconds_since_event_start_time>
  }
  ...
}

Note that for the npvr-event content type, you need to specify:

  • editorialId – the content ID

Content type: vod-ed

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "vod-ed",
    "editorialId": "{editorial_content_ID}",
    "position": <seconds_since_event_start_time>
  }
  ...
}

Note that for the vod-ed content type, you need to specify:

  • editorialId – the editorial content ID

playbackResume 

User resumes playout after pausing


appSessionId
playbackSessionId
position
editorialId
contentSource
contentType
deviceId
accountId
userId

Do not use playbackStart when playback is resumed after playbackPause.

Use playbackResume instead.

Request:

POST https://host/useractivityvault/v1/useractivity/playbackResume

Content type: live-event

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "live-event",
    "editorialId": "{editorial_ID_of_event}",
    "technicalId": "{technical_ID_of_event}",
    "channelEditorialId": "{editorial_ID_of channel}",
    "channelTechnicalId": "{technical_ID_of_channel}",
    "programmeId": "{programme_ID}",
    "position": <seconds_since_event_start_time>
  }
  ...
}

Note that for the live-event content type, you need to specify:

  • editorialId – the editorial channel ID

  • technicalId – the technical channel ID

  • programmeId – the programme ID

Content type: live-stcu-event

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "live-stcu-event",
    "editorialId": "{editorial_ID_of_the_event}",
    "position": <seconds_since_event_start_time>
  }
  ...
}

Note that for the live-stcu-event content type, you need to specify:

  • editorialId – the editorial ID of the event

Content type: start-over

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "start-over",
    "editorialId": "{editorial_ID_of_the_event}",
    "position": <seconds_since_event_start_time>
  }
  ...
}

Note that for the start-over content type, you need to specify:

  • editorialId – the editorial ID of the event

Content type: ltcu

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "vod-ed",
    "editorialId": "{editorial_content_ID}",
    "position": <seconds_since_event_start_time>
  }
  ...
}

Note that for the ltcu content type, you need to specify:

  • editorialId – the editorial content ID

Content type: npvr-event 

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "npvr-event",
    "editorialId": "contentId",
    "position": <seconds_since_event_start_time>
  }
  ...
}

Note that for the npvr-event content type, you need to specify:

  • editorialId – the content ID

Content type: vod-ed

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "vod-ed",
    "editorialId": "{editorial_content_ID}",
    "position": <seconds_since_event_start_time>
  }
  ...
}

Note that for the vod-ed content type, you need to specify:

  • editorialId – the editorial content ID

playbackSkipAhead 

Fast forward or drag timeline forward

Covering fast forward or skip, allowing the tracking of the start point and the endpoint when playback resumes

appSessionId
playbackSessionId
startPosition
stopPosition
editorialId
contentSource
contentType
deviceId
accountId
userId

startPosition – when the skip is triggered

stopPosition – when playback is resumed


Request:

POST https://host/useractivityvault/v1/useractivity/playbackSkipAhead

Content type: live-event

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "live-event",
    "editorialId": "{editorial_ID_of_event}",
    "technicalId": "{technical_ID_of_event}",
    "channelEditorialId": "{editorial_ID_of channel}",
    "channelTechnicalId": "{technical_ID_of_channel}",
    "programmeId": "{programme_ID}",
    "startPosition": <seconds_since_event_start_time>,
    "stopPosition": <seconds_since_event_start_time>
  }
  ...
}

Note that for the live-event content type, you need to specify:

  • editorialId – the editorial channel ID

  • technicalId – the technical channel ID

  • programmeId – the programme ID

Content type: live-stcu-event

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "live-stcu-event",
    "editorialId": "{editorial_ID_of_the_event}",
    "startPosition": <seconds_since_event_start_time>,
    "stopPosition": <seconds_since_event_start_time>
  }
  ...
}

Note that for the live-stcu-event content type, you need to specify:

  • editorialId – the editorial ID of the event

Content type: start-over

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "start-over",
    "editorialId": "{editorial_ID_of_the_event}",
    "startPosition": <seconds_since_event_start_time>,
    "stopPosition": <seconds_since_event_start_time>
  }
  ...
}

Note that for the start-over content type, you need to specify:

  • editorialId – the editorial ID of the event

Content type: ltcu

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "vod-ed",
    "editorialId": "{editorial_content_ID}",
    "startPosition": <seconds_since_event_start_time>,
    "stopPosition": <seconds_since_event_start_time>
  }
  ...
}

Note that for the ltcu content type, you need to specify:

  • editorialId – the editorial content ID

Content type: npvr-event 

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "npvr-event",
    "editorialId": "contentId",
    "startPosition": <seconds_since_event_start_time>,
    "stopPosition": <seconds_since_event_start_time>
  }
  ...
}

Note that for the npvr-event content type, you need to specify:

  • editorialId – the content ID

Content type: vod-ed

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "vod-ed",
    "editorialId": "{editorial_content_ID}",
    "startPosition": <seconds_since_event_start_time>,
    "stopPosition": <seconds_since_event_start_time>
  }
  ...
}

Note that for the vod-ed content type, you need to specify:

  • editorialId – the editorial content ID

playbackSkipBack 

Rewind or drag timeline backward 

Covering rewind  or skip back, allowing the tracking of the start point and the endpoint when playback resumes

appSessionId
playbackSessionId
startPosition
stopPosition
editorialId
contentSource
contentType
deviceId
accountId
userId

startPosition – when the skip is triggered

stopPosition – when playback is resumed

Request:

POST https://host/useractivityvault/v1/useractivity/playbackSkipBack

Content type: live-event

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "live-event",
    "editorialId": "{editorial_ID_of_event}",
    "technicalId": "{technical_ID_of_event}",
    "channelEditorialId": "{editorial_ID_of channel}",
    "channelTechnicalId": "{technical_ID_of_channel}",
    "programmeId": "{programme_ID}",
    "startPosition": <seconds_since_event_start_time>,
    "stopPosition": <seconds_since_event_start_time>
  }
  ...
}

Note that for the live-event content type, you need to specify:

  • editorialId – the editorial channel ID

  • technicalId – the technical channel ID

  • programmeId – the programme ID

Content type: live-stcu-event

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "live-stcu-event",
    "editorialId": "{editorial_ID_of_the_event}",
    "startPosition": <seconds_since_event_start_time>,
    "stopPosition": <seconds_since_event_start_time>
  }
  ...
}

Note that for the live-stcu-event content type, you need to specify:

  • editorialId – the editorial ID of the event

Content type: start-over

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "start-over",
    "editorialId": "{editorial_ID_of_the_event}",
    "startPosition": <seconds_since_event_start_time>,
    "stopPosition": <seconds_since_event_start_time>
  }
  ...
}

Note that for the start-over content type, you need to specify:

  • editorialId – the editorial ID of the event

Content type: ltcu

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "vod-ed",
    "editorialId": "{editorial_content_ID}",
    "startPosition": <seconds_since_event_start_time>,
    "stopPosition": <seconds_since_event_start_time>
  }
  ...
}

Note that for the ltcu content type, you need to specify:

  • editorialId – the editorial content ID

Content type: npvr-event 

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "npvr-event",
    "editorialId": "contentId",
    "startPosition": <seconds_since_event_start_time>,
    "stopPosition": <seconds_since_event_start_time>
  }
  ...
}

Note that for the npvr-event content type, you need to specify:

  • editorialId – the content ID

Content type: vod-ed

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "vod-ed",
    "editorialId": "{editorial_content_ID}",
    "startPosition": <seconds_since_event_start_time>,
    "stopPosition": <seconds_since_event_start_time>
  }
  ...
}

Note that for the vod-ed content type, you need to specify:

  • editorialId – the editorial content ID

playbackHeartbeat

Created regularly to indicate that the user is watching a stream of content without interacting with the client. 

We recommend recording this activity every 60 seconds.


Heartbeat/playout time

Used to track playout at a granular level. This data is not recorded for operational use only used for reporting.

appSessionId
playbackSessionId
position
editorialId
contentType
deviceId
accountId
userId

If the player metrics are reported regularly with a matching session ID, we can use those for the streaming indicator.

Do not report playbackHeartbeat if you report playback_metrics.

See playback_metrics in QOE/QOS metrics.


Request:

POST https://host/useractivityvault/v1/useractivity/playbackHeartbeat

Content type: live-event

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "live-event",
    "editorialId": "{editorial_ID_of_event}",
    "technicalId": "{technical_ID_of_event}",
    "channelEditorialId": "{editorial_ID_of channel}",
    "channelTechnicalId": "{technical_ID_of_channel}",
    "programmeId": "{programme_ID}",
    "position": <seconds_since_event_start_time>
  }
  ...
}

Note that for the live-event content type, you need to specify:

  • editorialId – the editorial channel ID

  • technicalId – the technical channel ID

  • programmeId – the programme ID

Content type: live-stcu-event

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "live-stcu-event",
    "editorialId": "{editorial_ID_of_the_event}",
    "position": <seconds_since_event_start_time>
  }
  ...
}

Note that for the live-stcu-event content type, you need to specify:

  • editorialId – the editorial ID of the event

Content type: start-over

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "start-over",
    "editorialId": "{editorial_ID_of_the_event}",
    "position": <seconds_since_event_start_time>
  }
  ...
}

Note that for the start-over content type, you need to specify:

  • editorialId – the editorial ID of the event

Content type: ltcu

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "vod-ed",
    "editorialId": "{editorial_content_ID}",
    "position": <seconds_since_event_start_time>
  }
  ...
}

Note that for the ltcu content type, you need to specify:

  • editorialId – the editorial content ID

Content type: npvr-event 

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "npvr-event",
    "editorialId": "contentId",
    "position": <seconds_since_event_start_time>
  }
  ...
}

Note that for the npvr-event content type, you need to specify:

  • editorialId – the content ID

Content type: vod-ed

JSON
{
  ...
  "metadata": {
    "appSessionId": "{UUID|GUID}",
    "playbackSessionId": "{UUID|GUID}",
    "contentSource": <"IPTV"|"OTT"|"Blend">,
    "contentType": "vod-ed",
    "editorialId": "{editorial_content_ID}",
    "position": <seconds_since_event_start_time>
  }
  ...
}

Note that for the vod-ed content type, you need to specify:

  • editorialId – the editorial content ID

adWatched 

Completion of viewing a delivered advert 

For ad tracking, allows the client to capture data on the adverts watched by the user.

appSessionId
playbackSessionId
adID
trackingAssetId
adSupplier
deviceId
accountId
userId


Request:

POST https://host/useractivityvault/v1/useractivity/adWatched

Body:

JSON
{
  ...
  "metadata": {
    "contentSource": "IPTV",
    "contentType": <"live-event"|"vod-ed"|"live-stcu-event"|"start-over"|"npvr-event"|"D2G">,
    "recordingId": "ABC_1234",
    "appSessionId": "{UUID}",
    "playbackSessionId" : "{UUID}",
    "adID": "{UUID}",
    "trackingAssetId": "{UUID}",
    "adSupplier": "{name}"
  }
  ...
}

adDelivered

Ad delivered in a stream

Capture adverts that are delivered. Useful for reference if the user skips the ad.

appSessionId
playbackSessionId
adID
trackingAssetId
adSupplier
deviceId
accountId
userId


Request:

POST https://host/useractivityvault/v1/useractivity/adDeliverd

Body:

JSON
{
  ...
  "metadata": {
    "contentSource": "IPTV",
    "contentType": <"live-event"|"vod-ed"|"live-stcu-event"|"start-over"|"npvr-event"|"D2G">,
    "recordingId": "ABC_1234",
    "appSessionId": "{UUID}",
    "playbackSessionId": "{UUID}",
    "adID": "{UUID}",
    "trackingAssetId": "{UUID}",
    "adSupplier": "{name}"
  }
  ...
}

adSkipped

Skipping adverts where allowed.

Capture the action of skipping an ad where allowed. 

appSessionId
playbackSessionId
adID
trackingAssetId
adSupplier
deviceId
accountId
userId


Request:

POST https://host/useractivityvault/v1/useractivity/adSkipped

Body:

JSON
{
  ...
  "metadata": {
    "contentSource": "IPTV",
    "contentType": <"live-event"|"vod-ed"|"live-stcu-event"|"start-over"|"npvr-event"|"D2G">,
    "recordingId": "ABC_1234",
    "appSessionId": "{UUID}",
    "playbackSessionId": "{UUID}",
    "adID": "{UUID}",
    "trackingAssetId": "{UUID}",
    "adSupplier": "{name}"
    }
  ...
}

watch

Created when the user clicks the play option on content.

Current activity that is reported on first playback.

appSessionId
playbackSessionId
Position
editorialId
contentType
railId
templateId
deviceId
accountId
userId

Deprecated – retained for backward compatibility.

Request:

POST https://host/useractivityvault/v1/useractivity/watch

Body:

JSON
{
  ...
  "metadata": {
    "contentSource": "IPTV",
    "contentType": <"live-event"|"vod-ed"|"live-stcu-event"|"start-over"|"npvr-event"|"D2G">,
    "recordingId": "ABC_1234",
    "playbackSessionId": "{UUID}",
    "appSessionId": "{UUID}",
    "position": 789,
    "railId": "{UUID}",
    "templateId": "{UUID}",
    "contentId": "GLOBAL_20711"
  }
  ...
}