<?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-08-30T11:38:39Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.5</generator>
	<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>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7191</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=7191"/>
		<updated>2026-07-15T13:11:30Z</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&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>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7190</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=7190"/>
		<updated>2026-07-15T13:10:35Z</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&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>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7189</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=7189"/>
		<updated>2026-07-15T13:09: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&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>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Germany_Video_S2S&amp;diff=7188</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=7188"/>
		<updated>2026-07-15T13:08:39Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Android Platform : Example Metadata with &amp;quot;device_id&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&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;
&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=7187</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=7187"/>
		<updated>2026-07-15T13:08:12Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Example */&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;
===== Android Platform : Example Metadata with &amp;quot;device_id&amp;quot;  =====&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; available ======&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;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; not available ======&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;
  }&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;
&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=7186</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=7186"/>
		<updated>2026-07-15T13:06:40Z</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 || 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;
    &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;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Android Platform : Example Metadata with &amp;quot;device_id&amp;quot;  =====&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; available ======&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;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; not available ======&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;
  }&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;
&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=7185</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=7185"/>
		<updated>2026-07-15T12:25:36Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day */&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;
| 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 || '''ONLY for''' '''android''' platform, DO NOT pass device_id for '''ios''', '''browser''' and '''ott''' platforms.  Mobile Ad 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; - OPTIONAL if passed in the Audit Ping|| 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|| 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|| 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;
&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;
    &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;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Android Platform : Example Metadata with &amp;quot;device_id&amp;quot;  =====&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; available ======&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;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; not available ======&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;
  }&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;
&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=7184</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=7184"/>
		<updated>2026-07-15T12:17:08Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day */&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;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;
&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/11/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 00:00:00 AM UTC to 00:59:59 PM 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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501_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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.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;1653436800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653440399&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/00/_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;
| 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 || '''ONLY for''' '''android''' platform, DO NOT pass device_id for '''ios''', '''browser''' and '''ott''' platforms.  Mobile Ad 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; - OPTIONAL if passed in the Audit Ping|| 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|| 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|| 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;
&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;
    &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;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Android Platform : Example Metadata with &amp;quot;device_id&amp;quot;  =====&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; available ======&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;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; not available ======&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;
  }&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;
&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=7183</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=7183"/>
		<updated>2026-07-15T12:13:48Z</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 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(00:00:00 AM UTC to 00:59:59 PM UTC) 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 11 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 11:00:00 AM UTC to 11:59:59 PM 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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.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;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;
&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/11/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 00:00:00 AM UTC to 00:59:59 PM 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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501_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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.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;1653436800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653440399&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/00/_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;
| 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 || '''ONLY for''' '''android''' platform, DO NOT pass device_id for '''ios''', '''browser''' and '''ott''' platforms.  Mobile Ad 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; - OPTIONAL if passed in the Audit Ping|| 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|| 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|| 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;
&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;
    &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;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Android Platform : Example Metadata with &amp;quot;device_id&amp;quot;  =====&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; available ======&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;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; not available ======&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;
  }&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;
&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=7182</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=7182"/>
		<updated>2026-07-15T12:13:01Z</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 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(00:00:00 AM UTC to 00:59:59 PM UTC) 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 11 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 11:00:00 AM UTC to 11:59:59 PM 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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.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;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;
&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/11/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 00:00:00 AM UTC to 00:59:59 PM 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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501_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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.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;1653436800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653440399&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/00/_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;
| 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 || '''ONLY for''' '''android''' platform, DO NOT pass device_id for '''ios''', '''browser''' and '''ott''' platforms.  Mobile Ad 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; - OPTIONAL if passed in the Audit Ping|| 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|| 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|| 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;
&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;
    &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;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Android Platform : Example Metadata with &amp;quot;device_id&amp;quot;  =====&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; available ======&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;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; not available ======&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;
  }&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;
&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=7181</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=7181"/>
		<updated>2026-07-15T12:11:04Z</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 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(00:00:00 AM UTC to 00:59:59 PM UTC) 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 11 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 11:00:00 AM UTC to 11:59:59 PM 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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.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;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;
&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/11/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 00:00:00 AM UTC to 00:59:59 PM 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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501_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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.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;1653436800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653440399&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/00/_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;
| 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 || '''ONLY for''' '''android''' platform, DO NOT pass device_id for '''ios''', '''browser''' and '''ott''' platforms.  Mobile Ad 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; - OPTIONAL if passed in the Audit Ping|| 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|| 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|| 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;
&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;
    &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;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Android Platform : Example Metadata with &amp;quot;device_id&amp;quot;  =====&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; available ======&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;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; not available ======&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;
  }&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;
&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=7180</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=7180"/>
		<updated>2026-07-15T10:52:58Z</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&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(00:00:00 AM UTC to 00:59:59 PM UTC) 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 11 , referencing to the Asset Metadata File for HOUR 00'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 11:00:00 AM UTC to 11:59:59 PM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 00):'''&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/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.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;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 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/11/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 00:00:00 AM UTC to 00:59:59 PM 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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501_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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.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;1653436800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653440399&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/00/_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(00:00:00 AM UTC to 00:59:59 PM UTC) 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 11 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 11:00:00 AM UTC to 11:59:59 PM 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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.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;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;
&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/11/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 00:00:00 AM UTC to 00:59:59 PM 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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501_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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.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;1653436800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653440399&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/00/_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;
| 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 || '''ONLY for''' '''android''' platform, DO NOT pass device_id for '''ios''', '''browser''' and '''ott''' platforms.  Mobile Ad 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; - OPTIONAL if passed in the Audit Ping|| 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|| 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|| 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;
&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;
    &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;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Android Platform : Example Metadata with &amp;quot;device_id&amp;quot;  =====&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; available ======&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;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; not available ======&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;
  }&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;
&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=7179</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=7179"/>
		<updated>2026-07-15T10:09:22Z</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&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 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(00:00:00 AM UTC to 00:59:59 PM UTC) 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 11 , referencing to the Asset Metadata File for HOUR 00'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 11:00:00 AM UTC to 11:59:59 PM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 00):'''&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/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.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;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 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/11/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 00:00:00 AM UTC to 00:59:59 PM 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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501_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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.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;1653436800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653440399&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/00/_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(00:00:00 AM UTC to 00:59:59 PM UTC) 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 11 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 11:00:00 AM UTC to 11:59:59 PM 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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.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;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;
&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/11/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 00:00:00 AM UTC to 00:59:59 PM 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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501_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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.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;1653436800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653440399&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/00/_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;
| 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 || '''ONLY for''' '''android''' platform, DO NOT pass device_id for '''ios''', '''browser''' and '''ott''' platforms.  Mobile Ad 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; - OPTIONAL if passed in the Audit Ping|| 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|| 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|| 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;
&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;
    &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;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Android Platform : Example Metadata with &amp;quot;device_id&amp;quot;  =====&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; available ======&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;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; not available ======&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;
  }&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;
&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=7178</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=7178"/>
		<updated>2026-07-15T10:07:51Z</updated>

		<summary type="html">&lt;p&gt;MichelFodjo: /* Example */&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 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(00:00:00 AM UTC to 00:59:59 PM UTC) 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 11 , referencing to the Asset Metadata File for HOUR 00'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 11:00:00 AM UTC to 11:59:59 PM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 00):'''&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/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.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;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 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/11/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 00:00:00 AM UTC to 00:59:59 PM 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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501_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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.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;1653436800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653440399&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/00/_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(00:00:00 AM UTC to 00:59:59 PM UTC) 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 11 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 11:00:00 AM UTC to 11:59:59 PM 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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.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;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;
&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/11/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 00:00:00 AM UTC to 00:59:59 PM 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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501_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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.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;1653436800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653440399&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/00/_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.0&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.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 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;
| 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 || '''ONLY for''' '''android''' platform, DO NOT pass device_id for '''ios''', '''browser''' and '''ott''' platforms.  Mobile Ad 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; - OPTIONAL if passed in the Audit Ping|| 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|| 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|| 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;
&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;
    &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;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Android Platform : Example Metadata with &amp;quot;device_id&amp;quot;  =====&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; available ======&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;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; not available ======&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;
  }&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;
&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=7177</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=7177"/>
		<updated>2026-07-15T10:07:20Z</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 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(00:00:00 AM UTC to 00:59:59 PM UTC) 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 11 , referencing to the Asset Metadata File for HOUR 00'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 11:00:00 AM UTC to 11:59:59 PM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 00):'''&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/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.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;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 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/11/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 00:00:00 AM UTC to 00:59:59 PM 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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501_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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.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;1653436800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653440399&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/00/_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(00:00:00 AM UTC to 00:59:59 PM UTC) 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 11 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 11:00:00 AM UTC to 11:59:59 PM 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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.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;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;
&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/11/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 00:00:00 AM UTC to 00:59:59 PM 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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501_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/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.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;1653436800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653440399&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/00/_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.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;
&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.0&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.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 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;
| 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 || '''ONLY for''' '''android''' platform, DO NOT pass device_id for '''ios''', '''browser''' and '''ott''' platforms.  Mobile Ad 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; - OPTIONAL if passed in the Audit Ping|| 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|| 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|| 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;
&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;
    &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;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Android Platform : Example Metadata with &amp;quot;device_id&amp;quot;  =====&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; available ======&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;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; not available ======&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;
  }&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;
&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>