> For the complete documentation index, see [llms.txt](https://docs.mediamelon.com/mediamelon/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.mediamelon.com/mediamelon/smartsight-apis/metrics.md).

# Metric and Dimensions Dictionary

List of metrics (`metrics`) and dimensions (`aggby`) available to use as query parameters.&#x20;

### Video Metrics & Dimensions

{% tabs %}
{% tab title="Video Metrics" %}

<table data-header-hidden="false" data-header-sticky data-first-column-sticky><thead><tr><th>Metric Name</th><th width="204.418701171875">Metric Key</th><th width="304.7999267578125">Description</th><th data-type="checkbox">Concurrency supported?</th><th>Metric Key for available aggregates (not supported in concurrency mode)</th><th data-hidden>Category</th></tr></thead><tbody><tr><td>Plays</td><td><code>viewercount</code></td><td>Playback attempts where the first video frame appears.</td><td>true</td><td>--</td><td>Engagement</td></tr><tr><td>Started views</td><td><code>attempts</code></td><td>Playback attempts recorded.</td><td>true</td><td>--</td><td>Engagement</td></tr><tr><td>Ended plays</td><td><code>endedplays</code></td><td><code>Plays</code> that gracefully ended.</td><td>true</td><td>--</td><td>Engagement</td></tr><tr><td>Concurrent views (CCV)<br>Ended Views</td><td><code>concurviewavg</code></td><td>Number of active playback sessions for CCV and Number of ended playback sessions for Ended Views. <br><br>This number includes distinct sessions active in the time range requested. The <code>status</code> of the view can be <code>RUNNING</code>, <code>ENDED</code>, <code>DROPPED</code> and others statues. </td><td>true</td><td>--</td><td>Engagement</td></tr><tr><td>Playtime (mins)</td><td><code>playdur</code></td><td>Total time viewers spent watching content and ads combined. </td><td>true</td><td>--</td><td>Engagement</td></tr><tr><td>Avg Audience Playtime (mins)</td><td><code>avg_playtime_by_audience</code></td><td>Average Playtime per distinct viewer for all the views active in the requested time range. </td><td>true</td><td>--</td><td>Engagement</td></tr><tr><td>Unique Subscribers</td><td><code>unique_subscribers</code></td><td>Number of distinct <code>subscrberId</code> values representing viewers. </td><td>true</td><td>--</td><td>Engagement</td></tr><tr><td>Unique Devices</td><td><code>unique_devices</code></td><td>Number of distinct devices calculated by counting unique <code>deviceid</code> or computed by combining  <code>brand</code>, <code>model</code> , and  <code>ipaddress</code></td><td>true</td><td>--</td><td>Engagement</td></tr><tr><td>Anonymous Viewers</td><td><code>anonymous_viewers</code></td><td>Number of distinct viewers with no <code>subscriberid</code> value set on sessions and the viewer is uniquely identified by combining <code>brand</code>, <code>model</code>, and <code>ipaddress</code>. <br><br>Typically, Anonymous Viewer is considered to be viewer who has not logged in / authenticated. </td><td>true</td><td>--</td><td>Engagement</td></tr><tr><td>Playback Score</td><td><code>qualityofexperience</code></td><td>Overall playback quality score from <code>0</code> to <code>100</code>, based on startup time and buffering and playback success. <br><br>The value of <code>0</code> signifies extremely bad playback experience and a score of <code>100</code> signifies perfect viewing experience.  </td><td>false</td><td>Average=<code>avg_qualityofexperience</code><br>Median=<code>median_qualityofexperience</code></td><td>Engagement</td></tr><tr><td>Startup time (sec)</td><td><code>latency</code></td><td>Time Duration of a view between when the view started to the first video frame displayed to the viewer.</td><td>true</td><td>Average=<code>avg_latency</code><br>Median=<code>median_latency</code><br>P95=<code>p95_latency</code><br>P99=<code>p99_latency</code></td><td>Startup and errors</td></tr><tr><td>Errors</td><td><code>errors</code></td><td>Number of errors encountered, including fatal and non-fatal error or business or technical error. </td><td>true</td><td>--</td><td>Startup and errors</td></tr><tr><td>Fatal errors</td><td><code>fatalerrors</code></td><td>Errors that end the playback session. </td><td>true</td><td>--</td><td>Startup and errors</td></tr><tr><td>Playback Failure %</td><td><code>fatalerrorpc</code></td><td>Percentage of playback sessions ended with a fatal error. <br><br>Playback failures can happen at any time during playback ie. before the first video frame is displayed or afterwards. </td><td>true</td><td>--</td><td>Startup and errors</td></tr><tr><td>Business Failure %</td><td><code>businesserrorpc</code></td><td>Percentage of playback sessions ended with a fatal error due to business rule exception. <br><br>Playback failures can happen at any time during playback ie. before the first video frame is displayed or afterwards. </td><td>true</td><td>--</td><td>Startup and errors</td></tr><tr><td>Startup Failure %</td><td><code>failurerate</code></td><td>Percentage of playback sessions ended with a fatal error before the first video frame is displayed. </td><td>true</td><td>--</td><td>Startup and errors</td></tr><tr><td>Business Startup Failure %</td><td><code>businessvsfpc</code></td><td>Percentage of playback sessions ended with a fatal error before the first video frame is displayed due to business rule exception. </td><td>true</td><td>--</td><td></td></tr><tr><td>Resumed Play %</td><td><code>resumedplaypct</code></td><td>Percentage of playback sessions that did not start playing from the beginning of the video. </td><td>true</td><td>--</td><td></td></tr><tr><td>Exit before video start %</td><td><code>startupabandonmentrate</code></td><td>Percetange of sessions abandoned by the viewer before the first video frame is displayed.</td><td>true</td><td>--</td><td>Startup and errors</td></tr><tr><td>Pause Count</td><td><code>pausecount</code></td><td>Number of times the video playback was paused.</td><td>true</td><td>Average=<code>avg_pausecount</code><br>Median=<code>median_pausecount</code><br>P95=<code>p95_pausecount</code><br>P99=<code>p99_pausecount</code></td><td>Interaction</td></tr><tr><td>Pause Time (sec)</td><td><code>pauseduration</code></td><td>Total time video playback spent in a paused state.</td><td>true</td><td>Average=<code>avg_pauseduration</code><br>Median=<code>median_pauseduration</code><br>P95=<code>p95_pauseduration</code><br>P99=<code>p99_pauseduration</code></td><td>Interaction</td></tr><tr><td>Buffer empty count</td><td><code>buffwaitcount</code></td><td>Total number of Buffer empty events.  The most common reasons whenn the video player send a Buffer empty event can be for network connection related interrupts, seeking to a different segment of the video and pausing of playback for sufficient amount of time. </td><td>true</td><td>Average=<code>avg_buffwaitcount</code><br>Median=<code>median_buffwaitcount</code><br>P95=<code>p95_buffwaitcount</code><br>P99=<code>p99_buffwaitcount</code></td><td>Buffering</td></tr><tr><td>Rebuffering Time (sec)</td><td><code>sumbuffwaitcirr</code></td><td>Total Interruption time caused by network connection issues. In other words, interruption not caused by any viewer action. </td><td>true</td><td>Average=<code>avg_sumbuffwaitcirr</code><br>Median=<code>median_sumbuffwaitcirr</code><br>P95=<code>p95_sumbuffwaitcirr</code><br>P99=<code>p99_sumbuffwaitcirr</code></td><td>Buffering</td></tr><tr><td>Rebuffering %</td><td><code>cirrbufferingratio</code></td><td>Percentage of Watch Time interrupted after video starts. <br><br>Interruptions due to viewer action like seeking to a different segment of the video or pausing the playback is not counted in calculating this metric. </td><td>true</td><td>--</td><td>Buffering</td></tr><tr><td>Rebuffering Rate</td><td><code>rebufferingrate</code></td><td>Number of network related interruptions per min of playtime.</td><td>true</td><td>--</td><td></td></tr><tr><td>Seek count</td><td><code>seekcount</code></td><td>Average number of seeks per session.</td><td>true</td><td>Average=<code>avg_seekcount</code><br>Median=<code>median_seekcount</code><br>P95=<code>p95_seekcount</code><br>P99=<code>p99_seekcount</code></td><td>Interaction</td></tr><tr><td>Seek Time (sec)</td><td><code>seektime</code></td><td>Time spent waiting for the video to resume when the viewer seeks to a different segment of the video. The time duration is inclusive of any time spend filling up the buffer (<code>sumbuffwaitvrt</code>) to resume playback. </td><td>true</td><td>Average=<code>avg_seektime</code><br>Median=<code>median_seektime</code><br>P95=<code>p95_seektime</code><br>P99=<code>p99_seektime</code></td><td></td></tr><tr><td>Seek Buffering Time %</td><td><code>vrtbufferingratio</code></td><td>Percentage of Watch Time spent waiting fill the buffer for the video to resume after the viewer seeks to the different segment of the video. </td><td>true</td><td>--</td><td></td></tr><tr><td>Buffering Time (sec)</td><td><code>sumbuffwait</code></td><td>Total Interruption time caused by any reason. For instance - network connection issues, viewer seeking, etc.  The interruption time is inclusive of <code>sumbuffwaitcirr</code> and <code>sumbuffwaitvrt</code></td><td>true</td><td>Average=<code>avg_sumbuffwait</code><br>Median=<code>median_sumbuffwait</code><br>P95=<code>p95_sumbuffwait</code><br>P99=<code>p99_sumbuffwait</code></td><td></td></tr><tr><td>Buffering Time %</td><td><code>bufferingratio</code></td><td>Percentage of Watch Time not watching the video after the video starts. <br><br>Any time spent due to a viewer action like seeking to a different segment of the video excluding pause time is also counted in calculating this metric. </td><td>true</td><td>--</td><td>Buffering</td></tr><tr><td>Views without Buffering %</td><td><code>sessionswithoutcirrbuffpc</code></td><td>Percentage of sessions with no interruptions due to network connection related issues. These sessions have <code>sumbuffwaitcirr</code> of 0s. </td><td>false</td><td>--</td><td>Buffering</td></tr><tr><td>Smoothness Score</td><td><code>smoothnessscore</code></td><td>A score from <code>0</code> to <code>100</code> indicating playback smoothness. Smoothness is based on <code>buffwaitcount</code> value and <code>sumbuffwait</code> value. <br><br>A score of <code>100</code> means zero buffering. </td><td>false</td><td>Average=<code>avg_smoothnessscore</code><br>Median=<code>median_smoothnessscore</code></td><td>Buffering</td></tr><tr><td>Weighted Avg Bitrate (Mbps)</td><td><code>qbrbitrate</code></td><td>Average delivered bitrate, weighted by playback time. The bitrate value used for this calculation is the advertized bitrate value in the Variant manifest file. </td><td>true</td><td>Average=<code>avg_qbrbitrate</code><br>Median=<code>median_qbrbitrate</code><br>P95=<code>p95_qbrbitrate</code><br>P99=<code>p99_qbrbitrate</code></td><td>Bitrate and rendition</td></tr><tr><td>Bitrate Upswitch Count</td><td><code>brupscale</code></td><td>Number of rendition changes where bitrate of the rendition increased.</td><td>false</td><td>Average=<code>avg_brupscale</code><br>Median=<code>median_brupscale</code><br>P95=<code>p95_brupscale</code><br>P99=<code>p99_brupscale</code></td><td>Bitrate and rendition</td></tr><tr><td>Bitrate Upswitch %</td><td>brupscalepct</td><td>Percentage representation of a new rendition's bitrate compared to the previous rendition's bitrate, weighted by the play duration. Because this metric strictly tracks upswitch rendition, the value is always greater than 100%.</td><td>false</td><td>--</td><td></td></tr><tr><td>Bitrate Downswitch Count</td><td><code>brdownscale</code></td><td>Number of rendition changes where bitrate of the rendition decreased.</td><td>false</td><td>Average=<code>avg_brdownscale</code><br>Median=<code>median_brdownscale</code><br>P95=<code>p95_brdownscale</code><br>P99=<code>p99_brdownscale</code></td><td>Bitrate and rendition</td></tr><tr><td>Bitrate Downswitch %</td><td><code>brdownscalepct</code></td><td>Percentage representation of a new rendition's bitrate compared to the previous rendition's bitrate, weighted by the play duration. Because this metric strictly tracks downswitch rendition, the value is always less than 100%.</td><td>false</td><td>--</td><td></td></tr><tr><td>Resolution Upswitch Count</td><td><code>resupscale</code></td><td>Number of rendition changes where resolution of the rendition increased.</td><td>false</td><td>Average=<code>avg_resupscale</code><br>Median=<code>median_resupscale</code><br>P95=<code>p95_resupscale</code><br>P99=<code>p99_resupscale</code></td><td></td></tr><tr><td>Resolution Upswitch %</td><td><code>resupscalepct</code></td><td>Percentage representation of a new rendition's resolution compared to the previous rendition's resolution, weighted by the play duration. Because this metric strictly tracks upswitch rendition, the value is always greater than 100%.<br><br>The resolution value used for the percentage calculation is video width pixel count multiplied by video height pixel count. </td><td>false</td><td>--</td><td></td></tr><tr><td>Resolution Downswitch Count</td><td><code>resdownscale</code></td><td>Number of rendition changes where resolution of the rendition decreased.</td><td>false</td><td>Average=<code>avg_resdownscale</code><br>Median=<code>median_resdownscale</code><br>P95=<code>p95_resdownscale</code><br>P99=<code>p99_resdownscale</code></td><td></td></tr><tr><td>Resolution Downswitch %</td><td><code>resdownscalepct</code></td><td>Percentage representation of a new rendition's resolution compared to the previous rendition's resolution, weighted by the play duration. Because this metric strictly tracks downswitch rendition, the value is always less than 100%.<br><br>The resolution value used for the percentage calculation is video width pixel count multiplied by video height pixel count. </td><td>false</td><td>--</td><td></td></tr><tr><td>Rendition Switches</td><td><code>renditionswitches</code></td><td>Number of rendition changes.</td><td>false</td><td>Average=<code>avg_renditionswitches</code><br>Median=<code>median_renditionswitches</code><br>P95=<code>p95_renditionswitches</code><br>P99=<code>p99_renditionswitches</code></td><td></td></tr><tr><td>Rendition Switch Rate</td><td><code>renditionswitchrate</code></td><td>Number of rendition changes per min of playtime.</td><td>false</td><td>--</td><td>Bitrate and rendition</td></tr><tr><td>Delivery Traffic (MB)</td><td><code>qbrsize</code></td><td>Total number of bytes delivered for playback.</td><td>true</td><td>Average=<code>avg_qbrsize</code><br>Median=<code>median_qbrsize</code><br>P95=<code>p95_qbrsize</code><br>P99=<code>p99_qbrsize</code></td><td>Delivery and CDN</td></tr><tr><td>CDN Change Count</td><td><code>cdn_change_count</code></td><td>Number of CDN switches.</td><td>true</td><td>Average=<code>avg_cdn_change_count</code><br>Median=<code>median_cdn_change_count</code><br>P95=<code>p95_cdn_change_count</code><br>P99=<code>p99_cdn_change_count</code></td><td>Delivery and CDN</td></tr><tr><td>CDN Change Rate</td><td><code>cdn_change_rate</code></td><td>Number of CDN switches per min of play duration.</td><td>true</td><td>--</td><td>Delivery and CDN</td></tr><tr><td>Video Chunk Request Failure Count</td><td><code>rfvideocount</code></td><td>Number of requests for video chunks (or segments) with 4xx &#x26; 5xx HTTP response status.</td><td>true</td><td><p>Average=<code>avg_rfvideocount</code><br>Median=<code>median_rfvideocount</code><br>P95=<code>p95_rfvideocount</code></p><p>P99=<code>p99_rfvideocount</code></p></td><td>Request failures</td></tr><tr><td>Audio Chunk Request Failure Count</td><td><code>rfaudiocount</code></td><td>Number of requests for audio chunks (or segments) with 4xx &#x26; 5xx HTTP response status.</td><td>true</td><td>Average=<code>avg_rfaudiocount</code><br>Median=<code>median_rfaudiocount</code><br>P95=<code>p95_rfaudiocount</code><br>P99=<code>p99_rfaudiocount</code></td><td>Request failures</td></tr><tr><td>Manifest Request Failure Count</td><td><code>rfmanifestcount</code></td><td>Number of requests for manifest with 4xx &#x26; 5xx HTTP response status. Both Variant and Rendition manifest requests failure are counted. </td><td>true</td><td>Average=<code>avg_rfmanifestcount</code><br>Median=<code>median_rfmanifestcount</code><br>P95=<code>p95_rfmanifestcount</code><br>P99=<code>p99_rfmanifestcount</code></td><td>Request failures</td></tr><tr><td>DRM Request Failure Count</td><td><code>rfencryptioncount</code></td><td>Number of requests for DRM Licenses with 4xx &#x26; 5xx HTTP response status.</td><td>true</td><td>Average=<code>avg_rfencryptioncount</code><br>Median=<code>median_rfencryptioncount</code><br>P95=<code>p95_rfencryptioncount</code><br>P99=<code>p99_rfencryptioncount</code></td><td>Request failures</td></tr><tr><td>Video Track Init Request Failure Count</td><td><code>rfvideoinitcount</code></td><td>Number of requests for video init segment with 4xx &#x26; 5xx HTTP response status.</td><td>true</td><td>Average=<code>avg_rfvideoinitcount</code><br>Median=<code>median_rfvideoinitcount</code><br>P95=<code>p95_rfvideoinitcount</code><br>P99=<code>p99_rfvideoinitcount</code></td><td></td></tr><tr><td>Audio Track Init Request Failure Count</td><td><code>rfaudioinitcount</code></td><td>Number of requests for audio init segment with 4xx &#x26; 5xx HTTP response status.</td><td>true</td><td>Average=<code>avg_rfaudioinitcount</code><br>Median=<code>median_rfaudioinitcount</code><br>P95=<code>p95_rfaudioinitcount</code><br>P99=<code>p99_rfaudioinitcount</code></td><td></td></tr><tr><td>PIR Request Failure Count</td><td><code>rfpircount</code></td><td>Number of requests for PIR object with 4xx &#x26; 5xx HTTP response status.<br><br>PIR stands for Playback information Request. Many applications makes API requests to get video playback information, like playback urls, player configuration and other control signals from the server before loading the video. This metric counts  failed requests of this resource. </td><td>true</td><td>Average=<code>avg_rfpircount</code><br>Median=<code>median_rfpircount</code><br>P95=<code>p95_rfpircount</code><br>P99=<code>p99_rfpircount</code></td><td></td></tr></tbody></table>
{% endtab %}

{% tab title="Video Dimensions" %}

<table data-header-hidden="false" data-header-sticky><thead><tr><th width="194.65234375">Dimension Name</th><th width="210.26904296875">Dimension Key</th><th>Description</th><th data-hidden>Category</th></tr></thead><tbody><tr><td>App Name</td><td><code>appname</code></td><td>Name of the client application used for playback</td><td>Player and app</td></tr><tr><td>App Version</td><td><code>appversion</code></td><td>Version string of the client application</td><td>Player and app</td></tr><tr><td>Browser Name</td><td><code>browser</code></td><td>Browser used for playback (e.g. Chrome, Safari, Firefox)</td><td>Player and app</td></tr><tr><td>Browser Version</td><td><code>browserversion</code></td><td>Version of the browser</td><td>Player and app</td></tr><tr><td>Player Name</td><td><code>player</code></td><td>Video player name used by the client application</td><td>Player and app</td></tr><tr><td>Player Version</td><td><code>playerversion</code></td><td>Version of the video player</td><td>Player and app</td></tr><tr><td>Base Player Name</td><td><code>baseplayername</code></td><td>Name of the underlying player when a wrapper or adapter is used (e.g. ExoPlayer beneath a custom wrapper)</td><td>Player and app</td></tr><tr><td>Base Player Version</td><td><code>baseplayerversion</code></td><td>Version of the underlying base player</td><td>Player and app</td></tr><tr><td>Domain Name</td><td><code>domainname</code></td><td>Domain of the page on which the player was embedded</td><td>Player and app</td></tr><tr><td>MediaMelon SDK Info</td><td><code>sdkversion</code></td><td>MediaMelon SDK Name and Version</td><td>Player and app</td></tr><tr><td>Subscriber ID</td><td><code>subscriberid</code></td><td>Unique identifier for each viewer</td><td>Subscriber</td></tr><tr><td>Subscriber Type</td><td><code>subscribertype</code></td><td>Name of Subscription tier or type (e.g. premium, free, trial)</td><td>Subscriber</td></tr><tr><td>Audience Type</td><td><code>audience_type</code></td><td>Type of Viewer. Possible Values are <code>Subscriber</code> or <code>Anonymous Viewer</code></td><td>Subscriber</td></tr><tr><td>Subscriber Tag</td><td><code>subscribertag</code></td><td>Custom label or tag associated with the subscriber</td><td>Subscriber</td></tr><tr><td>Asset ID</td><td><code>assetid</code></td><td>Unique identifier of the video asset</td><td>Content</td></tr><tr><td>Asset Name</td><td><code>assetname</code></td><td>Human-readable title of the video asset</td><td>Content</td></tr><tr><td>Video ID</td><td><code>videoid</code></td><td>Platform-level video identifier, distinct from the asset ID</td><td>Content</td></tr><tr><td>Content Type</td><td><code>contenttype</code></td><td>Type of content being played (e.g. episode, clip, movie)</td><td>Content</td></tr><tr><td>Series Title</td><td><code>seriestitle</code></td><td>Title of the show or series</td><td>Content</td></tr><tr><td>Episode Number</td><td><code>episodenumber</code></td><td>Episode number within a series</td><td>Content</td></tr><tr><td>Season</td><td><code>season</code></td><td>Season number of the series</td><td>Content</td></tr><tr><td>Genre</td><td><code>genre</code></td><td>Comma-separated genre list for the asset</td><td>Content</td></tr><tr><td>Media Type</td><td><code>mediatype</code></td><td>Typically used to indicate the stream type — <code>A</code> (Audio Only) or <code>AV</code> (Audio + Video). </td><td>Content</td></tr><tr><td>Property ID</td><td><code>subpropertyid</code></td><td>Digital Property or Business Unit or Market identifier to segment traffic within a single account</td><td>Content</td></tr><tr><td>Is Live Stream</td><td><code>islive</code></td><td>Boolean value indicating whether the session was a live stream (<code>true</code>) or VOD (<code>false</code>)</td><td>Content</td></tr><tr><td>Device Type</td><td><code>device</code></td><td>Category of the Device (e.g. mobile, tablet, TV, desktop, console)</td><td>Device</td></tr><tr><td>Device ID</td><td><code>deviceid</code></td><td>Unique identifier of the playback device</td><td>Device</td></tr><tr><td>Device Marketing Name</td><td><code>devicemarketingname</code></td><td>Consumer-facing marketing name of the device model</td><td>Device</td></tr><tr><td>Operating System</td><td><code>platform</code></td><td>Name of the operating system (e.g. Android, iOS, Windows, tvOS)</td><td>Device</td></tr><tr><td>Operating System Version</td><td><code>platformversion</code></td><td>Version string of the operating system.</td><td>Device</td></tr><tr><td>Device Brand</td><td><code>brand</code></td><td>Manufacturer brand of the playback device (e.g. Samsung, Apple)</td><td>Device</td></tr><tr><td>Device Model Name</td><td><code>model</code></td><td>Technical model identifier of the device</td><td>Device</td></tr><tr><td>Device capabilities</td><td><code>devicecapabilities</code></td><td>Comma separated list of device capability. Mediamelon SDK populates this dimension with the Video Dynamic Range (e.g SDR, HDR+,HDR10, HLG, etc.) supported on the device. </td><td>Device</td></tr><tr><td>Country</td><td><code>country</code></td><td>Name of the Country that the viewer is located in. </td><td>Network and geo</td></tr><tr><td>Region</td><td><code>region</code></td><td>Name of the Region (typically name of the State) that the viewer is located in. </td><td>Network and geo</td></tr><tr><td>City</td><td><code>city</code></td><td>Name of the City that the viewer is located in. </td><td>Network and geo</td></tr><tr><td>ISP</td><td><code>isp</code></td><td>Name of Internet Service Provider (ISP) that the viewer is connected to watch the video. </td><td>Network and geo</td></tr><tr><td>ASN</td><td><code>asn</code></td><td>Globally Unique Identifier assigned to an Autonomous System, typically a network or ISP, to control and route traffic across the internet. </td><td>Network and geo</td></tr><tr><td>Connection type</td><td><code>nwtype</code></td><td>Network type that the viewer is connected too (e.g. <code>cellular</code>, <code>wifi</code>, <code>satellite</code>, <code>cable/dsl</code>, etc.)</td><td>Network and geo</td></tr><tr><td>Last CDN</td><td><code>cdn</code></td><td>The Last CDN that delivered the last segment of the session. </td><td>Session attribute</td></tr><tr><td>Session ID</td><td><code>sessionid</code></td><td>Unique identifier assigned by the MediaMelon SDK for every session. </td><td>Session attribute</td></tr><tr><td>Experiment Name</td><td><code>experimentname</code></td><td>Name of the A/B test or experiment this session was assigned to</td><td>Session attribute</td></tr><tr><td>Fatal Error Category</td><td><code>fatal_error_category</code></td><td>Category of the fatal error. Possible Values are<br>- <code>Technical Startup Failure</code><br>- <code>Technical Mid-Stream Failure</code><br>- <code>Business Exception Startup Failure</code><br>- <code>Business Exception Mid-Stream Failure</code><br>- <code>No Fatal Failure</code></td><td>Session attribute</td></tr><tr><td>Error Code</td><td><code>errorcode</code></td><td>Last Error code captured when there are errors in a session. </td><td>Session attribute</td></tr><tr><td>Error Description</td><td><code>errordescription</code></td><td>Description of the Last Error Code. </td><td></td></tr><tr><td>DRM</td><td><code>drmprotection</code></td><td>DRM system used for playing the video (e.g. Widevine, FairPlay, PlayReady)</td><td>Session attribute</td></tr><tr><td>Source Format</td><td><code>sourcetype</code></td><td>Streaming format used to play the video (e.g. HLS, DASH, MP4)</td><td>Session attribute</td></tr><tr><td>View Status</td><td><code>status</code></td><td>Final status of the session. Possible values are <code>ENDED</code>, <code>DROPPED</code>, <code>RUNNING</code>, <code>STARTED</code> , <code>IN_AD</code>, <code>LOADED</code>, <code>IN_ERROR</code>, <code>STALLED</code></td><td>Session attribute</td></tr><tr><td>Contains Ads</td><td><code>hasad</code></td><td>Boolean value (<code>true</code> or <code>false</code> ) indicating whether the session played any ads. </td><td>Session attribute</td></tr><tr><td>Contains Pre-Roll Ads</td><td><code>hasprerollad</code></td><td>Boolean value (<code>true</code> or <code>false</code> ) indicating whether the session played pre-roll ads. </td><td></td></tr><tr><td>Contains Warning Errors</td><td><code>containswarning</code></td><td>Boolean value (<code>true</code> or <code>false</code> ) indicating whether the session had any errors marked as Warning. </td><td></td></tr><tr><td>Contains Ad Buffering</td><td><code>hasadbuffwait</code></td><td>Boolean value (<code>true</code> or <code>false</code> ) indicating whether the session had any interruptions when playing ads. </td><td></td></tr><tr><td>Video Codec</td><td><code>vcodec</code></td><td>Video codec of the video played. </td><td>Session attribute</td></tr><tr><td>Audio codec</td><td><code>acodec</code></td><td>Audio codec of the video played. </td><td>Session attribute</td></tr><tr><td>CDN Change Count Buckeet</td><td><code>cdn_change_count_bucket</code></td><td>Each Bucket indicating the corresponding number of <code>CDN_CHANGE</code> events occuring in a session. Possible values are <code>Once</code>, <code>Twice</code>, <code>Thrice</code>, <code>4-6 times</code> and <code>More than 6 times</code></td><td></td></tr><tr><td>Device Display Resolution</td><td><code>scrnres</code></td><td>Resolution of the display device used for playing the video. </td><td></td></tr><tr><td>DRM Level</td><td><code>drmlevel</code></td><td>Indicates the level of DRM protection used for the video played. </td><td></td></tr><tr><td>Encoding Service</td><td><code>encodingservice</code></td><td>Name of the encoding service used to encode/transcode the video content. </td><td></td></tr><tr><td>Exit Before Video Start</td><td><code>hasebvs</code></td><td>Whether the session ended as ebvs <code>1</code> or not <code>0</code></td><td></td></tr><tr><td>Player ID</td><td><code>playerid</code></td><td>Unique identifier for the video player instance. Typically this dimension is useful identifier for when the application or web page loads multiple player instances. </td><td></td></tr><tr><td>Preload</td><td><code>preload</code></td><td>Boolean value (<code>true</code> or <code>false</code> ) indicating whether the video was preloaded by the player before user-initiated play. </td><td></td></tr><tr><td>Resumed Play</td><td><code>resumedplay</code></td><td>Boolean value (<code>true</code> or <code>false</code> ) indicating whether the video playing started from the beginning of the content (<code>false</code>) or not (<code>true</code>). </td><td></td></tr><tr><td>View Session ID</td><td><code>viewsessionid</code></td><td>Customer defined unique identified for the session that can be correlated with the other datasets managed by the customer. </td><td></td></tr><tr><td>Custom tags 1-20</td><td><code>customtag1</code> to <code>customtag20</code></td><td>Custom metadata tag as defined by the customer. MediaMelon supports upto 20 custom tags. </td><td>Custom tag</td></tr></tbody></table>
{% endtab %}
{% endtabs %}

### Ad Metrics & Dimensions

{% tabs %}
{% tab title="Ad Metrics" %}

<table data-header-hidden="false" data-header-sticky data-first-column-sticky><thead><tr><th width="186.73828125">Metric Name</th><th width="197.95703125">Metric Key</th><th>Description</th><th data-hidden>Category</th></tr></thead><tbody><tr><td>Ad Playtime (mins)</td><td><code>adviewtime</code></td><td>Total ad viewing time.</td><td>Engagement</td></tr><tr><td>Unique Subscribers</td><td><code>ad_unique_subscriber</code></td><td>Number of distinct <code>subscrberId</code> values representing viewers who initiated playing an ad.</td><td>Engagement</td></tr><tr><td>Unique Devices</td><td><code>ad_unique_devices</code></td><td>Number of distinct devices calculated by counting unique <code>deviceid</code> or computed by combining <code>brand</code>, <code>model</code> , and <code>ipaddress</code> that initiated playing an ad</td><td>Engagement</td></tr><tr><td>Anonymous viewers</td><td><code>ad_anonymous_viewers</code></td><td>Number of distinct viewers with no <code>subscriberid</code> value set on a session and the viewer is uniquely identified by combining <code>brand</code>, <code>model</code>, and <code>ipaddress</code> that initiated playing an ad. <br><br>Typically, Anonymous Viewer is considered to be viewer who has not logged in / authenticated. </td><td>Engagement</td></tr><tr><td>Unique Ads</td><td><code>unique_ads</code></td><td>Number of distinct Ads <code>adid</code> value.</td><td>Engagement</td></tr><tr><td>Ad Impression</td><td><code>adimpression</code></td><td>Number of Ad Impression events representing the number of times an ad playing was initiated. </td><td>Consumption</td></tr><tr><td>Ad Plays</td><td><code>adplay</code></td><td>Number of Ad Play events representing the number of times an ad started playing. An Ad is considered as started playing is when the first video frame of the ad is displayed to the viewer. </td><td>Consumption</td></tr><tr><td>Ad Breaks</td><td><code>adbreakcount</code></td><td>Number of Ad Breaks (<code>AD_BREAK_START</code>) events. </td><td>Consumption</td></tr><tr><td>Average Audience Ad Playtime</td><td><code>ad_playtime_by_audience</code></td><td>Avg Ad Playtime per Unique Viewer. A Viewer can be a valid subscriber or an anonymous viewer. </td><td>Consumption</td></tr><tr><td>Average Audience Ad Impressions</td><td><code>ad_impressions_by_audience</code></td><td>Avg Number of Ad Impressions per unique viewer. A Viewer can be a valid subscriber or an anonymous viewer. </td><td>Consumption</td></tr><tr><td>Average Device Ad Playtime</td><td><code>ad_playtime_by_device</code></td><td>Avg Ad Playtime per Unique Device. A Device is considerd unique when it has a distinct <code>deviceid</code> or computed by combining  <code>brand</code>, <code>model</code> , and  <code>ipaddress</code></td><td></td></tr><tr><td>Average Device Ad impressions</td><td><code>ad_impressions_by_device</code></td><td>Avg Ad Impressions per Unique Device. A Device is considerd unique when it has a distinct <code>deviceid</code> or computed by combining  <code>brand</code>, <code>model</code> , and  <code>ipaddress</code></td><td></td></tr><tr><td>Ad Fill Rate %</td><td><code>adfillrate</code></td><td>Ad Plays as a percentage of Ad Impressions. A value of <code>100%</code> indicates that every ad played. </td><td>Ad performance</td></tr><tr><td>Ad Errors</td><td><code>aderror</code></td><td>Number of errors during an ad's lifecycle.</td><td>Ad performance</td></tr><tr><td>Ad Startup Time (sec)</td><td><code>adlatency</code></td><td>Time between ad request or ad impression to the first video frame of the ad. <br><br>Ad Startup Time is available for Client-Side Ad Insertion (CSAI) or Pre-Roll Ad placement with Server-Side Ad Insertion (SSAI).  </td><td>Ad performance</td></tr><tr><td>Ad Rebuffering %</td><td><code>adbufferingratio</code></td><td>Percentage of Ad viewing time spent buffering. </td><td>Ad performance</td></tr><tr><td>Ad Completion %</td><td><code>adcompletionrate</code></td><td>Percentage of ads played to <code>100%</code></td><td>Ad playback</td></tr><tr><td>Ad First Quartile %</td><td><code>adfirstquartilepct</code></td><td>Percentage of ads played atleast <code>25%</code>  of the ad duration</td><td>Ad playback</td></tr><tr><td>Ad midpoint %</td><td><code>adsecondquartilepct</code></td><td>Percentage of ads played atleast <code>50%</code>  of the ad duration</td><td>Ad playback</td></tr><tr><td>Ad third quartile %</td><td><code>adthirdquartilepct</code></td><td>Percentage of ads played atleast <code>75%</code>  of the ad duration</td><td>Ad playback</td></tr><tr><td>Ad Skipped %</td><td><code>adskippercentage</code></td><td>Percentage of ads skipped before completion</td><td>Ad playback</td></tr><tr><td>Ad Click Through %</td><td><code>adclickthroughrate</code></td><td>Percentage of ads with a viewer clicking on the ad. </td><td>Ad playback</td></tr><tr><td>Exit Before Pre-Roll Ad %</td><td><code>exitbeforeprerollad</code></td><td>Percentage of sessions the viewer abandoned before the first video frame of a pre-roll ad was displayed.</td><td>Ad playback</td></tr></tbody></table>
{% endtab %}

{% tab title="Ad Dimensions" %}

<table data-header-hidden="false" data-header-sticky data-first-column-sticky><thead><tr><th width="147.0703125">Dimension Name</th><th width="176.37109375">Dimension Key</th><th>Description</th></tr></thead><tbody><tr><td>Ad ID</td><td><code>adid</code></td><td>Unique identifier of the ad. Typically the <code>adid</code> is unique to the Ad Server and it is not a globally unique identifier. </td></tr><tr><td>Ad Server Name</td><td><code>adserver</code></td><td>Name of the Ad Server used to deliver the ad. </td></tr><tr><td>Ad Break Placement</td><td><code>adposition</code></td><td>Position of the Ad. Possbile values are <code>pre</code> for pre-roll, <code>mid</code> for mid-roll and <code>post</code> for post-roll ads. </td></tr><tr><td>Ad Break Position Index</td><td><code>adpodindex</code></td><td>Position index of the Ad Break (aka Ad Pod) in a session. The index number starts with <code>0</code> typically representing pre-roll ad break. </td></tr><tr><td>Ad ID Position Index</td><td><code>adpodposition</code></td><td>Position of an ad in an Ad Break (aka Ad Pod). The position value starts with <code>0</code> indicating the ad is the first ad in the Ad Break. </td></tr></tbody></table>
{% endtab %}
{% endtabs %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.mediamelon.com/mediamelon/smartsight-apis/metrics.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
