Skip to main content
Skip table of contents

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:

CODE
POST https://<server>/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:

CODE
POST https://<server>/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:

JSON
POST https://<server>/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_channel_ID>",
    "technicalId": "<technical_channel_ID>",
    "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:

JSON
POST https://<server>/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_channel_ID>",
    "technicalId": "<technical_channel_ID>",
    "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:

JSON
POST https://<server>/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_channel_ID>",
    "technicalId": "<technical_channel_ID>",
    "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:

JSON
POST https://<server>/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_channel_ID>",
    "technicalId": "<technical_channel_ID>",
    "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
stopPosistion
editorialId
contentSource
contentType
deviceId 
accountId
userId

startPosition – when the skip is triggered

stopPosition – when playback is resumed

Request:

CODE
POST https://<server>/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_channel_ID>",
    "technicalId": "<technical_channel_ID>",
    "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
stopPosistion
editorialId
contentSource
contentType
deviceId 
accountId
userId

startPosition – when the skip is triggered

stopPosition – when playback is resumed

Request:

JSON
POST https://<server>/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_channel_ID>",
    "technicalId": "<technical_channel_ID>",
    "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:

JSON
POST https://<server>/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_channel_ID>",
    "technicalId": "<technical_channel_ID>",
    "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:

CODE
POST https://<server>/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:

CODE
POST https://<server>/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:

CODE
POST https://<server>/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>"
  ...
}

scheduleRecording

User triggers a recording to be created in OPF.

appSessionId
playbackSessionId
editorialId
seriesLink
seriesId
deviceId 
accountId
userId
technicalId
programmeId
seriesId
deeplinkId
deviceType

Request:

CODE
POST https://<server>/useractivityvault/v1/useractivity/scheduleRecording

Body:

JSON
{
  ...
  "metadata": {
    "contentSource": "IPTV",
    "contentType": ["live-event"|"live-stcu-event"],
    "recordingId": "ABC_1234",
    "appSessionId": "<UUID>",
    "playbackSessionId": "<UUID>",
    "seriesLink": "<UUID>",
    "seriesId": "<UUID>",
    "editorialId" : "GLOBAL_20711",
    "technicalId": "jkn193887",
    "programmeId": "010928",
    "seriesId": "298940",
    "deeplinkId": "DeepL_20711",
    "deviceType": "ios"
  ...
}

unscheduleRecording

User triggers a scheduled recording to be cancelled.

appSessionId
playbackSessionId
editorialId
seriesLink
seriesId
deviceId 
accountId
userId
technicalId
programmeId
seriesId
deeplinkId
deviceType

Request:

CODE
POST https://<server>/useractivityvault/v1/useractivity/unscheduleRecording

Body:

JSON
{
  ...
  "metadata": {
    "contentSource": "IPTV",
    "contentType": ["live-event"|"live-stcu-event"],
    "recordingId": "ABC_1234",
    "appSessionId": "<UUID>",
    "playbackSessionId": "<UUID>",
    "seriesLink": "<UUID>",
    "seriesId": "<UUID>",
    "editorialId" : "GLOBAL_20711",
    "technicalId": "jkn193887",
    "programmeId": "010928",
    "seriesId": "298940",
    "deeplinkId": "DeepL_20711",
    "deviceType": "ios"
  ...
}

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:

CODE
POST https://<server>/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"
  }
  ...
}
JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.