<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://nielsentest.mywikis.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=MichelFodjo</id>
	<title>Engineering Client Portal - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://nielsentest.mywikis.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=MichelFodjo"/>
	<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/wiki/Special:Contributions/MichelFodjo"/>
	<updated>2026-11-04T04:43:23Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.5</generator>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=AGF_Onboarding_Process_and_general_Information&amp;diff=7255</id>
		<title>AGF Onboarding Process and general Information</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=AGF_Onboarding_Process_and_general_Information&amp;diff=7255"/>
		<updated>2026-11-03T11:02:59Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Census Reporting per Publisher */  updated per new request from AGF&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Metadata and Custom Variables =&lt;br /&gt;
&lt;br /&gt;
To ensure that measured usage is attributed to the correct broadcasts and programs, metadata (such as programname, episodelength) and AGF custom variables must be transmitted. Correctly populating these fields is essential for accurate reporting&lt;br /&gt;
&lt;br /&gt;
* Please refer to '''[[AGF Metadata Convention]]'''.&lt;br /&gt;
&lt;br /&gt;
= AGF Guidelines for Digital Measurement =&lt;br /&gt;
The streaming guidelines define the business rules of the measurement. It clarifies crucial edge cases, such as how to handle fast-forward/rewind actions, ad breaks or live streams.&lt;br /&gt;
&lt;br /&gt;
* Please refer to '''[https://engineeringportal.nielsen.com/wiki/File:04_-_Guidelines_for_Digital_Measurement_(DE_ENG)_-_shared_externally.pdf AGF Guidelines for Digital Measurement (PDF)]'''&lt;br /&gt;
&lt;br /&gt;
= Certification (Test Cases and Examples) =&lt;br /&gt;
Before your data can flow into the live market, the implementation must be certified. To prepare for this process, we provide these testing scenarios.&lt;br /&gt;
* Please refer to:&lt;br /&gt;
** '''[https://engineeringportal.nielsen.com/wiki/File:DCR_Video_-_AGF_Browser_Test_Cases.pdf AGF SDK Test Cases Browser (PDF)]'''&lt;br /&gt;
** '''[https://engineeringportal.nielsen.com/wiki/File:DCR_Video_-_AGF_Apps_Test_Cases.pdf AGF SDK Test Cases Apps (PDF)]'''&lt;br /&gt;
** '''[https://engineeringportal.nielsen.com/wiki/File:06_-_AGF_S2S_test_cases_-_shared_externally.pdf AGF S2S Test Cases App, Browser, OTT (PDF)]'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Note: Tip for Developers: Use the test cases as a hands-on checklist to ensure events like streamstart, interruptions, and streamended are fired and formatted correctly.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please be aware of the expected granularity of the data, that applies to S2S equally as to SDK &amp;amp; CAPI.&lt;br /&gt;
To ensure the accuracy of the measurement, it is crucial to capture the content viewing time every second and send the aggregated data to your backend at least every 10 seconds. This section defines how to accurately handle timestamps and playhead positions during regular playback, interruptions (e.g., pauses), and scrubbing actions.&lt;br /&gt;
&lt;br /&gt;
* Please refer to '''[https://engineeringportal.nielsen.com/wiki/File:05_-_Examples_of_expected_Position_Details_for_video_playback_scenarios_(Play,_Pause,_REW,_FF).pdf Examples of expected Position Details for video playback scenarios (PDF)]'''&lt;br /&gt;
&lt;br /&gt;
= AGF Data Delivery and Mockup Files =&lt;br /&gt;
== Mockup Files and Data Granularity ==&lt;br /&gt;
To allow your data teams to build ingestion pipelines (e.g., ETL processes) in advance and to provide complete clarity on the data granularity (e.g., aggregated summaries vs. event-level data), you will find mockup files here that simulate the final output format.&lt;br /&gt;
&lt;br /&gt;
[Insert Tables from page 2] with mock up files linked in column 3.&lt;br /&gt;
&lt;br /&gt;
== Understanding the Census Data Files ==&lt;br /&gt;
On a daily basis, 7 distinct Census files are delivered. This detailed document explains the exact file structures, versioning logic, how AssetIDs and metadata are processed (including metadata freezing), and how metrics and devices are classified.&lt;br /&gt;
&lt;br /&gt;
* Please refer to '''[https://engineeringportal.nielsen.com/wiki/File:Understanding_the_AGF_Census_Data_Files_allg.pdf Understanding the AGF Census Data Files (PDF)]'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Note: For any further questions regarding the data delivery or the file structures, please reach out to the Nielsen CX-Team.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Census Data Access =&lt;br /&gt;
== Accessing the Daily Data ==&lt;br /&gt;
&lt;br /&gt;
The final daily Census data will be provided to you via an AWS S3 bucket. Here you can find the necessary steps and instructions to set up your access.&lt;br /&gt;
&lt;br /&gt;
* Please refer to '''[https://engineeringportal.nielsen.com/wiki/File:08.3_-_AWS_S3_-_SSH_Authentification_Instructions_(English)_-_shared_externally.pdf Instructions: How to access the daily delivered Data on AWS (PDF)]'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Please note: Only census data is available to publishers. Panel and demographic files are delivered exclusively to AGF and involved service providers for further processing, such as data calibration.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Census Reporting per Publisher =&lt;br /&gt;
&lt;br /&gt;
These files are delivered 24 hours after production.&lt;br /&gt;
&lt;br /&gt;
== Census Report Files  ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Data Delivery File (Reporting day 3-3am) !! Aggregation Level  !! Mockup Files &lt;br /&gt;
|-&lt;br /&gt;
| Content by AssetID   || Aggregated by AssetID || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_ContentByAssetIDCensus_PUBLISHER_daily_YYYYMMDD_F5_V0_(.csv_file).pdf SDK_ContentByAssetIDCensus_PUBLISHER_daily_YYYYMMDD_F5_V0 (.pdf)]&lt;br /&gt;
|-&lt;br /&gt;
| Ads by AssetID (Currently not measured for S2S solutions and will be delivered empty)   || Aggregated by AssetID || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_AdsByAssetIDCensus_PUBLISHER_daily_YYYYMMDD_F4_V0_(.csv_file).pdf agf_S2S/SDK_AdsByAssetIDCensus_PUBLISHER_daily_YYYYMMDD_F4_V0 (.pdf)]&lt;br /&gt;
|-&lt;br /&gt;
| Event Level Content Livestream   || Aggregated by StreamID || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_EventLevel_PUBLISHER_daily_YYYYMMDD_F3_V0_(.csv_file).pdf agf_S2S/SDK_EventLevel_PUBLISHER_daily_YYYYMMDD_F3_V0 (.pdf)]&lt;br /&gt;
|-&lt;br /&gt;
| Summary (Content &amp;amp; Ads)   || Aggregated by VCID/Player || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_summarycensus_PUBLISHER_daily_YYYYMMDD_F5_V0_(.csv_file).pdf agf_S2S/SDK_summarycensus_PUBLISHER_daily_YYYYMMDD_F5_V0 (.pdf)]&lt;br /&gt;
|-&lt;br /&gt;
|Outlier Content by AssetID    || Aggregated by AssetID || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_ContentByAssetIDCensusOutlier_PUBLISHER_daily_YYYYMMDD_F3_V0_(.csv_file).pdf agf_S2S/SDK_ContentByAssetIDCensusOutlier_PUBLISHER_daily_YYYYMMDD_F3_V0 (.pdf)]&lt;br /&gt;
|-&lt;br /&gt;
|Outlier Ads by AssetID (Currently not measured for S2S solutions and will be delivered empty)   || Aggregated by AssetID || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_AdsByAssetIDCensusOutlier_PUBLISHER_daily_YYYYMMDD_F3_V0_(.csv_file)_blank.pdf agf_S2S/SDK_AdsByAssetIDCensusOutlier_PUBLISHER_daily_YYYYMMDD_F3_V0 (.pdf)_blank]&lt;br /&gt;
|-&lt;br /&gt;
|Outlier Summary (Content &amp;amp; Ads)    || Aggregated by VCID/ Player || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_summaryoutliercensus_PUBLISHER_daily_YYYYMMDD_F3_V0_(.csv_file).pdf agf_S2S/SDK_summaryoutliercensus_PUBLISHER_daily_YYYYMMDD_F3_V0 (.pdf)]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Panel Report Files ==&lt;br /&gt;
&lt;br /&gt;
Panel files will only be available for AGF &amp;amp; AGF's service providers. Licensees will not have access to these panel files.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Data Delivery File (Reporting day 3-3am) !! Aggregation Level  !! Mockup Files &lt;br /&gt;
|-&lt;br /&gt;
|GfK UAID Match for AGF TV Panel router households    || Instance Level data || [https://engineeringportal.nielsen.com/wiki/File:InstanceData_Census_GfK_UAID_Match_Video_gfkV0_YYYYMMDD_F2_V0_(GfK_Panel_.xml_file).pdf InstanceData_Census_GfK_UAID_Match_Video_gfkV0_YYYYMMDD_F2_V0 (GfK Panel .pdf)]&lt;br /&gt;
|-&lt;br /&gt;
|Panel Data Nielsen Desktop  || Instance Level data || [https://engineeringportal.nielsen.com/wiki/File:InstanceData_DSK_DCR_DE_D_YYYYMMDD_F3_V0_(Nielsen_Panel_.xml_file).pdf InstanceData_DSK_DCR_DE_D_YYYYMMDD_F3_V0 (Nielsen Panel .pdf)]&lt;br /&gt;
|-&lt;br /&gt;
|Panel Data Nielsen Mobile  || Instance Level data || [https://engineeringportal.nielsen.com/wiki/File:InstanceData_MBL_DCR_DE_D_YYYYMMDD_F3_V0_(Nielsen_Panel_.xml_file).pdf InstanceData_MBL_DCR_DE_D_YYYYMMDD_F3_V0 (Nielsen Panel .pdf)]&lt;br /&gt;
|-&lt;br /&gt;
|Demographics Desktop  || Panelist survey data || [https://engineeringportal.nielsen.com/wiki/File:DemographicsData_DSK_DCR_DE_D_YYYYMMDD_F4_V0_(.xml_file)_-_blank.pdf DemographicsData_DSK_DCR_DE_D_YYYYMMDD_F4_V0 (.pdf) - blank]&lt;br /&gt;
|-&lt;br /&gt;
|Demographics Mobile  || Panelist survey data || [https://engineeringportal.nielsen.com/wiki/File:DemographicsData_MBL_DCR_DE_D_YYYYMMDD_F4_V0_(.xml_file)_-_blank.pdf DemographicsData_MBL_DCR_DE_D_YYYYMMDD_F4_V0 (.pdf) - blank]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_France_Video_S2S_CANALPLUS&amp;diff=7254</id>
		<title>DCR France Video S2S CANALPLUS</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_France_Video_S2S_CANALPLUS&amp;diff=7254"/>
		<updated>2026-11-03T08:35:32Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: page added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TBD&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_France_Video_Cloud_API&amp;diff=7253</id>
		<title>DCR France Video Cloud API</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_France_Video_Cloud_API&amp;diff=7253"/>
		<updated>2026-11-03T07:44:47Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: update from PROD&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|Mediametrie Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing Cloud API =&lt;br /&gt;
This guide shows you how to integrate the Nielsen Cloud API to enable Digital Content Ratings (DCR), and fuel other measurement products on your over-the-top (OTT) Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
PLease note that you have to use the Staging Cloud API Endpoint until you get the green light to move to Production, you will then get the Production Cloud API Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
 || '''App ID (appid)''' || Unique ID assigned to the player/site and configured by product. || Contact Médiamétrie&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Integration==&lt;br /&gt;
We will cover the steps for constructing the Cloud API Calls.&lt;br /&gt;
&lt;br /&gt;
====URL Structure====&lt;br /&gt;
&lt;br /&gt;
The Cloud API Calls are HTTP GET Requests with the URL structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;[endpoint]/[appid]/[sessionID]/a?b=[payload]&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The URL includes the following components:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;[endpoint]&amp;lt;/code&amp;gt;: location of data collection environment&lt;br /&gt;
*&amp;lt;code&amp;gt;[appid]&amp;lt;/code&amp;gt;: provided App ID. &amp;lt;br&amp;gt;'''Note:'''The &amp;quot;P&amp;quot; prefix must be removed from the App ID received before adding it to the URL, i.e. if you received PDF20695-XXXX-XXXX-XXXX-3E334133D917 from Nielsen , your url will then be : &amp;lt;code&amp;gt;[endpoint]/DF20695-XXXX-XXXX-XXXX-3E334133D917/[sessionID]/a?b=[payload]&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;[sessionID]&amp;lt;/code&amp;gt;: unique value for each user session&lt;br /&gt;
*&amp;lt;code&amp;gt;[payload]&amp;lt;/code&amp;gt;: metadata and events&lt;br /&gt;
&lt;br /&gt;
====Endpoint====&lt;br /&gt;
&lt;br /&gt;
There are endpoints for testing and production:&lt;br /&gt;
&lt;br /&gt;
*Testing: &amp;lt;code&amp;gt;https://sc-eucert-capi.imrworldwide.com/nmapi/v2/&amp;lt;/code&amp;gt;&lt;br /&gt;
*Production: Contact Médiamétrie&lt;br /&gt;
&lt;br /&gt;
During testing, all calls should be pointed to the testing endpoint. We will review the update to the production endpoint during the Go Live section of this guide.&lt;br /&gt;
&lt;br /&gt;
====URL Example====&lt;br /&gt;
As you move through the integration steps, you can reference the below URL structure with the expanded payload:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
https://sc-eucert-capi.imrworldwide.com/nmapi/v2/[appid]/[sessionID]/a?b=&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;devInfo&amp;quot;: [deviceInfo],&lt;br /&gt;
  &amp;quot;metadata&amp;quot;: {&lt;br /&gt;
    &amp;quot;content&amp;quot;: [content_metadata]&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;event&amp;quot;: [event],&lt;br /&gt;
  &amp;quot;position&amp;quot;: [playhead_position],&lt;br /&gt;
  &amp;quot;type&amp;quot;: [asset type],&lt;br /&gt;
  &amp;quot;utc&amp;quot;: [Unix time in ms],&lt;br /&gt;
  &amp;quot;sessid&amp;quot;: [unique view session ID for each video play]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Create Session ID and send EMM Ping===&lt;br /&gt;
&lt;br /&gt;
====Create Session ID====&lt;br /&gt;
&lt;br /&gt;
A unique Session ID &amp;lt;code&amp;gt;[sessionID]&amp;lt;/code&amp;gt; must be created upon app launch and provided in the URL. This will allow the measurement to occur for the entire duration that a user is within the app.&lt;br /&gt;
&lt;br /&gt;
A Session ID needs to be completely unique so it is recommended to use our generation method example provided below to create unique alpha-numerical 29 characters + 10 characters UTC timestamp, to guarantee there are no repeats, also see [[#Review the Reference Implementation for VoD and Live Streams|Reference Implementation for VoD and Live Streams]] for your reference and use.&lt;br /&gt;
&lt;br /&gt;
Session ID example: '''LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====UUID Generator Code=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
'''// Create random GUID'''&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upon exiting the app, the session will need to be terminated using the delete event. &amp;lt;br&amp;gt;&lt;br /&gt;
Sessions will automatically expire after 30 minutes of cloud inactivity.&lt;br /&gt;
&lt;br /&gt;
==== Send EMM Ping ====&lt;br /&gt;
An EMM Ping must be sent using the created unique Session ID &amp;lt;code&amp;gt;[sessionID]&amp;lt;/code&amp;gt; upon start of the first stream playback.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
https://[sessionID].redinuid.imrworldwide.com/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Also see  [[#Review the Reference Implementation for VoD and Live Streams|Reference Implementation for VoD and Live Streams]] for your reference.&lt;br /&gt;
&lt;br /&gt;
===Create First Party ID===&lt;br /&gt;
* Code to use, see '''UUID Generator Code'''&lt;br /&gt;
* An First Party ID  &amp;lt;code&amp;gt;[fpid]&amp;lt;/code&amp;gt; must be created and stored on the device. It is re-used until expiration date or if the user has deleted it on from the device storage.&lt;br /&gt;
The default expiration date should be set to the equivalent of 180 days. &lt;br /&gt;
* Additionally the Creation Time &amp;lt;code&amp;gt;[fpcrtm]&amp;lt;/code&amp;gt; of the First Party ID should be stored as well. The same value should be used as long as the First Party ID is available on the device.&lt;br /&gt;
&lt;br /&gt;
===Create View Session ID for each Video Start===&lt;br /&gt;
An View Session ID &amp;lt;code&amp;gt;[sessid]&amp;lt;/code&amp;gt; must be created upon start of each stream playback, sessid is unique per video play.&lt;br /&gt;
* Code to use, see '''UUID Generator Code'''&lt;br /&gt;
&lt;br /&gt;
===Define URL Structure===&lt;br /&gt;
Define the URL structure using your provided &amp;lt;code&amp;gt;[appid]&amp;lt;/code&amp;gt; and a unique &amp;lt;code&amp;gt;[sessionID]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;https://sc-eucert-capi.imrworldwide.com/nmapi/v2/[appid]/[sessionID]/a?b=[payload]&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Configure Payload===&lt;br /&gt;
&lt;br /&gt;
====Description Payload====&lt;br /&gt;
&lt;br /&gt;
All Cloud API requests must contain the following payload data:&lt;br /&gt;
&lt;br /&gt;
*''devInfo'': device and app info&lt;br /&gt;
*''metadata'': asset metadata&lt;br /&gt;
*''event metadata'': type of event&lt;br /&gt;
&lt;br /&gt;
The payload can be passed through key-values using the Nielsen reserved keys. The specific keys and descriptions are highlighted in the tables included in this section.&lt;br /&gt;
&lt;br /&gt;
==== Payload Example ====&lt;br /&gt;
&lt;br /&gt;
The example below should be referenced when following the steps for configuring the request payload.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// 1. Create Session ID using the UUID Generator code provided&lt;br /&gt;
sessionID = LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088  // Example sessionID &lt;br /&gt;
&lt;br /&gt;
// 2. Define URL Structure with App ID and Session ID&lt;br /&gt;
sessionURL = https://sc-eucert-capi.imrworldwide.com/nmapi/v2/[appid]/[sessionID]/a?b=&lt;br /&gt;
&lt;br /&gt;
// 3. Configure Payload&lt;br /&gt;
// 3.1 Configure Payload: devInfo &lt;br /&gt;
payload = {&lt;br /&gt;
 &amp;quot;devInfo&amp;quot;: {&lt;br /&gt;
  &amp;quot;devId&amp;quot;: &amp;quot;SHA-256 value of the Device ID&amp;quot;,&lt;br /&gt;
  &amp;quot;apn&amp;quot;: &amp;quot;AppName&amp;quot;,&lt;br /&gt;
  &amp;quot;apv&amp;quot;: &amp;quot;1.0&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;,    &lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;false&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &lt;br /&gt;
  // 3.2 Configure Payload: metadata&lt;br /&gt;
  &amp;quot;metadata&amp;quot;: {&lt;br /&gt;
    &amp;quot;content&amp;quot;: { // object for measuring video content&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
        &amp;quot;assetid&amp;quot; : &amp;quot;unique_content_id&amp;quot;,&lt;br /&gt;
        &amp;quot;program&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
        &amp;quot;title&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
        &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
        &amp;quot;islivestn&amp;quot; : &amp;quot;y&amp;quot;,&lt;br /&gt;
        &amp;quot;subbrand&amp;quot; : &amp;quot;c05&amp;quot;,&lt;br /&gt;
        &amp;quot;cli_md&amp;quot; : &amp;quot;LIVE&amp;quot;,&lt;br /&gt;
        &amp;quot;cli_ch&amp;quot; : &amp;quot;860&amp;quot;,&lt;br /&gt;
        &amp;quot;cli_cn&amp;quot; : &amp;quot;customContentIdentifier&amp;quot;,&lt;br /&gt;
        &amp;quot;nol_p0&amp;quot; : &amp;quot;p0,optionalValueP0&amp;quot;,&lt;br /&gt;
        &amp;quot;nol_p1&amp;quot; : &amp;quot;p1,optionalValueP1&amp;quot;,&lt;br /&gt;
        // ...&lt;br /&gt;
        &amp;quot;nol_p18&amp;quot; : &amp;quot;p18,optionalValueP18&amp;quot;,&lt;br /&gt;
        &amp;quot;nol_p19&amp;quot; : &amp;quot;p19,optionaValuelP19&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
    &lt;br /&gt;
  // 3.3 Configure Payload: events&lt;br /&gt;
  &amp;quot;event&amp;quot;: &amp;quot;playhead&amp;quot;, //event name&lt;br /&gt;
  &amp;quot;position&amp;quot;: &amp;quot;300&amp;quot;, // position in seconds&lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;, //&amp;quot;content&amp;quot;&lt;br /&gt;
  &amp;quot;utc&amp;quot;: &amp;quot;1456448742000&amp;quot;, //unix timestamp in milliseconds &lt;br /&gt;
  &amp;quot;sessid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot; // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configure Payload: devInfo====&lt;br /&gt;
An object &amp;lt;code&amp;gt;&amp;quot;devInfo&amp;quot;&amp;lt;/code&amp;gt; will need to be created to capture App and Device information.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| devId || devId	unique Device ID of a user device (e.g. SHA-256 hashed value of i.e. Advertising ID, Roku Device ID). Please verify your implemented SHA-256 by passing &amp;quot;00000000-0000-0000-0000-000000000000&amp;quot; which should return &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| fpid || First Party ID || created using the UUID Generator code provided / validity time 180 days. See '''UUID Generator Code''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| fpcrtm || Creation Time (UTC) of the First Party ID (Unix Timestamp in milliseconds) || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
|hem_sha1 ||	hashed (SHA256) value of member id || i.e. for the sample memberID &amp;quot;userMemberID123&amp;quot;, the value to pass is &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot; ||  ✓&lt;br /&gt;
|-&lt;br /&gt;
|uid2 ||	hashed(SHA256) value of UID2 || i.e. for the sample UID2 &amp;quot;userUID2&amp;quot;, the value to pass is &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot; ||  ✓&lt;br /&gt;
|-&lt;br /&gt;
|hem_sha256 ||	hashed(SHA256) value of the user email address  ||	 i.e. for the sample email address &amp;quot;useremail@company.com&amp;quot;, the value to pass is &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot; ||  ✓&lt;br /&gt;
|-&lt;br /&gt;
|uoo ||	 device opt-out status  || &amp;quot;true&amp;quot; for opted out,  &amp;quot;false&amp;quot; for NOT opted out or opted in. The default value is &amp;quot;false&amp;quot;.  ||  ✓&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Example devInfo Object'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// create devInfo object&lt;br /&gt;
&amp;quot;devInfo&amp;quot;: {&lt;br /&gt;
  &amp;quot;devId&amp;quot;: &amp;quot;SHA-256 value of the Device ID&amp;quot;,&lt;br /&gt;
  &amp;quot;apn&amp;quot;: &amp;quot;AppName&amp;quot;,&lt;br /&gt;
  &amp;quot;apv&amp;quot;: &amp;quot;1.0&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;,    &lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;false&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3.2 Configure Payload: metadata ====&lt;br /&gt;
Asset metadata can be passed through &amp;lt;code&amp;gt;&amp;quot;metadata&amp;quot;&amp;lt;/code&amp;gt;.  The metadata received for each asset is used for classification and reporting.&lt;br /&gt;
&lt;br /&gt;
You will need to set up &amp;lt;code&amp;gt;&amp;quot;metadata&amp;quot;&amp;lt;/code&amp;gt; objects for &amp;lt;code&amp;gt;&amp;quot;content&amp;quot;&amp;lt;/code&amp;gt; with the required Nielsen keys as shown in the sample code below.&lt;br /&gt;
&lt;br /&gt;
===== Content Metadata =====&lt;br /&gt;
&lt;br /&gt;
====== Description of Content metadata ======&lt;br /&gt;
Content metadata should remain constant throughout the entirety of an episode/clip.&lt;br /&gt;
&lt;br /&gt;
Note: All metadata values should be passed as UTF-8 strings.&lt;br /&gt;
&lt;br /&gt;
Please see the [[France SDK Metadata#Content Metadata|Mediametrie Content Metadata]] for the complete list of content metadata.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Configure Payload: Events ====&lt;br /&gt;
&lt;br /&gt;
The last part of the payload is for enabling events so content is measured correctly when viewed. The events and required parameters are included below.&lt;br /&gt;
&lt;br /&gt;
===== Event Types =====&lt;br /&gt;
&lt;br /&gt;
The available events are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Event !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;playhead&amp;quot;&amp;lt;/code&amp;gt; || &lt;br /&gt;
&lt;br /&gt;
===== Handling Playhead =====&lt;br /&gt;
&lt;br /&gt;
Calling &amp;lt;code&amp;gt;&amp;quot;playhead&amp;quot;&amp;lt;/code&amp;gt; is critical for accurate duration crediting. You can reference the below guidance to determine the correct playhead position to pass depending on the playback scenario.&lt;br /&gt;
&lt;br /&gt;
'''General'''&lt;br /&gt;
* Playhead position in seconds, must be passed as a whole number every 10 seconds. &lt;br /&gt;
* The final playhead position should be sent before before sending &amp;quot;complete&amp;quot; event when content playback is complete. &lt;br /&gt;
&lt;br /&gt;
'''Live Stream'''&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position.&lt;br /&gt;
&lt;br /&gt;
'''VoD Stream'''&lt;br /&gt;
* For VoD stream use the player position for Content, playheads will then be 0, 10, 20, ....&lt;br /&gt;
&lt;br /&gt;
'''End of an Asset'''&lt;br /&gt;
* Final postion must be sent at the end of Content playback&lt;br /&gt;
&lt;br /&gt;
'''User Actions'''&lt;br /&gt;
* SCRUBBING: Upon user scrubbing, the current position must be sent before a user scrubs, and the new position should be sent where the user lands, and begin sending in the 10 second updates thereafter.&lt;br /&gt;
* PAUSE: When content is paused, send current playhead position and stop passing playhead position until content is resumed.&lt;br /&gt;
* EXIT Stream: If a user exits a stream early, the last current position must be sent in a playhead update to receive accurate duration.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;complete&amp;quot;&amp;lt;/code&amp;gt; || The complete event must be sent when the content has completed full playback. Before calling the complete event, a final playhead update with the final position is required to be sent to receive full duration credit. For Live streams, a complete event must be sent at program boundaries.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;delete&amp;quot;&amp;lt;/code&amp;gt; || The delete event is optional and can be sent when the viewing session is terminated (typically on App close). A new session ID must be generated after sending a delete event. Delete should not be sent on app interruptions or foreground/background events. All creditable duration will be summarized for all asset types when delete occurs (content).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Event Parameters =====&lt;br /&gt;
&lt;br /&gt;
The following parameters need to be passed when calling events:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description !! Value !! Required&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;event&amp;quot;&amp;lt;/code&amp;gt; || event type || &amp;lt;code&amp;gt;&amp;quot;playhead&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;complete&amp;quot;&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;&amp;quot;delete&amp;quot;&amp;lt;/code&amp;gt; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;position&amp;quot;&amp;lt;/code&amp;gt; || playhead position in seconds or Unix time in seconds || &amp;lt;code&amp;gt;&amp;quot;300&amp;quot;&amp;lt;/code&amp;gt; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;type&amp;quot;&amp;lt;/code&amp;gt; || asset type || &amp;lt;code&amp;gt;&amp;quot;content&amp;quot;&amp;lt;/code&amp;gt; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;utc&amp;quot;&amp;lt;/code&amp;gt; || Unix timestamp in milliseconds. Must be passed every 10 seconds. || &amp;lt;code&amp;gt;&amp;quot;1472760000000&amp;quot;&amp;lt;/code&amp;gt; || ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;sessid&amp;quot;&amp;lt;/code&amp;gt; || Unique View Session ID must be created upon start of each stream playback, sessid is unique per video play. || &amp;lt;code&amp;gt;&amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;&amp;lt;/code&amp;gt; || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Example Event =====&lt;br /&gt;
You can call events by passing values in the required parameters:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;devInfo&amp;quot;: [deviceInfo],&lt;br /&gt;
  &amp;quot;metadata&amp;quot;: {&lt;br /&gt;
    &amp;quot;content&amp;quot;: [content metadata]&lt;br /&gt;
  },&lt;br /&gt;
  // Event Parameters&lt;br /&gt;
  &amp;quot;event&amp;quot;: [event], // event name&lt;br /&gt;
  &amp;quot;position&amp;quot;: [playheadPosition], //position in seconds&lt;br /&gt;
  &amp;quot;type&amp;quot;: [asset type], // values  &amp;quot;content&amp;quot; since Ads are not measured&lt;br /&gt;
  &amp;quot;utc&amp;quot;: &amp;quot;1472760000000&amp;quot;, //unix timestamp in milliseconds&lt;br /&gt;
  &amp;quot;sessid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // unique for each video play&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The full payload including &amp;quot;devInfo&amp;quot; and &amp;quot;metadata&amp;quot; must be populated in each event request.&lt;br /&gt;
&lt;br /&gt;
===== Sample Event Lifecycle for VoD Stream =====&lt;br /&gt;
The sample event lifecycle can be used as a reference for identifying the order for calling events and values to pass.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Start of Session: session ID created when App is opened&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Content&lt;br /&gt;
Content Playhead {&amp;quot;event&amp;quot;: &amp;quot;playhead&amp;quot;, &amp;quot;position&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;, &amp;quot;utc&amp;quot;: &amp;quot;1472760000000&amp;quot;} &lt;br /&gt;
&lt;br /&gt;
// Content resumes at 15 minutes&lt;br /&gt;
Content Playhead {&amp;quot;event&amp;quot;: &amp;quot;playhead&amp;quot;, &amp;quot;position&amp;quot;: &amp;quot;900&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;, &amp;quot;utc&amp;quot;: &amp;quot;1472760000000&amp;quot;} &lt;br /&gt;
&lt;br /&gt;
// Content completes at 30 minutes&lt;br /&gt;
Complete {&amp;quot;event&amp;quot;: &amp;quot;complete&amp;quot;, &amp;quot;position&amp;quot;: &amp;quot;1800&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;, &amp;quot;utc&amp;quot;: &amp;quot;1472760000000&amp;quot;} &lt;br /&gt;
 &lt;br /&gt;
//End of Session: The delete event should be called when the App is exited. The values for position and type not required to be passed.&lt;br /&gt;
Delete { &amp;quot;event&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;position&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;utc&amp;quot;: &amp;quot;1472760000000&amp;quot;} &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Sample Event Lifecycle for VoD Stream - Detailed Storyline'''&lt;br /&gt;
This detailed event sequence provides additional insight for the correct events to call when handling certain playback scenarios.&lt;br /&gt;
&amp;lt;syntaxhighlight lang='javascript'&amp;gt;// SESSION STARTS&lt;br /&gt;
// Start of Session: session ID created when App is opened&lt;br /&gt;
&lt;br /&gt;
// CONTENT &lt;br /&gt;
// Content Start - Start new content streams with a position of &amp;quot;0&amp;quot; incrementing the position every 10 seconds.&lt;br /&gt;
Content Playhead {&amp;quot;event&amp;quot;: &amp;quot;playhead&amp;quot;, &amp;quot;position&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;, &amp;quot;utc&amp;quot;: &amp;quot;1472761500000&amp;quot;} &lt;br /&gt;
&lt;br /&gt;
// Content Stop Before Ad Break - Send a playhead update including the current content positon before an Ad break.&lt;br /&gt;
Content Playhead {&amp;quot;event&amp;quot;: &amp;quot;playhead&amp;quot;, &amp;quot;position&amp;quot;: &amp;quot;299&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;, &amp;quot;utc&amp;quot;: &amp;quot;1472787400000&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
// CONTENT&lt;br /&gt;
// Content resumes at 5 minutes - Send playhead update with the current resumed position, and begin incrimenting the positon every 10 seconds.&lt;br /&gt;
Content Playhead {&amp;quot;event&amp;quot;: &amp;quot;playhead&amp;quot;, &amp;quot;position&amp;quot;: &amp;quot;300&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;, &amp;quot;utc&amp;quot;: &amp;quot;1472799500000&amp;quot;} &lt;br /&gt;
&lt;br /&gt;
// Content completes at 10:12 - Make sure to send in the playhead event with the final content position before sending the complete event.&lt;br /&gt;
Final Content Playhead {&amp;quot;event&amp;quot;: &amp;quot;playhead&amp;quot;, &amp;quot;position&amp;quot;: &amp;quot;612&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;, &amp;quot;utc&amp;quot;: &amp;quot;1472830700000&amp;quot;} &lt;br /&gt;
&lt;br /&gt;
Complete {&amp;quot;event&amp;quot;: &amp;quot;complete&amp;quot;, &amp;quot;position&amp;quot;: &amp;quot;612&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;, &amp;quot;utc&amp;quot;: &amp;quot;1472830800000&amp;quot;} &lt;br /&gt;
&lt;br /&gt;
// SESSION ENDS&lt;br /&gt;
&lt;br /&gt;
//End of Session: The delete event should be called when the App is exited. The values for position and type not required to be passed.&lt;br /&gt;
Delete { &amp;quot;event&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;position&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;utc&amp;quot;: &amp;quot;1472835400000&amp;quot;} &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Interruption Scenarios =====&lt;br /&gt;
&lt;br /&gt;
As part of configuring events, you will need to handle all possible interruption scenarios such as:&lt;br /&gt;
&lt;br /&gt;
*Wi-Fi OFF / ON&lt;br /&gt;
*App Crash or Exit&lt;br /&gt;
&lt;br /&gt;
When playback is interrupted, the app needs to send delete immediately.&lt;br /&gt;
&lt;br /&gt;
Once playback resumes, a new session will need to be created with a unique session ID. All of the required metadata and events will need to be sent.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The session will automatically timeout after 30 minutes of inactivity.&lt;br /&gt;
&lt;br /&gt;
=== Example Request ===&lt;br /&gt;
&lt;br /&gt;
Now that we walked through the Cloud API integration steps, your requests should have the following components: Session ID, App ID, and Payload. You can reference the example below when your reviewing your integration.&lt;br /&gt;
&lt;br /&gt;
see '''[[#Payload Example|Payload Example]]'''&lt;br /&gt;
&lt;br /&gt;
// Append payload to URL&lt;br /&gt;
function sendPayloadToNielsen() {&lt;br /&gt;
  var payloadStr  = JSON.stringify(payload); // payload as string&lt;br /&gt;
  var imgPing = new Image();&lt;br /&gt;
  imgPing.onload = function() {&lt;br /&gt;
    // onload event, payload succesfull sent&lt;br /&gt;
  };&lt;br /&gt;
  imgPing.onerror = function() {&lt;br /&gt;
    // handle error i.e. wait and send again&lt;br /&gt;
  };&lt;br /&gt;
  imgPing.src = sessionURL+encodeURIComponent(payloadStr);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Enable Debug Logging ===&lt;br /&gt;
&lt;br /&gt;
Now that you have set up the Cloud API requests, you can enable debug logging to validate your integration. Enabling debug logging is required for Nielsen certification.&lt;br /&gt;
&lt;br /&gt;
==== GET Request ====&lt;br /&gt;
&lt;br /&gt;
Display GET Request to console using a name to identify each event (e.g. playhead).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
console.log(&amp;quot;Event&amp;quot;, image); &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Payload ====&lt;br /&gt;
&lt;br /&gt;
Output payload to identify required metadata and events.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
console.log(&amp;quot;Event Payload&amp;quot;, payload); &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== HTTP Response Code ====&lt;br /&gt;
&lt;br /&gt;
Confirm request was completed by viewing HTTP response code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
code = msg.GetResponseCode();&lt;br /&gt;
console.log(&amp;quot;Response Code&amp;quot;, code);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can reference the HTTP Response Code table when reviewing your requests:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Status Code !! Status Text !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;200&amp;lt;/code&amp;gt; || OK || request received&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;403&amp;lt;/code&amp;gt; || Forbidden || invalid App ID&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;404&amp;lt;/code&amp;gt; || Not Found || JSON issue&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==  Review the Reference Implementation for VoD and Live Streams ==&lt;br /&gt;
&lt;br /&gt;
The Reference Implementation covers vod and Live use cases.&lt;br /&gt;
'''The code also covers also DAI (Dynamic Ad Insertion) that should be ignored since No Ads are measured in France.'''&lt;br /&gt;
&lt;br /&gt;
In order to start live stream select the checkbox &amp;quot;isLive&amp;quot; in the &amp;lt;code&amp;gt;Playback Settings&amp;lt;/code&amp;gt; below the video player.&lt;br /&gt;
&lt;br /&gt;
Start the Reference Implementation for Mediametrie by selection France in the country dropbox [http://nielsenonlinesupport.com/mediametrie/RefImplCloudAPI/index.htm?debug=true RefImplCloudAPI].&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Review the Nielsen CloudAPI Call Sequence below the Video Player.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Disclose Nielsen Privacy Statement ==&lt;br /&gt;
&lt;br /&gt;
The Nielsen Cloud API video measurement does not set cross-domain cookies.&lt;br /&gt;
The only personal information collected with the Nielsen Cloud API network pings is the IP address, which is  anonymized immediately after collection.&lt;br /&gt;
&lt;br /&gt;
In order to disclose Nielsen measurement privacy statement, please include the following items in your privacy policy:&lt;br /&gt;
* A notice that the player includes third party measurement software that allows users to contribute to market research.&lt;br /&gt;
* A link to the Nielsen Digital Measurement Privacy Policy located at https://www.nielsen.com/legal/privacy-principles/digital-measurement-privacy-statement/ .&lt;br /&gt;
&lt;br /&gt;
=== Nielsen Cloud API payload based on User Consent in your App ===&lt;br /&gt;
&lt;br /&gt;
In collaboration with Mediametrie, the following user consent use cases need to be implemented in your App.&lt;br /&gt;
&lt;br /&gt;
==== The user explicitly accepts measurement ====&lt;br /&gt;
 All IDs are captured in the Nielsen Cloud API payload. The Opt-in Flags and IDs have to be set accordingly:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;devInfo&amp;quot;: {&lt;br /&gt;
  &amp;quot;devId&amp;quot;: &amp;quot;SHA-256 value of the Device ID&amp;quot;,&lt;br /&gt;
  &amp;quot;apn&amp;quot;: &amp;quot;AppName&amp;quot;,&lt;br /&gt;
  &amp;quot;apv&amp;quot;: &amp;quot;1.0&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;,    &lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;false&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
==== The user explicitly refuses measurement ====&lt;br /&gt;
The Nielsen Cloud API is NOT initiated and No Nielsen Nielsen Cloud API measurement will occur.&lt;br /&gt;
&lt;br /&gt;
==== The user did not explicitly give consent for the measurement(consent neither given nor refused) ====&lt;br /&gt;
 The Nielsen Cloud API is initiated and no IDs are captured. The Nielsen Cloud API Opt-out Flags and IDs(empty) have to be set accordingly:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;devInfo&amp;quot;: {&lt;br /&gt;
  &amp;quot;devId&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;apn&amp;quot;: &amp;quot;AppName&amp;quot;,&lt;br /&gt;
  &amp;quot;apv&amp;quot;: &amp;quot;1.0&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;,    &lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;true&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Before providing an app build to Nielsen for testing, it is important to run validation checks once you have enabled debug logging.&lt;br /&gt;
&lt;br /&gt;
=== Payload Validation ===&lt;br /&gt;
&lt;br /&gt;
Ensure that all of the required payload data is populating while testing several videos. The following areas are critical to measurement:&lt;br /&gt;
*devInfo&lt;br /&gt;
*Asset metadata for both content&lt;br /&gt;
*Events&lt;br /&gt;
&lt;br /&gt;
=== Player Events ===&lt;br /&gt;
Review event calls:&lt;br /&gt;
&lt;br /&gt;
==== playhead ====&lt;br /&gt;
*Playhead position updates every 10 seconds starting at position '0' for each new asset for VoD stream and UTC Unix Time in seconds for Live stream.&lt;br /&gt;
*Final playhead position is sent on content, or ad before switching between assets.&lt;br /&gt;
*Content metadata remains constant throughout an episode, or clip play.&lt;br /&gt;
*Ad metadata is populated appropriately for each individual ad.&lt;br /&gt;
*Playhead position update resumes for content after an ad break, and resets to 0 for each individual ad.&lt;br /&gt;
*For scrubbing, last current position should be sent while scrubbing occurs, and the new position should also be sent where the user scrubs to.&lt;br /&gt;
*Exiting a stream early should execute the last current position in a playhead update to receive accurate duration.&lt;br /&gt;
*Upon pause, the current position should be sent, and playhead updates should stop incrementing until resume play occurs.&lt;br /&gt;
&lt;br /&gt;
==== complete ====&lt;br /&gt;
*Check that the complete event executes upon content complete after the final playhead update is sent&lt;br /&gt;
&lt;br /&gt;
==== delete ====&lt;br /&gt;
*Check to see that the delete event occurs upon app exit, if the platform has the necessary exit callback events.&lt;br /&gt;
&lt;br /&gt;
==== GET Request Format ====&lt;br /&gt;
*Ensure that the event payloads are formatted in JSON&lt;br /&gt;
*Check to see that each of the Cloud API GET requests are properly encoded&lt;br /&gt;
&lt;br /&gt;
==== HTTP Response ====&lt;br /&gt;
*Make sure that each of the Cloud API Get requests are received by the Nielsen Cloud API properly through use of the HTTP Response Code outputs enabled in console.&lt;br /&gt;
&lt;br /&gt;
== Go Live ==&lt;br /&gt;
After your integration has been certified, you will need to: Change Endpoint and Disable Logging.&lt;br /&gt;
&lt;br /&gt;
'''Change Endpoint:''' You will need to update to the production endpoint: Contact Médiamétrie&lt;br /&gt;
&lt;br /&gt;
*Testing: &amp;lt;code&amp;gt;https://sc-eucert-capi.imrworldwide.com/nmapi/v2/&amp;lt;/code&amp;gt;&lt;br /&gt;
*Production: &amp;lt;code&amp;gt;https://???.imrworldwide.com/nmapi/v2/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your production URL structure should now be:&lt;br /&gt;
&amp;lt;code&amp;gt;https://???.imrworldwide.com/nmapi/v2/[appid]/[sessionID]/a?b=[payload]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Disable Logging:''' You can now disable debug logging&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_France_Domless_SDK&amp;diff=7252</id>
		<title>DCR France Domless SDK</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_France_Domless_SDK&amp;diff=7252"/>
		<updated>2026-11-03T07:43:39Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: update from PROD&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|Mediametrie Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==License==&lt;br /&gt;
Nielsen SDK contains material that is protected by copyright laws, patent laws, trade secret laws, and by international treaty provisions and is Copyright © 2025 The Nielsen Company (US) LLC. All intellectual property rights and licenses therein are reserved by The Nielsen Company (US) LLC and its licensors.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The Nielsen DOM-less SDK is a Javascript based cross-platform library that provides APIs that allows our clients to integrate the Nielsen SDK in DOM-less environments, e.g. ReactNative, NodeJS, etc. The new Amazon Vega/Kepler OS was certified by Nielsen for the DOM-less SDK Integration. &lt;br /&gt;
&lt;br /&gt;
The Nielsen DOM-less SDK can be used for '''Video''' and '''Static''' measurements.&lt;br /&gt;
&lt;br /&gt;
The Digital Content Ratings (DCR) Video product provides content consumption measurement on client mobile apps or webpages. This measurement includes insight into the total time a user spent watching the tracked content, video player events, and much more. This guide also includes a link to [[#Sample DOM-less SDK Implementation| github sample implementation]] with steps to implement the DCR Video product in a sample NodeJS app. It includes:&lt;br /&gt;
* DOM-less SDK Initialization&lt;br /&gt;
* DCR Video Metadata: information about the content being tracked&lt;br /&gt;
* DCR Video Events/API calls&lt;br /&gt;
&lt;br /&gt;
==DOM-less SDK Initialization==&lt;br /&gt;
&lt;br /&gt;
===Obtain the Nielsen Application ID (apid)===&lt;br /&gt;
The Nielsen &amp;lt;code&amp;gt;apid&amp;lt;/code&amp;gt; is required to enable SDK functionality. Médiamétrie will provide an apid for each player configuration. DOM-less SDK can support URLs that use any of the protocols – HTTPS and HTTP.&lt;br /&gt;
&lt;br /&gt;
===Configure the DOM-less SDK===&lt;br /&gt;
&lt;br /&gt;
====Installation====&lt;br /&gt;
Install with &amp;lt;code&amp;gt;npm install &amp;lt;nowiki&amp;gt;https://github.com/NielsenDigitalSDK/bsdk-domless&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; and import the &amp;lt;code&amp;gt;BsdkInstance&amp;lt;/code&amp;gt; into video player component &amp;lt;code&amp;gt; import { BsdkInstance } from 'bsdk-domless' &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======status.ok()======&lt;br /&gt;
&lt;br /&gt;
Initialization of the instance can be done with &amp;lt;code&amp;gt;status.ok()&amp;lt;/code&amp;gt; function or use Promise handling approach&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
const instance = await new BsdkInstance(appID, instanceName, instanceMetadata, implementationHooks);&lt;br /&gt;
if (instance &amp;amp;&amp;amp; instance.status.ok()) {&lt;br /&gt;
      expect(instance).not.toBe(undefined);&lt;br /&gt;
      expect(instance.status.ok()).toBe(true);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: Implementation Hooks are mandatory for the DOM-less SDK instance. Please refer to the Implementation Hooks section below for details.&lt;br /&gt;
&lt;br /&gt;
====Exposed Interface====&lt;br /&gt;
The exposed interface is as follows:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;code&amp;gt;`ggPM`&amp;lt;/code&amp;gt; - method to send messages to the Nielsen SDK&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;code&amp;gt;`processEvent`&amp;lt;/code&amp;gt; - method to send app state to the Nielsen SDK, e.g., focus, blur, appclose&lt;br /&gt;
&lt;br /&gt;
===Initialization Global Parameters===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!'''Parameter'''&lt;br /&gt;
!'''Description'''&lt;br /&gt;
!'''Required'''&lt;br /&gt;
!'''Value'''&lt;br /&gt;
|-&lt;br /&gt;
|apid&lt;br /&gt;
|UniqueID assigned to player/site.&lt;br /&gt;
|Yes&lt;br /&gt;
|'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'&lt;br /&gt;
|-&lt;br /&gt;
|instanceName&lt;br /&gt;
|Name of SDK instance&lt;br /&gt;
|Yes&lt;br /&gt;
|&amp;quot;any string value&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|domlessEnv&lt;br /&gt;
|Type of DOM-less environment like ReactNative, Node, etc.&lt;br /&gt;
|Yes&lt;br /&gt;
|&amp;quot;domlessEnv&amp;quot;: &amp;quot;1&amp;quot;, // For ReactNative&lt;br /&gt;
&amp;quot;domlessEnv&amp;quot;: &amp;quot;2&amp;quot;, // For Amazon&lt;br /&gt;
&lt;br /&gt;
&amp;quot;domlessEnv&amp;quot;: &amp;quot;3&amp;quot;, // For NodeJS&lt;br /&gt;
&lt;br /&gt;
“domlessEnv”: “4”, // For Custom&lt;br /&gt;
|-&lt;br /&gt;
|hem_sha1&lt;br /&gt;
|hashed (SHA256) value of member id&lt;br /&gt;
|No&lt;br /&gt;
|i.e. for the sample memberID &amp;quot;userMemberID123&amp;quot;, the value to pass is &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|uid2&lt;br /&gt;
|hashed(SHA256) value of UID2&lt;br /&gt;
|No&lt;br /&gt;
|i.e. for the sample UID2 &amp;quot;userUID2&amp;quot;, the value to pass is &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|hem_sha256&lt;br /&gt;
|hashed(SHA256) value of the user email address&lt;br /&gt;
|No&lt;br /&gt;
|i.e. for the sample email address &amp;quot;useremail@company.com&amp;quot;, the value to pass is &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|optout&lt;br /&gt;
|OptOut global parameter. This optout will be maintained through the session of the SDK instance&lt;br /&gt;
|Yes&lt;br /&gt;
|&amp;quot;true&amp;quot; for opted out,  &amp;quot;false&amp;quot; for NOT opted out or opted in. The default value is &amp;quot;false&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|enableFpid&lt;br /&gt;
|Optional:turn on or off the First Party ID&lt;br /&gt;
|No&lt;br /&gt;
|&amp;quot;true&amp;quot; for turn on,  &amp;quot;false&amp;quot; for turn off. The default value is &amp;quot;true&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|nol_sdkDebug&lt;br /&gt;
|Enables Nielsen console logging. Only required for testing&lt;br /&gt;
|No&lt;br /&gt;
|&amp;quot;{nol_sdkDebug: &amp;quot;debug&amp;quot;}&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Implementation Hooks ===&lt;br /&gt;
This object captures the required entities for the DOM-less SDK to operate correctly. These are normally platform dependent and are expected to be passed on to the DOM-less SDK as part of its initialization. See below for the descriptions of each key.&lt;br /&gt;
&lt;br /&gt;
==== '''log''' ====&lt;br /&gt;
Log the DOM-less SDK messages to an external stream, e.g. the browser console, stdout.&lt;br /&gt;
&lt;br /&gt;
e.g. Log.debug('debug', 'NIELSEN TAGS EXPECTED TO FIRE:')&lt;br /&gt;
&lt;br /&gt;
===== Methods =====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;info()&lt;br /&gt;
&lt;br /&gt;
Log.info(label: string, ...message: string[]): void&lt;br /&gt;
&lt;br /&gt;
debug()&lt;br /&gt;
&lt;br /&gt;
Log.debug(label: string, ...message: string[]): void&lt;br /&gt;
&lt;br /&gt;
warn()&lt;br /&gt;
&lt;br /&gt;
Log.warn(label: string, ...message: string[]): void&lt;br /&gt;
&lt;br /&gt;
error()&lt;br /&gt;
&lt;br /&gt;
Log.error(label: string, ...message: string[]): void&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;label Required&lt;br /&gt;
&lt;br /&gt;
● string - severity type, e.g. info, debug, warn, error or custom label&lt;br /&gt;
&lt;br /&gt;
message Required&lt;br /&gt;
&lt;br /&gt;
● string - message that will be output to the console&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== storage ====&lt;br /&gt;
Persistent storage of key/values, similar in behavior to browser localStorage.&lt;br /&gt;
&lt;br /&gt;
e.g. storage.set('nol_lsid', 'umy3w4ik9usw2ppqmw2vkecckxfob1697308388')&lt;br /&gt;
&lt;br /&gt;
===== Methods =====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;set()&lt;br /&gt;
&lt;br /&gt;
storage.set(key: string, value: string)&lt;br /&gt;
&lt;br /&gt;
get()&lt;br /&gt;
&lt;br /&gt;
storage.get(key: string)&lt;br /&gt;
&lt;br /&gt;
remove()&lt;br /&gt;
&lt;br /&gt;
storage.remove(key: string)&lt;br /&gt;
&lt;br /&gt;
clear()&lt;br /&gt;
&lt;br /&gt;
storage.clear()&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== fetch ====&lt;br /&gt;
Function to fetch resources from the network. Required for the transmission of the DOM-less SDK requests (pings) to the Nielsen endpoints.&lt;br /&gt;
&lt;br /&gt;
e.g. Fetch(resource: string, options: object)&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;resource Required&lt;br /&gt;
&lt;br /&gt;
● A string that provides the URL of the resource to fetch&lt;br /&gt;
&lt;br /&gt;
options Optional Object containing settings to apply to the request:&lt;br /&gt;
&lt;br /&gt;
method&lt;br /&gt;
&lt;br /&gt;
● string - request method: &amp;quot;GET&amp;quot;, &amp;quot;POST&amp;quot;. If one is not provided SDK will default to &amp;quot;GET&amp;quot;&lt;br /&gt;
&lt;br /&gt;
headers&lt;br /&gt;
&lt;br /&gt;
● object - headers to add to the outgoing request, an object literal with String values&lt;br /&gt;
&lt;br /&gt;
body&lt;br /&gt;
&lt;br /&gt;
● string - body to add to the request; SDK will send out string&lt;br /&gt;
&lt;br /&gt;
mode&lt;br /&gt;
&lt;br /&gt;
● string - mode for request: cors, no-cors, same-origin&lt;br /&gt;
&lt;br /&gt;
referrer&lt;br /&gt;
&lt;br /&gt;
● string - a string specifying the referrer of the request&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====='''''&amp;lt;pre style=&amp;quot;color: green; font-weight: bold; font-size: 20px&amp;quot;&amp;gt;Note: Implementation Hooks are mandatory for the DOM-less SDK to function as expected.&amp;lt;/pre&amp;gt;'''''=====&lt;br /&gt;
&lt;br /&gt;
== DOM-less SDK API to send app state to the Nielsen SDK, e.g., focus, blur, appclose==&lt;br /&gt;
&lt;br /&gt;
The method for calling events is &amp;lt;code&amp;gt;processEvent()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
instance.processEvent('event', parameter);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;`blur`&amp;lt;/code&amp;gt; - This event should be passed to processEvent when the app goes to the background.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
instance.processEvent({ type: 'blur', timestamp: Date.now() });&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;`focus`&amp;lt;/code&amp;gt; - This event should be passed to processEvent when the app goes to the foreground.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
instance.processEvent({ type: 'focus', timestamp: Date.now() });&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;`appclose`&amp;lt;/code&amp;gt; - This event should be passed prior to closing the app.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
instance.processEvent({ type: 'appclose', timestamp: Date.now() });&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DOM-less SDK API to send messages to the Nielsen SDK==&lt;br /&gt;
&lt;br /&gt;
=== Video Measurement ===&lt;br /&gt;
&lt;br /&gt;
The method for calling events is ggPM().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
instance.ggPM('event', parameter);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Events ===&lt;br /&gt;
The events are included in the table below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Event name !! Values to pass !!  Description !!Event #&lt;br /&gt;
|-&lt;br /&gt;
| 'loadMetadata'  || content metadata object || Needs to be called at the beginning of each asset ''[[France SDK Metadata|See details on how to create Médiamétrie metadata for content]]''&lt;br /&gt;
||15&lt;br /&gt;
|-&lt;br /&gt;
| 'setPlayheadPosition'&lt;br /&gt;
||&lt;br /&gt;
* VOD: current position in seconds. Pass whole number that increments only by 1 like 0,1,2,3... &amp;lt;br/&amp;gt;&lt;br /&gt;
* Live: Unix timestamp matching the broadcast time for Content (seconds since Jan-1-1970 UTC). Pass whole number that increments only by 1 like 1631098029,1631098030,1631098031,1631098032,... &amp;lt;br/&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
Pass playhead position every second during playback&lt;br /&gt;
||49&lt;br /&gt;
|-&lt;br /&gt;
| 'stop' || playhead position in seconds  || Call when content interrupted/paused and stop passing playhead position. Do the same also when an Ad Break starts during the Content Playback.&lt;br /&gt;
||7&lt;br /&gt;
|-&lt;br /&gt;
| 'end' || playhead position in seconds || Call when the current video asset completes playback and pass the playhead position. &amp;lt;br/&amp;gt;&lt;br /&gt;
Example: At the end of the content stream, if the user switches to another piece of content, when the browser is refreshed or closed.&lt;br /&gt;
||57&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Playhead position as integer&lt;br /&gt;
&lt;br /&gt;
'''Note:''' 'setPlayheadPosition' has to be called every second&lt;br /&gt;
&lt;br /&gt;
==== Example Events ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Event:''' loadMetadata  |  '''Value Pass ( Object ):''' Content Metadata Object&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  instance.ggPM('loadMetadata', contentMetadataObject); &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Event:''' setPlayheadPosition  |  '''Value Pass ( Integer ):''' playheadPosition&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  instance.ggPM('setPlayheadPosition', playheadPosition); &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Event:''' stop  |  '''Value Pass ( Integer ):''' stopPlayheadPosition &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  instance.ggPM('stop', stopPlayheadPosition); &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Event:''' end  |  '''Value Pass ( Integer ):''' endPlayheadPosition &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  instance.ggPM('end', endPlayheadPosition); &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DOM-less SDK Implementation ====&lt;br /&gt;
&lt;br /&gt;
* Sample Implementation on github [https://github.com/NielsenDigitalSDK/bsdk-domless here].&lt;br /&gt;
&lt;br /&gt;
==== Review SDK Integration Architecture Diagram ====&lt;br /&gt;
&lt;br /&gt;
===== For Content Playback =====&lt;br /&gt;
&lt;br /&gt;
[[File:nlsn-sdk-achitecture-diagram-content-fr.png||SDK Integration Architecture Diagram - Content]]&lt;br /&gt;
&lt;br /&gt;
==== Review SDK Interrupt Scenarios ====&lt;br /&gt;
&lt;br /&gt;
* [[DCR France Video Browser SDK#Stop and Resume the Measurement for video Playback Interruptions|Stop and Resume the Measurement for video Playback Interruptions]]&lt;br /&gt;
&lt;br /&gt;
== Disclose Nielsen Privacy Statement ==&lt;br /&gt;
&lt;br /&gt;
Implement Nielsen Privacy policy as described [[DCR France Video Browser SDK#Disclose Nielsen Privacy Statement|here]].&lt;br /&gt;
&lt;br /&gt;
== Certification ==&lt;br /&gt;
&lt;br /&gt;
While Nielsen is working on adding Support to the Certification Tool for DOM-less SDK in the future, the Certification process for the DOM-less will require detailed SDK Logs from a Médiamétrie Client integrating Nielsen DOM-less SDK. In this regard, a client will execute test cases locally and share logs for each test case with Médiamétrie in charge of the Certification. &lt;br /&gt;
&lt;br /&gt;
== Going Live ==&lt;br /&gt;
Following Nielsen testing, disable Nielsen SDK logging by adjusting the Nielsen SDK Initialization Call, this will ensure that the App or Website is being measured properly.&lt;br /&gt;
# '''Debug Logging''': Disable logging by deleting &amp;lt;code&amp;gt;{nol_sdkDebug: 'debug'}&amp;lt;/code&amp;gt; from initialization call.&lt;br /&gt;
&lt;br /&gt;
====Example Production Initialization Call ====&lt;br /&gt;
Refer to the production initialization call below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
const instance = new BsdkInstance(&lt;br /&gt;
        nsdkConfig.app_id,&lt;br /&gt;
        nsdkConfig.instance_name,&lt;br /&gt;
        {&lt;br /&gt;
            appName: 'BSDK RN Sample App',&lt;br /&gt;
            domlessEnv: '1'// &amp;quot;1&amp;quot; for React Native | &amp;quot;2&amp;quot; for Amazon | &amp;quot;3&amp;quot; for NodeJS | &amp;quot;4&amp;quot; for Custom&lt;br /&gt;
            // reference SDK interface documentation&lt;br /&gt;
            // for additional metadata properties&lt;br /&gt;
        },&lt;br /&gt;
    implementationHooks&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note''': before going live you have to inform Médiamétrie - this is necessary, because Médiamétrie and Nielsen have to adjust internal configuration parameters to enable data collection. Without that notification, no data will be collected, and no data will be reported.&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=Mediametrie_Implementation_Documentation&amp;diff=7251</id>
		<title>Mediametrie Implementation Documentation</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=Mediametrie_Implementation_Documentation&amp;diff=7251"/>
		<updated>2026-11-03T07:42:12Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: update from PROD&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
{{CategoryIcon|DCR.png|Mediametrie Documentation}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The following guides are specific for Mediametrie.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 90px;&amp;quot; | Mediametrie&lt;br /&gt;
! style=&amp;quot;width: 90px;&amp;quot; | Type&lt;br /&gt;
! style=&amp;quot;width: 45px;&amp;quot; | &lt;br /&gt;
! style=&amp;quot;width: 45px;&amp;quot; | OS&lt;br /&gt;
! style=&amp;quot;width: 40%;&amp;quot; | Guide&lt;br /&gt;
!| Links&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot; | {{SmallIcon|FRFlag.png}}&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | {{SmallIcon|SDKIcon.png}}&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot; | {{OSIcon|VideoIcon.png}}&lt;br /&gt;
|-&lt;br /&gt;
|  {{OSIcon|macOSIcon.png}}&lt;br /&gt;
| '''[[DCR France Video iOS SDK]]'''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| {{OSIcon|AndroidIcon.png}}&lt;br /&gt;
| '''[[DCR France Video Android SDK]]'''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| {{OSIcon|BrowserIcon.png}}&lt;br /&gt;
| '''[[DCR France Video Browser SDK]]'''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{OSIcon|BrowserIcon.png}}&lt;br /&gt;
| '''[[DCR France Domless SDK|DCR France Video Domless SDK]]'''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| {{SmallIcon|CloudAPIIcon.png}}&lt;br /&gt;
| {{OSIcon|APIIcon.png}}&lt;br /&gt;
| '''[[DCR France Video Cloud API]]'''&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_France_Video_S2S&amp;diff=7250</id>
		<title>DCR France Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_France_Video_S2S&amp;diff=7250"/>
		<updated>2026-11-03T07:40:50Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: copy from PROD&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|Mediametrie Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S(Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
PLease note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (apid)''' || Unique ID assigned to the player/site and configured by product. || Contact Médiamétrie&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dar, dtvr, dcr, etc.) || Contact Médiamétrie&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Contact Médiamétrie&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for the Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product and Tuning data for the Digital Ads Rating (DAR) products.&lt;br /&gt;
* The specification is defined using a JSON schema, with each file ideally containing all the&lt;br /&gt;
viewing that has been captured within an hour.&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have it’s own unique asset id.&lt;br /&gt;
* The Asset Metadata file should arrive before the viewing data file for the same hour.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but latest within 3 hour of the start of that hourly&lt;br /&gt;
viewing file interval. For example files from 1:00 AM to 2:00 AM must be delivered latest before 4 AM.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving exposure file for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. Any reprocessing of the missed SLA data will require an explicite request from Médiamétrie.'''&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time (Video Player Events) At Least Each 10 Seconds To Your Backend====&lt;br /&gt;
Capture content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time When The Video Playback Is Interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture Accurately Each Second The Viewing Time When The Network Is Lost And The Video Playback Continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send The Viewing Time Early On Browser Refreshed/Closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered at a fixed cadence in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported format are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format(.json);&lt;br /&gt;
***  PARQUET format(.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits(platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system;&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix(S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delived to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name(FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dar, dtvr, dcr, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || Nielsen provided server application identifier&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0000_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0001_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0002_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0003_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true}&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, i.e. &amp;quot;S2SV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710154800&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710158399&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 15&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Note:''' ''' Do not include personal data '''in the content metadata.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname   || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || episode name || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen    || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand  || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
✓ &lt;br /&gt;
|-&lt;br /&gt;
| cli_md || mode: allows to know the streaming type || possible values provided by Médiamétrie: &amp;quot;LIVE&amp;quot; &amp;quot;TIMESHIFTING&amp;quot; &amp;quot;TVOD&amp;quot; &amp;quot;VOD&amp;quot; &amp;quot;SVOD&amp;quot; &amp;quot;AOD&amp;quot;|| &lt;br /&gt;
|-&lt;br /&gt;
| cli_ch    || Channel identifier: values decided by Médiamétrie and provided to the broadcaster || sample value: &amp;quot;860&amp;quot; || &lt;br /&gt;
|-&lt;br /&gt;
| cli_cn    || content identifier as used / categorized by the publisher    || custom   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_p0    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character ) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p1    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p2    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p3    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p4    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p5    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p6    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p7    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p8    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p9    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p10   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p11   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p12   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p13   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p14   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p15   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p16   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p17   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p18   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p19   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;program&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;title&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c05&amp;quot;,&lt;br /&gt;
    &amp;quot;cli_md&amp;quot;: &amp;quot;LIVE&amp;quot;,&lt;br /&gt;
    &amp;quot;cli_ch&amp;quot;: &amp;quot;860&amp;quot;,&lt;br /&gt;
    &amp;quot;cli_cn&amp;quot;: &amp;quot;customCuntentIdentifier&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_p0&amp;quot;: &amp;quot;p0,optionalValueP0&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_p1&amp;quot;: &amp;quot;p1,optionalValueP1&amp;quot;,&lt;br /&gt;
    // ... continued - 20 custom variables&lt;br /&gt;
    &amp;quot;nol_p18&amp;quot;: &amp;quot;p18,optionalValueP18&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_p19&amp;quot;: &amp;quot;p19,optionaValuelP19&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please do not include ZERO DURATION viewing portion in the Asset Viewing File.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SViewingDataV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || Nielsen provided server application identifier || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| device_id || '''MANDATORY ONLY for android platform.''' Mobile Ad ID IDFA,ADID, Connected Device ID  unique Device ID of a user device (e.g. SHA-256 hashed value of i.e. Advertising ID, Roku Device ID). Please verify your implemented SHA-256 by passing &amp;quot;00000000-0000-0000-0000-000000000000&amp;quot; which should return &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || i.e &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| xdua || Device HTTP raw User Agent string  - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Example: &amp;quot;Apple-iPhone1C2/801.293&amp;quot; || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| xff || IP address - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Format: &amp;quot;xxx.xxx.xxx.xxx&amp;quot; or &amp;quot;xxx.xxx.xxx.000&amp;quot; &lt;br /&gt;
Examples :&lt;br /&gt;
* IPV4:  &amp;quot;4.12.345.67&amp;quot;&lt;br /&gt;
* IPV6: &amp;quot;2600:6c58:7900:33f2:2505:42b9:5a34:0000&amp;quot;&lt;br /&gt;
|| ✓ &lt;br /&gt;
|-&lt;br /&gt;
| fpid || First Party ID || created using the UUID Generator code provided / validity time 180 days. || &lt;br /&gt;
|-&lt;br /&gt;
| fpcrtm || Creation Time (UTC) of the First Party ID (Unix Timestamp in milliseconds) || custom || &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha1 ||    hashed (SHA256) value of member id || i.e. for the sample memberID &amp;quot;userMemberID123&amp;quot;, the value to pass is &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uid2 ||    hashed(SHA256) value of UID2 || i.e. for the sample UID2 &amp;quot;userUID2&amp;quot;, the value to pass is i.e. &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha256 ||  hashed(SHA256) value of the user email address  ||   i.e. for the sample email address &amp;quot;useremail@company.com&amp;quot;, the value to pass is &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uoo ||  device opt-out status  || &amp;quot;true&amp;quot; for opted out,  &amp;quot;false&amp;quot; for NOT opted out or opted in.  ||  ✓&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;xdua&amp;quot;: &amp;quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130Safari/537.36&amp;quot;,&lt;br /&gt;
    &amp;quot;xff&amp;quot;: &amp;quot;4.12.345.67&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
    &amp;quot;device_id&amp;quot;: &amp;quot;8ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha1&amp;quot;: &amp;quot;9ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
    &amp;quot;uoo&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
    &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
    &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Metadata based on User Consent in your App =====&lt;br /&gt;
&lt;br /&gt;
In collaboration with Mediametrie, the following user consent use cases need to be implemented in your App.&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly accepts measurement ======&lt;br /&gt;
 All Device/User IDs are captured in the Nielsen S2S Metadata. The Opt-in Flag is set to &amp;quot;false&amp;quot; and all IDs have to be set accordingly:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly refuses measurement ======&lt;br /&gt;
The Nielsen S2S is NOT initiated and No Nielsen S2S measurement will occur.&lt;br /&gt;
&lt;br /&gt;
======The user did not explicitly give consent for the measurement(consent neither given nor refused) ======&lt;br /&gt;
 The Nielsen S2S is initiated and no IDs are captured. The Nielsen S2S Opt-out Flag is set to &amp;quot;true&amp;quot; and all Device/User IDs are empty:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;true&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:France MM S2S casting example.png|France MM S2S casting example.png]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
&lt;br /&gt;
'''start audit ping(“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts(playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping(“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id(“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id(“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping(“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  Unique ID assigned to the player/site and configured by your Nielsen Technical Account Manager.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || devid,  SHA-256 value of Device Id (IDFA, ADID) -  OPTIONAL is passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| uoo || device opt-out status  || &amp;quot;true&amp;quot; for opted out, &amp;quot;false&amp;quot; for NOT opted out or opted in.|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;uoo=&amp;lt;Optout Status &amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;uoo=false&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=AGF_Onboarding_Process_and_general_Information&amp;diff=7249</id>
		<title>AGF Onboarding Process and general Information</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=AGF_Onboarding_Process_and_general_Information&amp;diff=7249"/>
		<updated>2026-11-02T13:50:18Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Mockup Files &amp;amp; Data Granularity */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Metadata and Custom Variables =&lt;br /&gt;
&lt;br /&gt;
To ensure that measured usage is attributed to the correct broadcasts and programs, metadata (such as programname, episodelength) and AGF custom variables must be transmitted. Correctly populating these fields is essential for accurate reporting&lt;br /&gt;
&lt;br /&gt;
* Please refer to '''[[AGF Metadata Convention]]'''.&lt;br /&gt;
&lt;br /&gt;
= AGF Guidelines for Digital Measurement =&lt;br /&gt;
The streaming guidelines define the business rules of the measurement. It clarifies crucial edge cases, such as how to handle fast-forward/rewind actions, ad breaks or live streams.&lt;br /&gt;
&lt;br /&gt;
* Please refer to '''[https://engineeringportal.nielsen.com/wiki/File:04_-_Guidelines_for_Digital_Measurement_(DE_ENG)_-_shared_externally.pdf AGF Guidelines for Digital Measurement (PDF)]'''&lt;br /&gt;
&lt;br /&gt;
= Certification (Test Cases and Examples) =&lt;br /&gt;
Before your data can flow into the live market, the implementation must be certified. To prepare for this process, we provide these testing scenarios.&lt;br /&gt;
* Please refer to:&lt;br /&gt;
** '''[https://engineeringportal.nielsen.com/wiki/File:DCR_Video_-_AGF_Browser_Test_Cases.pdf AGF SDK Test Cases Browser (PDF)]'''&lt;br /&gt;
** '''[https://engineeringportal.nielsen.com/wiki/File:DCR_Video_-_AGF_Apps_Test_Cases.pdf AGF SDK Test Cases Apps (PDF)]'''&lt;br /&gt;
** '''[https://engineeringportal.nielsen.com/wiki/File:06_-_AGF_S2S_test_cases_-_shared_externally.pdf AGF S2S Test Cases App, Browser, OTT (PDF)]'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Note: Tip for Developers: Use the test cases as a hands-on checklist to ensure events like streamstart, interruptions, and streamended are fired and formatted correctly.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please be aware of the expected granularity of the data, that applies to S2S equally as to SDK &amp;amp; CAPI.&lt;br /&gt;
To ensure the accuracy of the measurement, it is crucial to capture the content viewing time every second and send the aggregated data to your backend at least every 10 seconds. This section defines how to accurately handle timestamps and playhead positions during regular playback, interruptions (e.g., pauses), and scrubbing actions.&lt;br /&gt;
&lt;br /&gt;
* Please refer to '''[https://engineeringportal.nielsen.com/wiki/File:05_-_Examples_of_expected_Position_Details_for_video_playback_scenarios_(Play,_Pause,_REW,_FF).pdf Examples of expected Position Details for video playback scenarios (PDF)]'''&lt;br /&gt;
&lt;br /&gt;
= AGF Data Delivery and Mockup Files =&lt;br /&gt;
== Mockup Files and Data Granularity ==&lt;br /&gt;
To allow your data teams to build ingestion pipelines (e.g., ETL processes) in advance and to provide complete clarity on the data granularity (e.g., aggregated summaries vs. event-level data), you will find mockup files here that simulate the final output format.&lt;br /&gt;
&lt;br /&gt;
[Insert Tables from page 2] with mock up files linked in column 3.&lt;br /&gt;
&lt;br /&gt;
== Understanding the Census Data Files ==&lt;br /&gt;
On a daily basis, 7 distinct Census files are delivered. This detailed document explains the exact file structures, versioning logic, how AssetIDs and metadata are processed (including metadata freezing), and how metrics and devices are classified.&lt;br /&gt;
&lt;br /&gt;
* Please refer to '''[https://engineeringportal.nielsen.com/wiki/File:Understanding_the_AGF_Census_Data_Files_allg.pdf Understanding the AGF Census Data Files (PDF)]'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Note: For any further questions regarding the data delivery or the file structures, please reach out to the Nielsen CX-Team.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Census Data Access =&lt;br /&gt;
== Accessing the Daily Data ==&lt;br /&gt;
&lt;br /&gt;
The final daily Census data will be provided to you via an AWS S3 bucket. Here you can find the necessary steps and instructions to set up your access.&lt;br /&gt;
&lt;br /&gt;
* Please refer to '''[https://engineeringportal.nielsen.com/wiki/File:08.3_-_AWS_S3_-_SSH_Authentification_Instructions_(English)_-_shared_externally.pdf Instructions: How to access the daily delivered Data on AWS (PDF)]'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Please note: Only census data is available to publishers. Panel and demographic files are delivered exclusively to AGF and involved service providers for further processing, such as data calibration.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Census Reporting per Publisher =&lt;br /&gt;
&lt;br /&gt;
These files are delivered 24 hours after production.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Data Delivery File (Reporting day 3-3am) !! Aggregation Level  !! Mockup Files &lt;br /&gt;
|-&lt;br /&gt;
| Content by AssetID   || Aggregated by AssetID || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_ContentByAssetIDCensus_PUBLISHER_daily_YYYYMMDD_F5_V0_(.csv_file).pdf SDK_ContentByAssetIDCensus_PUBLISHER_daily_YYYYMMDD_F5_V0 (.pdf)]&lt;br /&gt;
|-&lt;br /&gt;
| Ads by AssetID (Currently not measured for S2S solutions and will be delivered empty)   || Aggregated by AssetID || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_AdsByAssetIDCensus_PUBLISHER_daily_YYYYMMDD_F4_V0_(.csv_file).pdf agf_S2S/SDK_AdsByAssetIDCensus_PUBLISHER_daily_YYYYMMDD_F4_V0 (.pdf)]&lt;br /&gt;
|-&lt;br /&gt;
| Event Level Content Livestream   || Aggregated by StreamID || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_EventLevel_PUBLISHER_daily_YYYYMMDD_F3_V0_(.csv_file).pdf agf_S2S/SDK_EventLevel_PUBLISHER_daily_YYYYMMDD_F3_V0 (.pdf)]&lt;br /&gt;
|-&lt;br /&gt;
| Summary (Content &amp;amp; Ads)   || Aggregated by VCID/Player || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_summarycensus_PUBLISHER_daily_YYYYMMDD_F5_V0_(.csv_file).pdf agf_S2S/SDK_summarycensus_PUBLISHER_daily_YYYYMMDD_F5_V0 (.pdf)]&lt;br /&gt;
|-&lt;br /&gt;
|Outlier Content by AssetID    || Aggregated by AssetID || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_ContentByAssetIDCensusOutlier_PUBLISHER_daily_YYYYMMDD_F3_V0_(.csv_file).pdf agf_S2S/SDK_ContentByAssetIDCensusOutlier_PUBLISHER_daily_YYYYMMDD_F3_V0 (.pdf)]&lt;br /&gt;
|-&lt;br /&gt;
|Outlier Ads by AssetID (Currently not measured for S2S solutions and will be delivered empty)   || Aggregated by AssetID || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_AdsByAssetIDCensusOutlier_PUBLISHER_daily_YYYYMMDD_F3_V0_(.csv_file)_blank.pdf agf_S2S/SDK_AdsByAssetIDCensusOutlier_PUBLISHER_daily_YYYYMMDD_F3_V0 (.pdf)_blank]&lt;br /&gt;
|-&lt;br /&gt;
|Outlier Summary (Content &amp;amp; Ads)    || Aggregated by VCID/ Player || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_summaryoutliercensus_PUBLISHER_daily_YYYYMMDD_F3_V0_(.csv_file).pdf agf_S2S/SDK_summaryoutliercensus_PUBLISHER_daily_YYYYMMDD_F3_V0 (.pdf)]&lt;br /&gt;
|-&lt;br /&gt;
|GfK UAID Match for AGF TV Panel router households    || Instance Level data || [https://engineeringportal.nielsen.com/wiki/File:InstanceData_Census_GfK_UAID_Match_Video_gfkV0_YYYYMMDD_F2_V0_(GfK_Panel_.xml_file).pdf InstanceData_Census_GfK_UAID_Match_Video_gfkV0_YYYYMMDD_F2_V0 (GfK Panel .pdf)]&lt;br /&gt;
|-&lt;br /&gt;
|Panel Data Nielsen Desktop  || Instance Level data || [https://engineeringportal.nielsen.com/wiki/File:InstanceData_DSK_DCR_DE_D_YYYYMMDD_F3_V0_(Nielsen_Panel_.xml_file).pdf InstanceData_DSK_DCR_DE_D_YYYYMMDD_F3_V0 (Nielsen Panel .pdf)]&lt;br /&gt;
|-&lt;br /&gt;
|Panel Data Nielsen Mobile  || Instance Level data || [https://engineeringportal.nielsen.com/wiki/File:InstanceData_MBL_DCR_DE_D_YYYYMMDD_F3_V0_(Nielsen_Panel_.xml_file).pdf InstanceData_MBL_DCR_DE_D_YYYYMMDD_F3_V0 (Nielsen Panel .pdf)]&lt;br /&gt;
|-&lt;br /&gt;
|Demographics Desktop  || Panelist survey data || [https://engineeringportal.nielsen.com/wiki/File:DemographicsData_DSK_DCR_DE_D_YYYYMMDD_F4_V0_(.xml_file)_-_blank.pdf DemographicsData_DSK_DCR_DE_D_YYYYMMDD_F4_V0 (.pdf) - blank]&lt;br /&gt;
|-&lt;br /&gt;
|Demographics Mobile  || Panelist survey data || [https://engineeringportal.nielsen.com/wiki/File:DemographicsData_MBL_DCR_DE_D_YYYYMMDD_F4_V0_(.xml_file)_-_blank.pdf DemographicsData_MBL_DCR_DE_D_YYYYMMDD_F4_V0 (.pdf) - blank]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=AGF_Onboarding_Process_and_general_Information&amp;diff=7248</id>
		<title>AGF Onboarding Process and general Information</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=AGF_Onboarding_Process_and_general_Information&amp;diff=7248"/>
		<updated>2026-11-02T13:48:42Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: text added for *: (Currently not measured for S2S solutions and will be delivered empty in that case)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Metadata and Custom Variables =&lt;br /&gt;
&lt;br /&gt;
To ensure that measured usage is attributed to the correct broadcasts and programs, metadata (such as programname, episodelength) and AGF custom variables must be transmitted. Correctly populating these fields is essential for accurate reporting&lt;br /&gt;
&lt;br /&gt;
* Please refer to '''[[AGF Metadata Convention]]'''.&lt;br /&gt;
&lt;br /&gt;
= AGF Guidelines for Digital Measurement =&lt;br /&gt;
The streaming guidelines define the business rules of the measurement. It clarifies crucial edge cases, such as how to handle fast-forward/rewind actions, ad breaks or live streams.&lt;br /&gt;
&lt;br /&gt;
* Please refer to '''[https://engineeringportal.nielsen.com/wiki/File:04_-_Guidelines_for_Digital_Measurement_(DE_ENG)_-_shared_externally.pdf AGF Guidelines for Digital Measurement (PDF)]'''&lt;br /&gt;
&lt;br /&gt;
= Certification (Test Cases and Examples) =&lt;br /&gt;
Before your data can flow into the live market, the implementation must be certified. To prepare for this process, we provide these testing scenarios.&lt;br /&gt;
* Please refer to:&lt;br /&gt;
** '''[https://engineeringportal.nielsen.com/wiki/File:DCR_Video_-_AGF_Browser_Test_Cases.pdf AGF SDK Test Cases Browser (PDF)]'''&lt;br /&gt;
** '''[https://engineeringportal.nielsen.com/wiki/File:DCR_Video_-_AGF_Apps_Test_Cases.pdf AGF SDK Test Cases Apps (PDF)]'''&lt;br /&gt;
** '''[https://engineeringportal.nielsen.com/wiki/File:06_-_AGF_S2S_test_cases_-_shared_externally.pdf AGF S2S Test Cases App, Browser, OTT (PDF)]'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Note: Tip for Developers: Use the test cases as a hands-on checklist to ensure events like streamstart, interruptions, and streamended are fired and formatted correctly.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please be aware of the expected granularity of the data, that applies to S2S equally as to SDK &amp;amp; CAPI.&lt;br /&gt;
To ensure the accuracy of the measurement, it is crucial to capture the content viewing time every second and send the aggregated data to your backend at least every 10 seconds. This section defines how to accurately handle timestamps and playhead positions during regular playback, interruptions (e.g., pauses), and scrubbing actions.&lt;br /&gt;
&lt;br /&gt;
* Please refer to '''[https://engineeringportal.nielsen.com/wiki/File:05_-_Examples_of_expected_Position_Details_for_video_playback_scenarios_(Play,_Pause,_REW,_FF).pdf Examples of expected Position Details for video playback scenarios (PDF)]'''&lt;br /&gt;
&lt;br /&gt;
= AGF Data Delivery and Mockup Files =&lt;br /&gt;
== Mockup Files &amp;amp; Data Granularity ==&lt;br /&gt;
To allow your data teams to build ingestion pipelines (e.g., ETL processes) in advance and to provide complete clarity on the data granularity (e.g., aggregated summaries vs. event-level data), you will find mockup files here that simulate the final output format.&lt;br /&gt;
&lt;br /&gt;
[Insert Tables from page 2] with mock up files linked in column 3.&lt;br /&gt;
&lt;br /&gt;
== Understanding the Census Data Files ==&lt;br /&gt;
On a daily basis, 7 distinct Census files are delivered. This detailed document explains the exact file structures, versioning logic, how AssetIDs and metadata are processed (including metadata freezing), and how metrics and devices are classified.&lt;br /&gt;
&lt;br /&gt;
* Please refer to '''[https://engineeringportal.nielsen.com/wiki/File:Understanding_the_AGF_Census_Data_Files_allg.pdf Understanding the AGF Census Data Files (PDF)]'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Note: For any further questions regarding the data delivery or the file structures, please reach out to the Nielsen CX-Team.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Census Data Access =&lt;br /&gt;
== Accessing the Daily Data ==&lt;br /&gt;
&lt;br /&gt;
The final daily Census data will be provided to you via an AWS S3 bucket. Here you can find the necessary steps and instructions to set up your access.&lt;br /&gt;
&lt;br /&gt;
* Please refer to '''[https://engineeringportal.nielsen.com/wiki/File:08.3_-_AWS_S3_-_SSH_Authentification_Instructions_(English)_-_shared_externally.pdf Instructions: How to access the daily delivered Data on AWS (PDF)]'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Please note: Only census data is available to publishers. Panel and demographic files are delivered exclusively to AGF and involved service providers for further processing, such as data calibration.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Census Reporting per Publisher =&lt;br /&gt;
&lt;br /&gt;
These files are delivered 24 hours after production.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Data Delivery File (Reporting day 3-3am) !! Aggregation Level  !! Mockup Files &lt;br /&gt;
|-&lt;br /&gt;
| Content by AssetID   || Aggregated by AssetID || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_ContentByAssetIDCensus_PUBLISHER_daily_YYYYMMDD_F5_V0_(.csv_file).pdf SDK_ContentByAssetIDCensus_PUBLISHER_daily_YYYYMMDD_F5_V0 (.pdf)]&lt;br /&gt;
|-&lt;br /&gt;
| Ads by AssetID (Currently not measured for S2S solutions and will be delivered empty)   || Aggregated by AssetID || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_AdsByAssetIDCensus_PUBLISHER_daily_YYYYMMDD_F4_V0_(.csv_file).pdf agf_S2S/SDK_AdsByAssetIDCensus_PUBLISHER_daily_YYYYMMDD_F4_V0 (.pdf)]&lt;br /&gt;
|-&lt;br /&gt;
| Event Level Content Livestream   || Aggregated by StreamID || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_EventLevel_PUBLISHER_daily_YYYYMMDD_F3_V0_(.csv_file).pdf agf_S2S/SDK_EventLevel_PUBLISHER_daily_YYYYMMDD_F3_V0 (.pdf)]&lt;br /&gt;
|-&lt;br /&gt;
| Summary (Content &amp;amp; Ads)   || Aggregated by VCID/Player || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_summarycensus_PUBLISHER_daily_YYYYMMDD_F5_V0_(.csv_file).pdf agf_S2S/SDK_summarycensus_PUBLISHER_daily_YYYYMMDD_F5_V0 (.pdf)]&lt;br /&gt;
|-&lt;br /&gt;
|Outlier Content by AssetID    || Aggregated by AssetID || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_ContentByAssetIDCensusOutlier_PUBLISHER_daily_YYYYMMDD_F3_V0_(.csv_file).pdf agf_S2S/SDK_ContentByAssetIDCensusOutlier_PUBLISHER_daily_YYYYMMDD_F3_V0 (.pdf)]&lt;br /&gt;
|-&lt;br /&gt;
|Outlier Ads by AssetID (Currently not measured for S2S solutions and will be delivered empty)   || Aggregated by AssetID || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_AdsByAssetIDCensusOutlier_PUBLISHER_daily_YYYYMMDD_F3_V0_(.csv_file)_blank.pdf agf_S2S/SDK_AdsByAssetIDCensusOutlier_PUBLISHER_daily_YYYYMMDD_F3_V0 (.pdf)_blank]&lt;br /&gt;
|-&lt;br /&gt;
|Outlier Summary (Content &amp;amp; Ads)    || Aggregated by VCID/ Player || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_summaryoutliercensus_PUBLISHER_daily_YYYYMMDD_F3_V0_(.csv_file).pdf agf_S2S/SDK_summaryoutliercensus_PUBLISHER_daily_YYYYMMDD_F3_V0 (.pdf)]&lt;br /&gt;
|-&lt;br /&gt;
|GfK UAID Match for AGF TV Panel router households    || Instance Level data || [https://engineeringportal.nielsen.com/wiki/File:InstanceData_Census_GfK_UAID_Match_Video_gfkV0_YYYYMMDD_F2_V0_(GfK_Panel_.xml_file).pdf InstanceData_Census_GfK_UAID_Match_Video_gfkV0_YYYYMMDD_F2_V0 (GfK Panel .pdf)]&lt;br /&gt;
|-&lt;br /&gt;
|Panel Data Nielsen Desktop  || Instance Level data || [https://engineeringportal.nielsen.com/wiki/File:InstanceData_DSK_DCR_DE_D_YYYYMMDD_F3_V0_(Nielsen_Panel_.xml_file).pdf InstanceData_DSK_DCR_DE_D_YYYYMMDD_F3_V0 (Nielsen Panel .pdf)]&lt;br /&gt;
|-&lt;br /&gt;
|Panel Data Nielsen Mobile  || Instance Level data || [https://engineeringportal.nielsen.com/wiki/File:InstanceData_MBL_DCR_DE_D_YYYYMMDD_F3_V0_(Nielsen_Panel_.xml_file).pdf InstanceData_MBL_DCR_DE_D_YYYYMMDD_F3_V0 (Nielsen Panel .pdf)]&lt;br /&gt;
|-&lt;br /&gt;
|Demographics Desktop  || Panelist survey data || [https://engineeringportal.nielsen.com/wiki/File:DemographicsData_DSK_DCR_DE_D_YYYYMMDD_F4_V0_(.xml_file)_-_blank.pdf DemographicsData_DSK_DCR_DE_D_YYYYMMDD_F4_V0 (.pdf) - blank]&lt;br /&gt;
|-&lt;br /&gt;
|Demographics Mobile  || Panelist survey data || [https://engineeringportal.nielsen.com/wiki/File:DemographicsData_MBL_DCR_DE_D_YYYYMMDD_F4_V0_(.xml_file)_-_blank.pdf DemographicsData_MBL_DCR_DE_D_YYYYMMDD_F4_V0 (.pdf) - blank]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=AGF_Onboarding_Process_and_general_Information&amp;diff=7247</id>
		<title>AGF Onboarding Process and general Information</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=AGF_Onboarding_Process_and_general_Information&amp;diff=7247"/>
		<updated>2026-11-02T09:40:37Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: first draft 02-11-2026 - to be reviewed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Metadata and Custom Variables =&lt;br /&gt;
&lt;br /&gt;
To ensure that measured usage is attributed to the correct broadcasts and programs, metadata (such as programname, episodelength) and AGF custom variables must be transmitted. Correctly populating these fields is essential for accurate reporting&lt;br /&gt;
&lt;br /&gt;
* Please refer to '''[[AGF Metadata Convention]]'''.&lt;br /&gt;
&lt;br /&gt;
= AGF Guidelines for Digital Measurement =&lt;br /&gt;
The streaming guidelines define the business rules of the measurement. It clarifies crucial edge cases, such as how to handle fast-forward/rewind actions, ad breaks or live streams.&lt;br /&gt;
&lt;br /&gt;
* Please refer to '''[https://engineeringportal.nielsen.com/wiki/File:04_-_Guidelines_for_Digital_Measurement_(DE_ENG)_-_shared_externally.pdf AGF Guidelines for Digital Measurement (PDF)]'''&lt;br /&gt;
&lt;br /&gt;
= Certification (Test Cases and Examples) =&lt;br /&gt;
Before your data can flow into the live market, the implementation must be certified. To prepare for this process, we provide these testing scenarios.&lt;br /&gt;
* Please refer to:&lt;br /&gt;
** '''[https://engineeringportal.nielsen.com/wiki/File:DCR_Video_-_AGF_Browser_Test_Cases.pdf AGF SDK Test Cases Browser (PDF)]'''&lt;br /&gt;
** '''[https://engineeringportal.nielsen.com/wiki/File:DCR_Video_-_AGF_Apps_Test_Cases.pdf AGF SDK Test Cases Apps (PDF)]'''&lt;br /&gt;
** '''[https://engineeringportal.nielsen.com/wiki/File:06_-_AGF_S2S_test_cases_-_shared_externally.pdf AGF S2S Test Cases App, Browser, OTT (PDF)]'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Note: Tip for Developers: Use the test cases as a hands-on checklist to ensure events like streamstart, interruptions, and streamended are fired and formatted correctly.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please be aware of the expected granularity of the data, that applies to S2S equally as to SDK &amp;amp; CAPI.&lt;br /&gt;
To ensure the accuracy of the measurement, it is crucial to capture the content viewing time every second and send the aggregated data to your backend at least every 10 seconds. This section defines how to accurately handle timestamps and playhead positions during regular playback, interruptions (e.g., pauses), and scrubbing actions.&lt;br /&gt;
&lt;br /&gt;
* Please refer to '''[https://engineeringportal.nielsen.com/wiki/File:05_-_Examples_of_expected_Position_Details_for_video_playback_scenarios_(Play,_Pause,_REW,_FF).pdf Examples of expected Position Details for video playback scenarios (PDF)]'''&lt;br /&gt;
&lt;br /&gt;
= AGF Data Delivery and Mockup Files =&lt;br /&gt;
== Mockup Files &amp;amp; Data Granularity ==&lt;br /&gt;
To allow your data teams to build ingestion pipelines (e.g., ETL processes) in advance and to provide complete clarity on the data granularity (e.g., aggregated summaries vs. event-level data), you will find mockup files here that simulate the final output format.&lt;br /&gt;
&lt;br /&gt;
[Insert Tables from page 2] with mock up files linked in column 3.&lt;br /&gt;
&lt;br /&gt;
== Understanding the Census Data Files ==&lt;br /&gt;
On a daily basis, 7 distinct Census files are delivered. This detailed document explains the exact file structures, versioning logic, how AssetIDs and metadata are processed (including metadata freezing), and how metrics and devices are classified.&lt;br /&gt;
&lt;br /&gt;
* Please refer to '''[https://engineeringportal.nielsen.com/wiki/File:Understanding_the_AGF_Census_Data_Files_allg.pdf Understanding the AGF Census Data Files (PDF)]'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Note: For any further questions regarding the data delivery or the file structures, please reach out to the Nielsen CX-Team.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Census Data Access =&lt;br /&gt;
== Accessing the Daily Data ==&lt;br /&gt;
&lt;br /&gt;
The final daily Census data will be provided to you via an AWS S3 bucket. Here you can find the necessary steps and instructions to set up your access.&lt;br /&gt;
&lt;br /&gt;
* Please refer to '''[https://engineeringportal.nielsen.com/wiki/File:08.3_-_AWS_S3_-_SSH_Authentification_Instructions_(English)_-_shared_externally.pdf Instructions: How to access the daily delivered Data on AWS (PDF)]'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Please note: Only census data is available to publishers. Panel and demographic files are delivered exclusively to AGF and involved service providers for further processing, such as data calibration.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Census Reporting per Publisher =&lt;br /&gt;
&lt;br /&gt;
These files are delivered 24 hours after production.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Data Delivery File (Reporting day 3-3am) !! Aggregation Level  !! Mockup Files &lt;br /&gt;
|-&lt;br /&gt;
| Content by AssetID   || Aggregated by AssetID || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_ContentByAssetIDCensus_PUBLISHER_daily_YYYYMMDD_F5_V0_(.csv_file).pdf SDK_ContentByAssetIDCensus_PUBLISHER_daily_YYYYMMDD_F5_V0 (.pdf)]&lt;br /&gt;
|-&lt;br /&gt;
| Ads by AssetID*   || Aggregated by AssetID || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_AdsByAssetIDCensus_PUBLISHER_daily_YYYYMMDD_F4_V0_(.csv_file).pdf agf_S2S/SDK_AdsByAssetIDCensus_PUBLISHER_daily_YYYYMMDD_F4_V0 (.pdf)]&lt;br /&gt;
|-&lt;br /&gt;
| Event Level Content Livestream   || Aggregated by StreamID || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_EventLevel_PUBLISHER_daily_YYYYMMDD_F3_V0_(.csv_file).pdf agf_S2S/SDK_EventLevel_PUBLISHER_daily_YYYYMMDD_F3_V0 (.pdf)]&lt;br /&gt;
|-&lt;br /&gt;
| Summary (Content &amp;amp; Ads)   || Aggregated by VCID/Player || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_summarycensus_PUBLISHER_daily_YYYYMMDD_F5_V0_(.csv_file).pdf agf_S2S/SDK_summarycensus_PUBLISHER_daily_YYYYMMDD_F5_V0 (.pdf)]&lt;br /&gt;
|-&lt;br /&gt;
|Outlier Content by AssetID    || Aggregated by AssetID || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_ContentByAssetIDCensusOutlier_PUBLISHER_daily_YYYYMMDD_F3_V0_(.csv_file).pdf agf_S2S/SDK_ContentByAssetIDCensusOutlier_PUBLISHER_daily_YYYYMMDD_F3_V0 (.pdf)]&lt;br /&gt;
|-&lt;br /&gt;
|Outlier Ads by AssetID*    || Aggregated by AssetID || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_AdsByAssetIDCensusOutlier_PUBLISHER_daily_YYYYMMDD_F3_V0_(.csv_file)_blank.pdf agf_S2S/SDK_AdsByAssetIDCensusOutlier_PUBLISHER_daily_YYYYMMDD_F3_V0 (.pdf)_blank]&lt;br /&gt;
|-&lt;br /&gt;
|Outlier Summary (Content &amp;amp; Ads)    || Aggregated by VCID/ Player || [https://engineeringportal.nielsen.com/wiki/File:agf_S2S_SDK_summaryoutliercensus_PUBLISHER_daily_YYYYMMDD_F3_V0_(.csv_file).pdf agf_S2S/SDK_summaryoutliercensus_PUBLISHER_daily_YYYYMMDD_F3_V0 (.pdf)]&lt;br /&gt;
|-&lt;br /&gt;
|GfK UAID Match for AGF TV Panel router households    || Instance Level data || [https://engineeringportal.nielsen.com/wiki/File:InstanceData_Census_GfK_UAID_Match_Video_gfkV0_YYYYMMDD_F2_V0_(GfK_Panel_.xml_file).pdf InstanceData_Census_GfK_UAID_Match_Video_gfkV0_YYYYMMDD_F2_V0 (GfK Panel .pdf)]&lt;br /&gt;
|-&lt;br /&gt;
|Panel Data Nielsen Desktop  || Instance Level data || [https://engineeringportal.nielsen.com/wiki/File:InstanceData_DSK_DCR_DE_D_YYYYMMDD_F3_V0_(Nielsen_Panel_.xml_file).pdf InstanceData_DSK_DCR_DE_D_YYYYMMDD_F3_V0 (Nielsen Panel .pdf)]&lt;br /&gt;
|-&lt;br /&gt;
|Panel Data Nielsen Mobile  || Instance Level data || [https://engineeringportal.nielsen.com/wiki/File:InstanceData_MBL_DCR_DE_D_YYYYMMDD_F3_V0_(Nielsen_Panel_.xml_file).pdf InstanceData_MBL_DCR_DE_D_YYYYMMDD_F3_V0 (Nielsen Panel .pdf)]&lt;br /&gt;
|-&lt;br /&gt;
|Demographics Desktop  || Panelist survey data || [https://engineeringportal.nielsen.com/wiki/File:DemographicsData_DSK_DCR_DE_D_YYYYMMDD_F4_V0_(.xml_file)_-_blank.pdf DemographicsData_DSK_DCR_DE_D_YYYYMMDD_F4_V0 (.pdf) - blank]&lt;br /&gt;
|-&lt;br /&gt;
|Demographics Mobile  || Panelist survey data || [https://engineeringportal.nielsen.com/wiki/File:DemographicsData_MBL_DCR_DE_D_YYYYMMDD_F4_V0_(.xml_file)_-_blank.pdf DemographicsData_MBL_DCR_DE_D_YYYYMMDD_F4_V0 (.pdf) - blank]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=AGF_Implementation_Documentation&amp;diff=7246</id>
		<title>AGF Implementation Documentation</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=AGF_Implementation_Documentation&amp;diff=7246"/>
		<updated>2026-10-30T11:36:54Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: draf of the new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
{{CategoryIcon|DCR.png|AGF Documentation &amp;amp; Downloads}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The following guides are specific for AGF.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Video Measurement&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; style=&amp;quot;background-color:white;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; style=&amp;quot;text-align: center;&amp;quot; |'''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement and Guidelines]]'''&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 90px;&amp;quot; | AGF&lt;br /&gt;
! style=&amp;quot;width: 90px;&amp;quot; |&lt;br /&gt;
! style=&amp;quot;width: 45px;&amp;quot; |&lt;br /&gt;
! style=&amp;quot;width: 45px;&amp;quot; | OS&lt;br /&gt;
!| Guide&lt;br /&gt;
!| Download&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot; | {{SmallIcon|DEFlagIcon.png}}&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | {{SmallIcon|SDKIcon.png}}&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot; | {{OSIcon|VideoIcon.png}}&lt;br /&gt;
| {{OSIcon|macOSIcon.png}}&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | '''[[DCR Germany Video App SDK]]'''&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |'''[[Special:Downloads|Download - NO ID AppSDK]]'''&lt;br /&gt;
|-&lt;br /&gt;
|{{OSIcon|AndroidIcon.png}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | {{OSIcon|BrowserIcon.png}}&lt;br /&gt;
| '''[[DCR Germany Video Browser SDK]]'''&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| '''[[DCR Germany Domless SDK]]'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a DOM-less SDK Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |{{SmallIcon|CloudAPIIcon.png}}&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |{{OSIcon|APIIcon.png}}&lt;br /&gt;
| '''[[DCR Germany Video Cloud API]]'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a Cloud API Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''[[DCR Germany Video S2S]]'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Static Measurement&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; style=&amp;quot;background-color:white;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; style=&amp;quot;text-align: center;&amp;quot; |'''[[AGF Metadata Convention#Static Measurement|AGF Metadata Convention for Static Measurement]]'''&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 90px;&amp;quot; | AGF&lt;br /&gt;
! style=&amp;quot;width: 90px;&amp;quot; |&lt;br /&gt;
! style=&amp;quot;width: 45px;&amp;quot; | &lt;br /&gt;
! style=&amp;quot;width: 45px;&amp;quot; | OS&lt;br /&gt;
!| Guide&lt;br /&gt;
!| Download&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | {{SmallIcon|DEFlagIcon.png}}&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | {{SmallIcon|SDKIcon.png}}&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | {{OSIcon|StaticIcon.png}}&lt;br /&gt;
| {{OSIcon|macOSIcon.png}} &lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | '''[[DCR Germany Static App SDK]]''' &amp;lt;br&amp;gt; '''[[DCR Germany Static Hybrid App SDK]]'''&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |'''[[Special:Downloads|Download - NO ID AppSDK]]'''&lt;br /&gt;
|-&lt;br /&gt;
|{{OSIcon|AndroidIcon.png}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; |{{OSIcon|BrowserIcon.png}}&lt;br /&gt;
| '''[[DCR Germany Static Browser SDK]]'''&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| '''[[DCR Germany Static Google Tag Manager]]'''&lt;br /&gt;
|-&lt;br /&gt;
| {{SmallIcon|CloudAPIIcon.png}}&lt;br /&gt;
| '''[[DCR Germany Static Google AMP Cloud API]]'''&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;AGF Onboarding Process and general Information&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;1&amp;quot; style=&amp;quot;background-color:white;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; style=&amp;quot;text-align: center;&amp;quot; |'''[[AGF Onboarding Process and general Information]]'''&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=AGF_Onboarding_Process_and_general_Information&amp;diff=7245</id>
		<title>AGF Onboarding Process and general Information</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=AGF_Onboarding_Process_and_general_Information&amp;diff=7245"/>
		<updated>2026-10-30T11:34:12Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TBD&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=AGF_Implementation_Documentation&amp;diff=7244</id>
		<title>AGF Implementation Documentation</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=AGF_Implementation_Documentation&amp;diff=7244"/>
		<updated>2026-10-30T11:23:06Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: update from Prod page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
{{CategoryIcon|DCR.png|AGF Documentation &amp;amp; Downloads}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The following guides are specific for AGF.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Video Measurement&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; style=&amp;quot;background-color:white;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; style=&amp;quot;text-align: center;&amp;quot; |'''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement and Guidelines]]'''&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 90px;&amp;quot; | AGF&lt;br /&gt;
! style=&amp;quot;width: 90px;&amp;quot; |&lt;br /&gt;
! style=&amp;quot;width: 45px;&amp;quot; |&lt;br /&gt;
! style=&amp;quot;width: 45px;&amp;quot; | OS&lt;br /&gt;
!| Guide&lt;br /&gt;
!| Download&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot; | {{SmallIcon|DEFlagIcon.png}}&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | {{SmallIcon|SDKIcon.png}}&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot; | {{OSIcon|VideoIcon.png}}&lt;br /&gt;
| {{OSIcon|macOSIcon.png}}&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | '''[[DCR Germany Video App SDK]]'''&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |'''[[Special:Downloads|Download - NO ID AppSDK]]'''&lt;br /&gt;
|-&lt;br /&gt;
|{{OSIcon|AndroidIcon.png}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | {{OSIcon|BrowserIcon.png}}&lt;br /&gt;
| '''[[DCR Germany Video Browser SDK]]'''&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| '''[[DCR Germany Domless SDK]]'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a DOM-less SDK Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |{{SmallIcon|CloudAPIIcon.png}}&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |{{OSIcon|APIIcon.png}}&lt;br /&gt;
| '''[[DCR Germany Video Cloud API]]'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a Cloud API Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''[[DCR Germany Video S2S]]'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Static Measurement&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; style=&amp;quot;background-color:white;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; style=&amp;quot;text-align: center;&amp;quot; |'''[[AGF Metadata Convention#Static Measurement|AGF Metadata Convention for Static Measurement]]'''&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 90px;&amp;quot; | AGF&lt;br /&gt;
! style=&amp;quot;width: 90px;&amp;quot; |&lt;br /&gt;
! style=&amp;quot;width: 45px;&amp;quot; | &lt;br /&gt;
! style=&amp;quot;width: 45px;&amp;quot; | OS&lt;br /&gt;
!| Guide&lt;br /&gt;
!| Download&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | {{SmallIcon|DEFlagIcon.png}}&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | {{SmallIcon|SDKIcon.png}}&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | {{OSIcon|StaticIcon.png}}&lt;br /&gt;
| {{OSIcon|macOSIcon.png}} &lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | '''[[DCR Germany Static App SDK]]''' &amp;lt;br&amp;gt; '''[[DCR Germany Static Hybrid App SDK]]'''&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |'''[[Special:Downloads|Download - NO ID AppSDK]]'''&lt;br /&gt;
|-&lt;br /&gt;
|{{OSIcon|AndroidIcon.png}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; |{{OSIcon|BrowserIcon.png}}&lt;br /&gt;
| '''[[DCR Germany Static Browser SDK]]'''&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| '''[[DCR Germany Static Google Tag Manager]]'''&lt;br /&gt;
|-&lt;br /&gt;
| {{SmallIcon|CloudAPIIcon.png}}&lt;br /&gt;
| '''[[DCR Germany Static Google AMP Cloud API]]'''&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7241</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7241"/>
		<updated>2026-09-29T09:57:37Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: Updated on ... added at the top&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&lt;br /&gt;
'''Updated on September 29, 2026'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Option 1: Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Option 2: Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
'''The first hour of the day''' used in the following description of the optimization refers to '''03:00:00 AM to 03:59:59 AM German local time''' (01:00:00 AM to 01:59:59 AM UTC during daylight saving time; 02:00:00 AM to 02:59:59 AM UTC during standard time).&lt;br /&gt;
&lt;br /&gt;
====Option 1: Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day and it will be referenced in the manifest file for the following 23 hours of the day. &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 02:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Option 2: Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
* The metadata reported in the AGF measurement data for a given assetid (including episode title, duration, and custom variables nol_c0–nol_c19) is locked in by the first video request of the day and its corresponding hourly metadata file. Subsequent metadata changes during the day will be ignored.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
'''Use only if the asset metadata file optimization is not used and is delivered per platform with this subbrand value'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF.  &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset. Must match streamid in Audit Ping. || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Use only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience usage, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers.&lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and will be excluded from AGF's reach measurement.'''&lt;br /&gt;
** '''Audit Ping Specific Requirements for Android platform should be implemented'''&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends (either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Data quality for long-duration video measurement ===&lt;br /&gt;
&lt;br /&gt;
The Audit ping is used to enrich the S2S measurement data with device details and country which are mandatory for the measurement data delivered to AGF. If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and will be excluded from AGF's reach measurement.&lt;br /&gt;
&lt;br /&gt;
'''In order to maximize the data quality for long-duration video measurement, an additional start audit ping (“Startstream = 1”) should be sent every 3 hours''' in addition to the 2 standard pings (start audit ping (“Startstream = 1” and end audit ping (“Endstream = 3”))). An example audit ping call sequence will then look as follows:&lt;br /&gt;
* user starts a video playback at x hour : start audit ping (“Startstream = 1”)&lt;br /&gt;
* user continues to watch this video at x+3 hour : start audit ping (“Startstream = 1”)&lt;br /&gt;
* user continues to watch this video at x+6 hour : start audit ping (“Startstream = 1”) &lt;br /&gt;
* user ends the video playback at x+7 hour : end audit ping (“Endstream = 3”)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback is interrupted for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping (“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID)|| || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Audit Ping Specific Requirements for Android platform ===&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;It is crucial that the Audit Ping redirect is enabled in each Android App participating in the AGF S2S Measurement.&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Ensure that the get Request is executed with the followRedirect flag set to TRUE.'''&lt;br /&gt;
This enablement is typically done by setting the followRedirects() Flag to TRUE, see typical Android implementation examples below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
&lt;br /&gt;
*'''OkHttp:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
.followRedirects(true);&lt;br /&gt;
.followSslRedirects(true);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Native httpUrl:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
.setFollowRedirects(true);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7240</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7240"/>
		<updated>2026-09-18T12:09:26Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Option 1: Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Option 2: Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
'''The first hour of the day''' used in the following description of the optimization refers to '''03:00:00 AM to 03:59:59 AM German local time''' (01:00:00 AM to 01:59:59 AM UTC during daylight saving time; 02:00:00 AM to 02:59:59 AM UTC during standard time).&lt;br /&gt;
&lt;br /&gt;
====Option 1: Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day and it will be referenced in the manifest file for the following 23 hours of the day. &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 02:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Option 2: Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
* The metadata reported in the AGF measurement data for a given assetid (including episode title, duration, and custom variables nol_c0–nol_c19) is locked in by the first video request of the day and its corresponding hourly metadata file. Subsequent metadata changes during the day will be ignored.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
'''Use only if the asset metadata file optimization is not used and is delivered per platform with this subbrand value'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF.  &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset. Must match streamid in Audit Ping. || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Use only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience usage, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers.&lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and will be excluded from AGF's reach measurement.'''&lt;br /&gt;
** '''Audit Ping Specific Requirements for Android platform should be implemented'''&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends (either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Data quality for long-duration video measurement ===&lt;br /&gt;
&lt;br /&gt;
The Audit ping is used to enrich the S2S measurement data with device details and country which are mandatory for the measurement data delivered to AGF. If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and will be excluded from AGF's reach measurement.&lt;br /&gt;
&lt;br /&gt;
'''In order to maximize the data quality for long-duration video measurement, an additional start audit ping (“Startstream = 1”) should be sent every 3 hours''' in addition to the 2 standard pings (start audit ping (“Startstream = 1” and end audit ping (“Endstream = 3”))). An example audit ping call sequence will then look as follows:&lt;br /&gt;
* user starts a video playback at x hour : start audit ping (“Startstream = 1”)&lt;br /&gt;
* user continues to watch this video at x+3 hour : start audit ping (“Startstream = 1”)&lt;br /&gt;
* user continues to watch this video at x+6 hour : start audit ping (“Startstream = 1”) &lt;br /&gt;
* user ends the video playback at x+7 hour : end audit ping (“Endstream = 3”)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback is interrupted for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping (“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID)|| || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Audit Ping Specific Requirements for Android platform ===&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;It is crucial that the Audit Ping redirect is enabled in each Android App participating in the AGF S2S Measurement.&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Ensure that the get Request is executed with the followRedirect flag set to TRUE.'''&lt;br /&gt;
This enablement is typically done by setting the followRedirects() Flag to TRUE, see typical Android implementation examples below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
&lt;br /&gt;
*'''OkHttp:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
.followRedirects(true);&lt;br /&gt;
.followSslRedirects(true);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Native httpUrl:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
.setFollowRedirects(true);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7239</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7239"/>
		<updated>2026-09-18T12:05:45Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Option 1: Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Option 2: Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
'''The first hour of the day''' used in the following description of the optimization refers to '''03:00:00 AM to 03:59:59 AM German local time''' (01:00:00 AM to 01:59:59 AM UTC during daylight saving time; 02:00:00 AM to 02:59:59 AM UTC during standard time).&lt;br /&gt;
&lt;br /&gt;
====Option 1: Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day and it will be referenced in the manifest file for the following 23 hours of the day. &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 02:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Option 2: Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
* The metadata reported in the AGF measurement data for a given assetid (including episode title, duration, and custom variables nol_c0–nol_c19) is locked in by the first video request of the day and its corresponding hourly metadata file. Subsequent metadata changes during the day will be ignored.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
'''Use only if the asset metadata file optimization is not used and is delivered per platform with this subbrand value'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF.  &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset. Must match streamid in Audit Ping. || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Use only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience usage, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers.&lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and will be excluded from AGF's reach measurement.'''&lt;br /&gt;
** Audit Ping Specific Requirements for Android platform should be implemented&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends (either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Data quality for long-duration video measurement ===&lt;br /&gt;
&lt;br /&gt;
The Audit ping is used to enrich the S2S measurement data with device details and country which are mandatory for the measurement data delivered to AGF. If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and will be excluded from AGF's reach measurement.&lt;br /&gt;
&lt;br /&gt;
'''In order to maximize the data quality for long-duration video measurement, an additional start audit ping (“Startstream = 1”) should be sent every 3 hours''' in addition to the 2 standard pings (start audit ping (“Startstream = 1” and end audit ping (“Endstream = 3”))). An example audit ping call sequence will then look as follows:&lt;br /&gt;
* user starts a video playback at x hour : start audit ping (“Startstream = 1”)&lt;br /&gt;
* user continues to watch this video at x+3 hour : start audit ping (“Startstream = 1”)&lt;br /&gt;
* user continues to watch this video at x+6 hour : start audit ping (“Startstream = 1”) &lt;br /&gt;
* user ends the video playback at x+7 hour : end audit ping (“Endstream = 3”)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback is interrupted for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping (“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID)|| || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Audit Ping Specific Requirements for Android platform ===&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;It is crucial that the Audit Ping redirect is enabled in each Android App participating in the AGF S2S Measurement.&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Ensure that the get Request is executed with the followRedirect flag set to TRUE.'''&lt;br /&gt;
This enablement is typically done by setting the followRedirects() Flag to TRUE, see typical Android implementation examples below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
&lt;br /&gt;
*'''OkHttp:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
.followRedirects(true);&lt;br /&gt;
.followSslRedirects(true);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Native httpUrl:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
.setFollowRedirects(true);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7233</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7233"/>
		<updated>2026-08-20T08:17:41Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: new section added &amp;quot;Data quality for long-duration video measurement&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Option 1: Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Option 2: Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
'''The first hour of the day''' used in the following description of the optimization refers to '''03:00:00 AM to 03:59:59 AM German local time''' (01:00:00 AM to 01:59:59 AM UTC during daylight saving time; 02:00:00 AM to 02:59:59 AM UTC during standard time).&lt;br /&gt;
&lt;br /&gt;
====Option 1: Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day and it will be referenced in the manifest file for the following 23 hours of the day. &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 02:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Option 2: Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
* The metadata reported in the AGF measurement data for a given assetid (including episode title, duration, and custom variables nol_c0–nol_c19) is locked in by the first video request of the day and its corresponding hourly metadata file. Subsequent metadata changes during the day will be ignored.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
'''Use only if the asset metadata file optimization is not used and is delivered per platform with this subbrand value'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF.  &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset. Must match streamid in Audit Ping. || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Use only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience usage, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers.&lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and will be excluded from AGF's reach measurement.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends (either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Data quality for long-duration video measurement ===&lt;br /&gt;
&lt;br /&gt;
The Audit ping is used to enrich the S2S measurement data with device details and country which are mandatory for the measurement data delivered to AGF. If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and will be excluded from AGF's reach measurement.&lt;br /&gt;
&lt;br /&gt;
'''In order to maximize the data quality for long-duration video measurement, an additional start audit ping (“Startstream = 1”) should be sent every 3 hours''' in addition to the 2 standard pings (start audit ping (“Startstream = 1” and end audit ping (“Endstream = 3”))). An example audit ping call sequence will then look as follows:&lt;br /&gt;
* user starts a video playback at x hour : start audit ping (“Startstream = 1”)&lt;br /&gt;
* user continues to watch this video at x+3 hour : start audit ping (“Startstream = 1”)&lt;br /&gt;
* user continues to watch this video at x+6 hour : start audit ping (“Startstream = 1”) &lt;br /&gt;
* user ends the video playback at x+7 hour : end audit ping (“Endstream = 3”)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback is interrupted for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping (“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID)|| || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7225</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7225"/>
		<updated>2026-07-22T15:29:15Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Option 1: Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Option 2: Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
'''The first hour of the day''' used in the following description of the optimization refers to '''03:00:00 AM to 03:59:59 AM German local time''' (01:00:00 AM to 01:59:59 AM UTC during daylight saving time; 02:00:00 AM to 02:59:59 AM UTC during standard time).&lt;br /&gt;
&lt;br /&gt;
====Option 1: Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day and it will be referenced in the manifest file for the following 23 hours of the day. &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 02:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Option 2: Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
* The metadata reported in the AGF measurement data for a given assetid (including episode title, duration, and custom variables nol_c0–nol_c19) is locked in by the first video request of the day and its corresponding hourly metadata file. Subsequent metadata changes during the day will be ignored.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
'''Use only if the asset metadata file optimization is not used and is delivered per platform with this subbrand value'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF.  &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset. Must match streamid in Audit Ping. || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Use only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience usage, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers.&lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and will be excluded from AGF's reach measurement.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends (either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback is interrupted for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping (“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID)|| || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7224</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7224"/>
		<updated>2026-07-21T07:52:56Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* query param list */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Option 1: Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Option 2: Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
'''The first hour of the day''' used in the following description of the optimization refers to '''03:00:00 AM to 03:59:59 AM German local time''' (01:00:00 AM to 01:59:59 AM UTC during daylight saving time; 02:00:00 AM to 02:59:59 AM UTC during standard time).&lt;br /&gt;
&lt;br /&gt;
====Option 1: Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day and it will be referenced in the manifest file for the following 23 hours of the day. &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 02:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Option 2: Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
* The metadata reported in the AGF measurement data for a given assetid (including episode title, duration, and custom variables nol_c0–nol_c19) is locked in by the first video request of the day and its corresponding hourly metadata file. Subsequent metadata changes during the day will be ignored.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
'''Use only if the asset metadata file optimization is not used and is delivered per platform with this subbrand value'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF.  &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Use only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience usage, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers.&lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and will be excluded from AGF's reach measurement.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends (either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback is interrupted for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping (“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID)|| || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7223</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7223"/>
		<updated>2026-07-21T07:16:58Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Option 1: Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Option 2: Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
'''The first hour of the day''' used in the following description of the optimization refers to '''03:00:00 AM to 03:59:59 AM German local time''' (01:00:00 AM to 01:59:59 AM UTC during daylight saving time; 02:00:00 AM to 02:59:59 AM UTC during standard time).&lt;br /&gt;
&lt;br /&gt;
====Option 1: Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day and it will be referenced in the manifest file for the following 23 hours of the day. &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 02:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Option 2: Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
* The metadata reported in the AGF measurement data for a given assetid (including episode title, duration, and custom variables nol_c0–nol_c19) is locked in by the first video request of the day and its corresponding hourly metadata file. Subsequent metadata changes during the day will be ignored.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
'''Use only if the asset metadata file optimization is not used and is delivered per platform with this subbrand value'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF.  &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Use only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience usage, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers.&lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and will be excluded from AGF's reach measurement.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends (either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback is interrupted for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping (“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7222</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7222"/>
		<updated>2026-07-20T16:33:51Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Option 1: Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Option 2: Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
'''The first hour of the day''' used in the following description of the optimization refers to '''03:00:00 AM to 03:59:59 AM German local time''' (01:00:00 AM to 01:59:59 AM UTC during daylight saving time; 02:00:00 AM to 02:59:59 AM UTC during standard time).&lt;br /&gt;
&lt;br /&gt;
====Option 1: Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day and it will be referenced in the manifest file for the following 23 hours of the day. &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 02:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Option 2: Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
* The metadata reported in the AGF measurement data for a given assetid (including episode title, duration, and custom variables nol_c0–nol_c19) is locked in by the first video request of the day and its corresponding hourly metadata file. Subsequent metadata changes during the day will be ignored.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
'''Use only if the asset metadata file optimization is not used and is delivered per platform with this subbrand value'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF.  &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Use only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience usage, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers.&lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends (either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback is interrupted for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping (“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7221</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7221"/>
		<updated>2026-07-20T16:31:29Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Option 1: Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Option 2: Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
'''The first hour of the day''' used in the following description of the optimization refers to '''03:00:00 AM to 03:59:59 AM German local time''' (01:00:00 AM to 01:59:59 AM UTC during daylight saving time; 02:00:00 AM to 02:59:59 AM UTC during standard time).&lt;br /&gt;
&lt;br /&gt;
====Option 1: Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day and it will be referenced in the manifest file for the following 23 hours of the day. &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 02:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Option 2: Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
* '''The metadata reported in the AGF measurement data for a given assetid (including episode title, duration, and custom variables nol_c0–nol_c19) is locked in by the first video request of the day and its corresponding hourly metadata file. Subsequent metadata changes during the day will be ignored.'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
'''Use only if the asset metadata file optimization is not used and is delivered per platform with this subbrand value'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF.  &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Use only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience usage, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers.&lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends (either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback is interrupted for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping (“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7220</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7220"/>
		<updated>2026-07-20T16:15:51Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Option 1: Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Option 2: Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
'''The first hour of the day''' used in the following description of the optimization refers to '''03:00:00 AM to 03:59:59 AM German local time''' (01:00:00 AM to 01:59:59 AM UTC during daylight saving time; 02:00:00 AM to 02:59:59 AM UTC during standard time).&lt;br /&gt;
&lt;br /&gt;
====Option 1: Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day and it will be referenced in the manifest file for the following 23 hours of the day. &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 02:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Option 2: Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
* '''If the metadata values i.e. custom variables (nol_c0 to nol_c19) for a given assetid change during the day,the first meta data value from the first hour of the day is the one which will be used for the data aggregation.'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
'''Use only if the asset metadata file optimization is not used and is delivered per platform with this subbrand value'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF.  &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Use only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience usage, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers.&lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends (either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback is interrupted for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping (“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7219</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7219"/>
		<updated>2026-07-20T15:58:52Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Option 1: Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Option 2: Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
'''The first hour of the day''' used in the following description of the optimization refers to '''03:00:00 AM to 03:59:59 AM German local time''' (01:00:00 AM to 01:59:59 AM UTC during daylight saving time; 02:00:00 AM to 02:59:59 AM UTC during standard time).&lt;br /&gt;
&lt;br /&gt;
====Option 1: Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day and it will be referenced in the manifest file for the following 23 hours of the day. &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 02:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Option 2: Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
'''Use only if the asset metadata file optimization is not used and is delivered per platform with this subbrand value'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF.  &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Use only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience usage, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers.&lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends (either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback is interrupted for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping (“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7218</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7218"/>
		<updated>2026-07-20T15:52:39Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Option 1: Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Option 2: Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
'''The first hour of the day''' used in the following description of the optimization refers to '''03:00:00 AM to 03:59:59 AM German local time''' (01:00:00 AM to 01:59:59 AM UTC during daylight saving time; 02:00:00 AM to 02:59:59 AM UTC during standard time).&lt;br /&gt;
&lt;br /&gt;
====Option 1: Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day and it will be referenced in the manifest file for the following 23 hours of the day. &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 02:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Option 2: Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
'''Use only if the asset metadata file optimization is not used and is delivered per platform with this subbrand value'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF.  &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Use only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends (either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback is interrupted for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping (“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7217</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7217"/>
		<updated>2026-07-20T15:51:46Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Option 1: Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Option 2: Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
'''The first hour of the day''' used in the following description of the optimization refers to '''03:00:00 AM to 03:59:59 AM German local time''' (01:00:00 AM to 01:59:59 AM UTC during daylight saving time; 02:00:00 AM to 02:59:59 AM UTC during standard time).&lt;br /&gt;
&lt;br /&gt;
====Option 1: Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day and it will be referenced in the manifest file for the following 23 hours of the day. &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 02:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Option 2: Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
'''Use only if the asset metadata file optimization is not used and is delivered per platform with this subbrand value'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF.  &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. For ads, the field remains blank &amp;quot;&amp;quot;.  &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Use only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends (either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback is interrupted for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping (“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7216</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7216"/>
		<updated>2026-07-20T15:32:22Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* SLA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Option 1: Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Option 2: Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
'''The first hour of the day''' used in the following description of the optimization refers to '''03:00:00 AM to 03:59:59 AM German local time''' (01:00:00 AM to 01:59:59 AM UTC during daylight saving time; 02:00:00 AM to 02:59:59 AM UTC during standard time).&lt;br /&gt;
&lt;br /&gt;
====Option 1: Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day and it will be referenced in the manifest file for the following 23 hours of the day. &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 02:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Option 2: Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
'''Use only if the asset metadata file optimization is not used and is delivered per platform with this subbrand value'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF. For Ad, the field remains blank &amp;quot;&amp;quot;.   &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. For ads, the field remains blank &amp;quot;&amp;quot;.  &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Use only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends (either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback is interrupted for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping (“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7215</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7215"/>
		<updated>2026-07-20T15:15:37Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving the 4 files for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. &lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Option 1: Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Option 2: Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
'''The first hour of the day''' used in the following description of the optimization refers to '''03:00:00 AM to 03:59:59 AM German local time''' (01:00:00 AM to 01:59:59 AM UTC during daylight saving time; 02:00:00 AM to 02:59:59 AM UTC during standard time).&lt;br /&gt;
&lt;br /&gt;
====Option 1: Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day and it will be referenced in the manifest file for the following 23 hours of the day. &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 02:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Option 2: Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
'''Use only if the asset metadata file optimization is not used and is delivered per platform with this subbrand value'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF. For Ad, the field remains blank &amp;quot;&amp;quot;.   &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. For ads, the field remains blank &amp;quot;&amp;quot;.  &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Use only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends (either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback is interrupted for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping (“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7214</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7214"/>
		<updated>2026-07-20T15:14:18Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving the 4 files for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. &lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Option 1: Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Option 2: Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
'''The first hour of the day''' used in the following description of the optimization refers to '''03:00:00 AM to 03:59:59 AM German local time''' (01:00:00 AM to 01:59:59 AM UTC during daylight saving time; 02:00:00 AM to 02:59:59 AM UTC during standard time).&lt;br /&gt;
&lt;br /&gt;
====Option 1: Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day and it will be referenced in the manifest file for the following 23 hours of the day. &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 02:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Option 2: Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
'''Note:'''&lt;br /&gt;
'''Use only if the asset metadata file optimization is not used and is delivered per platform with this subbrand value'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF. For Ad, the field remains blank &amp;quot;&amp;quot;.   &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. For ads, the field remains blank &amp;quot;&amp;quot;.  &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Use only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends (either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback is interrupted for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping (“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7213</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7213"/>
		<updated>2026-07-20T15:08:58Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving the 4 files for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. &lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Option 1: Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Option 2: Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
'''The first hour of the day''' used in the following description of the optimization refers to '''03:00:00 AM to 03:59:59 AM German local time''' (01:00:00 AM to 01:59:59 AM UTC during daylight saving time; 02:00:00 AM to 02:59:59 AM UTC during standard time).&lt;br /&gt;
&lt;br /&gt;
====Option 1: Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day and it will be referenced in the manifest file for the following 23 hours of the day. &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 02:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Option 2: Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF. For Ad, the field remains blank &amp;quot;&amp;quot;.   &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. For ads, the field remains blank &amp;quot;&amp;quot;.  &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Use only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends (either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback is interrupted for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping (“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7212</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7212"/>
		<updated>2026-07-20T14:59:36Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving the 4 files for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. &lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Option 1: Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Option 2: Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
'''The first hour of the day''' used in the following description of the optimization refers to '''03:00:00 AM to 03:59:59 AM German local time''' (01:00:00 AM to 01:59:59 AM UTC during daylight saving time; 02:00:00 AM to 02:59:59 AM UTC during standard time).&lt;br /&gt;
&lt;br /&gt;
====Option 1: Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day and it will be referenced in the manifest file for the following 23 hours of the day. &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 02:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Option 2: Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF. For Ad, the field remains blank &amp;quot;&amp;quot;.   &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. For ads, the field remains blank &amp;quot;&amp;quot;.  &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Ue only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends (either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback is interrupted for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping (“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7211</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7211"/>
		<updated>2026-07-20T07:49:40Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Asset Metadata Delivery Optimization */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving the 4 files for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. &lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Option 1: Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Option 2: Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
'''The first hour of the day''' used in the following description of the optimization refers to '''03:00:00 AM to 03:59:59 AM German local time''' (01:00:00 AM to 01:59:59 AM UTC during daylight saving time; 02:00:00 AM to 02:59:59 AM UTC during standard time).&lt;br /&gt;
&lt;br /&gt;
====Option 1: Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day and it will be referenced in the manifest file for the following 23 hours of the day. &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 02:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Option 2: Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF. For Ad, the field remains blank &amp;quot;&amp;quot;.   &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. For ads, the field remains blank &amp;quot;&amp;quot;.  &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Ue only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback is interrupted for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping (“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7210</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7210"/>
		<updated>2026-07-20T07:43:38Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Streams */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving the 4 files for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. &lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
'''The first hour of the day''' used in the following description of the optimization refers to '''03:00:00 AM to 03:59:59 AM German local time''' (01:00:00 AM to 01:59:59 AM UTC during daylight saving time; 02:00:00 AM to 02:59:59 AM UTC during standard time).&lt;br /&gt;
&lt;br /&gt;
====Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day and it will be referenced in the manifest file for the following 23 hours of the day. &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 02:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF. For Ad, the field remains blank &amp;quot;&amp;quot;.   &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. For ads, the field remains blank &amp;quot;&amp;quot;.  &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Ue only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback is interrupted for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping (“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7209</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7209"/>
		<updated>2026-07-20T07:40:45Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Streams */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving the 4 files for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. &lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
'''The first hour of the day''' used in the following description of the optimization refers to '''03:00:00 AM to 03:59:59 AM German local time''' (01:00:00 AM to 01:59:59 AM UTC during daylight saving time; 02:00:00 AM to 02:59:59 AM UTC during standard time).&lt;br /&gt;
&lt;br /&gt;
====Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day and it will be referenced in the manifest file for the following 23 hours of the day. &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 02:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF. For Ad, the field remains blank &amp;quot;&amp;quot;.   &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. For ads, the field remains blank &amp;quot;&amp;quot;.  &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Ue only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping (“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7208</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7208"/>
		<updated>2026-07-20T07:16:04Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Introduction */ line break removed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving the 4 files for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. &lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
'''The first hour of the day''' used in the following description of the optimization refers to '''03:00:00 AM to 03:59:59 AM German local time''' (01:00:00 AM to 01:59:59 AM UTC during daylight saving time; 02:00:00 AM to 02:59:59 AM UTC during standard time).&lt;br /&gt;
&lt;br /&gt;
====Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day and it will be referenced in the manifest file for the following 23 hours of the day. &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 02:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF. For Ad, the field remains blank &amp;quot;&amp;quot;.   &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. For ads, the field remains blank &amp;quot;&amp;quot;.  &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Ue only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7207</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7207"/>
		<updated>2026-07-17T13:04:34Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Asset Metadata File for the hour 02:00:00 AM UTC to 01:59:59 AM UTC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving the 4 files for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. &lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
'''The first hour of the day''' used in the following description of the optimization refers to '''03:00:00 AM to 03:59:59 AM German local time''' (01:00:00 AM to 01:59:59 AM UTC during daylight saving time; 02:00:00 AM to 02:59:59 AM UTC during standard time).&lt;br /&gt;
&lt;br /&gt;
====Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day and it will be referenced in the manifest file for the following 23 hours of the day. &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 02:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF. For Ad, the field remains blank &amp;quot;&amp;quot;.   &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. For ads, the field remains blank &amp;quot;&amp;quot;.  &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Ue only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7206</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7206"/>
		<updated>2026-07-17T13:03:04Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Asset Metadata Delivery Optimization */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving the 4 files for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. &lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
'''The first hour of the day''' used in the following description of the optimization refers to '''03:00:00 AM to 03:59:59 AM German local time''' (01:00:00 AM to 01:59:59 AM UTC during daylight saving time; 02:00:00 AM to 02:59:59 AM UTC during standard time).&lt;br /&gt;
&lt;br /&gt;
====Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day and it will be referenced in the manifest file for the following 23 hours of the day. &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF. For Ad, the field remains blank &amp;quot;&amp;quot;.   &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. For ads, the field remains blank &amp;quot;&amp;quot;.  &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Ue only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7205</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7205"/>
		<updated>2026-07-17T12:55:17Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Asset Metadata Delivery Optimization */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving the 4 files for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. &lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
'''The first hour of the day'' used in the following description of the optimization refers to '''03:00:00 AM to 03:59:59 AM German local time''' (01:00:00 AM to 01:59:59 AM UTC during daylight saving time; 02:00:00 AM to 02:59:59 AM UTC during standard time).&lt;br /&gt;
&lt;br /&gt;
====Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day and it will be referenced in the manifest file for the following 23 hours of the day. &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF. For Ad, the field remains blank &amp;quot;&amp;quot;.   &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. For ads, the field remains blank &amp;quot;&amp;quot;.  &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Ue only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7204</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7204"/>
		<updated>2026-07-17T12:54:12Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Asset Metadata Delivery Optimization */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving the 4 files for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. &lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
The first hour of the day used in the following description of the optimization refer to '''03:00:00 AM to 03:59:59 AM German local time''' (01:00:00 AM to 01:59:59 AM UTC during daylight saving time; 02:00:00 AM to 02:59:59 AM UTC during standard time).&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
====Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day and it will be referenced in the manifest file for the following 23 hours of the day. &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF. For Ad, the field remains blank &amp;quot;&amp;quot;.   &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. For ads, the field remains blank &amp;quot;&amp;quot;.  &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Ue only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7203</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7203"/>
		<updated>2026-07-17T12:39:30Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Optimization when the Asset Metadata File remains unchanged during the whole day per platform */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving the 4 files for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. &lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
====Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day ('''01:00:00 AM UTC to 01:59:59 AM UTC''' and it will be referenced in the manifest file for the following 23 hours of the day. The first hour of the day '''01:00:00 AM UTC to 01:59:59 AM UTC''' corresponds to the following '''german local time''': &lt;br /&gt;
* during daylight saving time&lt;br /&gt;
** 03:00:00 AM to 03:59:59 AM &lt;br /&gt;
* during standard time&lt;br /&gt;
** 02:00:00 AM to 02:59:59 AM &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day (01:00:00 AM UTC to 01:59:59 AM UTC '''corresponding''' to 03:00:00 AM UTC to 03:59:59 AM german local time) and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF. For Ad, the field remains blank &amp;quot;&amp;quot;.   &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. For ads, the field remains blank &amp;quot;&amp;quot;.  &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Ue only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7202</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7202"/>
		<updated>2026-07-17T12:38:37Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Optimization when the Asset Metadata File remains unchanged during the whole day per platform */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving the 4 files for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. &lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
====Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day ('''01:00:00 AM UTC to 01:59:59 AM UTC''' and it will be referenced in the manifest file for the following 23 hours of the day. The first hour of the day '''01:00:00 AM UTC to 01:59:59 AM UTC''' corresponds to the following '''german local time'': &lt;br /&gt;
* during daylight saving time&lt;br /&gt;
** 03:00:00 AM to 03:59:59 AM &lt;br /&gt;
* during standard time&lt;br /&gt;
** 02:00:00 AM to 02:59:59 AM &lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day (01:00:00 AM UTC to 01:59:59 AM UTC '''corresponding''' to 03:00:00 AM UTC to 03:59:59 AM german local time) and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF. For Ad, the field remains blank &amp;quot;&amp;quot;.   &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. For ads, the field remains blank &amp;quot;&amp;quot;.  &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Ue only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7201</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7201"/>
		<updated>2026-07-17T12:19:19Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* File Name (FileName) format for the Asset Metadata and Asset Viewing Files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving the 4 files for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. &lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
====Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day (01:00:00 AM UTC to 01:59:59 AM UTC '''corresponding''' to 03:00:00 AM UTC to 03:59:59 AM german local time) and it will be referenced in the manifest file for the following 23 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day (01:00:00 AM UTC to 01:59:59 AM UTC '''corresponding''' to 03:00:00 AM UTC to 03:59:59 AM german local time) and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF. For Ad, the field remains blank &amp;quot;&amp;quot;.   &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. For ads, the field remains blank &amp;quot;&amp;quot;.  &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Ue only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=Germany_Special_Characters&amp;diff=7200</id>
		<title>Germany Special Characters</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=Germany_Special_Characters&amp;diff=7200"/>
		<updated>2026-07-16T10:29:35Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: Created page with &amp;quot;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}} Category:Digital  '''Special characters''' are characters which are not URL safe and include the following:  {| class=&amp;quot;wikitable&amp;quot; |- ! Character !! Description |- | &amp;quot; &amp;quot; || Space |- | # || Pound |- | $ || Dollar |- | % || Percent |- | @ || 'At' symbol |- | ` || Grave Accent |- | \ || Backslash |- | : || Colon |- | ; || Semi-colon |- | &amp;lt; || 'Less than' symbol |...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
'''Special characters''' are characters which are not URL safe and include the following:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Character !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot; &amp;quot; || Space&lt;br /&gt;
|-&lt;br /&gt;
| # || Pound&lt;br /&gt;
|-&lt;br /&gt;
| $ || Dollar&lt;br /&gt;
|-&lt;br /&gt;
| % || Percent&lt;br /&gt;
|-&lt;br /&gt;
| @ || 'At' symbol&lt;br /&gt;
|-&lt;br /&gt;
| ` || Grave Accent&lt;br /&gt;
|-&lt;br /&gt;
| \ || Backslash&lt;br /&gt;
|-&lt;br /&gt;
| : || Colon&lt;br /&gt;
|-&lt;br /&gt;
| ; || Semi-colon&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt; || 'Less than' symbol&lt;br /&gt;
|-&lt;br /&gt;
| = || Equal&lt;br /&gt;
|-&lt;br /&gt;
| &amp;gt; || 'Greater than' symbol&lt;br /&gt;
|-&lt;br /&gt;
| ? || Question Mark&lt;br /&gt;
|-&lt;br /&gt;
| [ || Left Square Bracket&lt;br /&gt;
|-&lt;br /&gt;
| ] || Right Square Bracket&lt;br /&gt;
|-&lt;br /&gt;
| ^ || Caret&lt;br /&gt;
|-&lt;br /&gt;
| { || Left Curly Brace&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; ||  Bar&lt;br /&gt;
|-&lt;br /&gt;
| } || Right Curly Brace&lt;br /&gt;
|-&lt;br /&gt;
| ~ || Tilde&lt;br /&gt;
|-&lt;br /&gt;
| “ || Left Double quote&lt;br /&gt;
|-&lt;br /&gt;
| ” || Right Double quote&lt;br /&gt;
|-&lt;br /&gt;
| ‘ || Left Single Quote&lt;br /&gt;
|-&lt;br /&gt;
| ’ || Right Single Quote&lt;br /&gt;
|-&lt;br /&gt;
| + || Plus&lt;br /&gt;
|-&lt;br /&gt;
| , || Comma&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7199</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7199"/>
		<updated>2026-07-16T10:18:04Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving the 4 files for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. &lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
====Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day (01:00:00 AM UTC to 01:59:59 AM UTC '''corresponding''' to 03:00:00 AM UTC to 03:59:59 AM german local time) and it will be referenced in the manifest file for the following 23 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day (01:00:00 AM UTC to 01:59:59 AM UTC '''corresponding''' to 03:00:00 AM UTC to 03:59:59 AM german local time) and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF. For Ad, the field remains blank &amp;quot;&amp;quot;.   &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. For ads, the field remains blank &amp;quot;&amp;quot;.  &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Ue only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7198</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7198"/>
		<updated>2026-07-16T10:17:38Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving the 4 files for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. &lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
====Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day (01:00:00 AM UTC to 01:59:59 AM UTC '''corresponding''' to 03:00:00 AM UTC to 03:59:59 AM german local time) and it will be referenced in the manifest file for the following 23 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day (01:00:00 AM UTC to 01:59:59 AM UTC '''corresponding''' to 03:00:00 AM UTC to 03:59:59 AM german local time) and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF. For Ad, the field remains blank &amp;quot;&amp;quot;.   &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. For ads, the field remains blank &amp;quot;&amp;quot;.  &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Ue only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7197</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7197"/>
		<updated>2026-07-16T10:12:07Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* OTT, Mirroring, and Casting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving the 4 files for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. &lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
====Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day (01:00:00 AM UTC to 01:59:59 AM UTC '''corresponding''' to 03:00:00 AM UTC to 03:59:59 AM german local time) and it will be referenced in the manifest file for the following 23 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day (01:00:00 AM UTC to 01:59:59 AM UTC '''corresponding''' to 03:00:00 AM UTC to 03:59:59 AM german local time) and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF. For Ad, the field remains blank &amp;quot;&amp;quot;.   &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. For ads, the field remains blank &amp;quot;&amp;quot;.  &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Ue only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S device casting example]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=File:S2S_casting_example.png&amp;diff=7196</id>
		<title>File:S2S casting example.png</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=File:S2S_casting_example.png&amp;diff=7196"/>
		<updated>2026-07-16T07:00:21Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: S2S device casting example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
S2S device casting example&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7195</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7195"/>
		<updated>2026-07-16T06:59:43Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* OTT, Mirroring, and Casting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving the 4 files for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. &lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
====Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day (01:00:00 AM UTC to 01:59:59 AM UTC '''corresponding''' to 03:00:00 AM UTC to 03:59:59 AM german local time) and it will be referenced in the manifest file for the following 23 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day (01:00:00 AM UTC to 01:59:59 AM UTC '''corresponding''' to 03:00:00 AM UTC to 03:59:59 AM german local time) and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF. For Ad, the field remains blank &amp;quot;&amp;quot;.   &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. For ads, the field remains blank &amp;quot;&amp;quot;.  &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Ue only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:S2S_casting_example.png|S2S_casting_example.png]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7194</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7194"/>
		<updated>2026-07-15T13:27:16Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving the 4 files for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. &lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
====Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day (01:00:00 AM UTC to 01:59:59 AM UTC '''corresponding''' to 03:00:00 AM UTC to 03:59:59 AM german local time) and it will be referenced in the manifest file for the following 23 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day (01:00:00 AM UTC to 01:59:59 AM UTC '''corresponding''' to 03:00:00 AM UTC to 03:59:59 AM german local time) and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF. For Ad, the field remains blank &amp;quot;&amp;quot;.   &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. For ads, the field remains blank &amp;quot;&amp;quot;.  &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Ue only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:France MM S2S casting example.png|France MM S2S casting example.png]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
* '''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt; '''&lt;br /&gt;
** '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7193</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7193"/>
		<updated>2026-07-15T13:21:17Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving the 4 files for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. &lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
====Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day (01:00:00 AM UTC to 01:59:59 AM UTC '''corresponding''' to 03:00:00 AM UTC to 03:59:59 AM german local time) and it will be referenced in the manifest file for the following 23 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day (01:00:00 AM UTC to 01:59:59 AM UTC '''corresponding''' to 03:00:00 AM UTC to 03:59:59 AM german local time) and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF. For Ad, the field remains blank &amp;quot;&amp;quot;.   &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. For ads, the field remains blank &amp;quot;&amp;quot;.  &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Ue only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:France MM S2S casting example.png|France MM S2S casting example.png]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
* '''NOTE:''' '''If Nielsen does not receive the Audit pings, the viewing data cannot be enriched (with device details and country) and  will not be included in the measurement data delivered to AGF.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7192</id>
		<title>DCR Germany Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7192"/>
		<updated>2026-07-15T13:12:57Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
*  The end-user viewing data captured within an hour are delivered to Nielsen through:&lt;br /&gt;
**  The Asset Metadata file &lt;br /&gt;
**  The Asset Viewing file &lt;br /&gt;
* '''The Asset Metadata file should arrive before the Asset Viewing file for the same hour.'''&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The 4 files to be delivered within the SLA are:&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
The 4 files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving the 4 files for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. &lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* &amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;Any files that missed the SLA will not be processed and hence not included in the measurement data delivered to AGF.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time (video player events) at least each 10 seconds to your backend====&lt;br /&gt;
Capture the content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time to your backend when the video playback is interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture accurately each second the viewing time when the network is lost and the video playback continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send the viewing time early on browser refreshed/closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered '''hourly''' in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats for '''Asset Metadata''' and '''Asset Viewing files''' are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format (.json);&lt;br /&gt;
***  PARQUET format (.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits (platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix (S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name (FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dcr, etc).&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, &amp;quot;S2SV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
* '''Optimization per platform''' when the Asset Metadata File remains unchanged per platform during the whole day&lt;br /&gt;
* '''Optimization for all platforms''' when the Asset Metadata File remains unchanged for all platforms during the whole day&lt;br /&gt;
&lt;br /&gt;
====Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day (01:00:00 AM UTC to 01:59:59 AM UTC '''corresponding''' to 03:00:00 AM UTC to 03:59:59 AM german local time) and it will be referenced in the manifest file for the following 23 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 02 (02:00:00 AM UTC to 02:59:59 AM UTC), referencing to the Asset Metadata File for HOUR 01'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 02:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 01):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052502_2022052503_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653444000&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653447599&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/02/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day (01:00:00 AM UTC to 01:59:59 AM UTC '''corresponding''' to 03:00:00 AM UTC to 03:59:59 AM german local time) and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 01 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 01:00:00 AM UTC to 01:59:59 AM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052501_2022052502.json&amp;quot;,&lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653440400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653443999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/01/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.10&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Videoteilenummer)  || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || Genre   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Genre’ contains genre information. To be populated in consultation with AGF. For Ad, the field remains blank &amp;quot;&amp;quot;.   &lt;br /&gt;
|| &lt;br /&gt;
|-s&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || Product ID   &lt;br /&gt;
|| &lt;br /&gt;
* Valid from January 1, 2027&lt;br /&gt;
* The custom variable ‘Product ID’ contains a unique ID across all formats (streaming and TV) that uniquely identifies a product (e.g. an individual episode of a series, a feature film) per provider. For ads, the field remains blank &amp;quot;&amp;quot;.  &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SViewingDataV1.7.1&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || The AppID is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen. || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.1&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| adsupportflag  || user ad-supported subscription model   ||&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;0&amp;quot; non-ad-supported subscription models&lt;br /&gt;
* &amp;quot;1&amp;quot; ad-supported subscription models  &lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
* For broadcasters without any ad-supported subscription models, please pass the value &amp;quot;0&amp;quot; or do not pass &amp;quot;adsupportflag&amp;quot;  at all to Nielsen in the metadata&lt;br /&gt;
* If no value is passed to Nielsen for &amp;quot;adsupportflag&amp;quot;, the default value for AGF is non-ad-supported subscription models&lt;br /&gt;
&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
'''Ue only if the asset metadata file is optimized and delivered once for all platforms and subbrand is not included in the asset metadata file.'''&lt;br /&gt;
&lt;br /&gt;
vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App) &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:France MM S2S casting example.png|France MM S2S casting example.png]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
&lt;br /&gt;
'''start audit ping (“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts (playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping (“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id (“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id (“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping (“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  The apid is a unique ID assigned to the player/site/app. This will be provided upon starting the integration by Nielsen.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>MichelFodjo</name></author>
	</entry>
</feed>